项目里的PDA程序(zhuan)
今天终于把pda版本重新做好,最近好多东西要烦,烦这烦那,没时间做这个东西,今天总算弄好了,可以安心开始看书了!
这个pda版本把早段时间做的跨平台socket库用上,所以基本上底层网络基本不用怎么做,直接用就好了,然后再加上原来那些上层代码复用,所以功能很快就实现,主要可能是一些Pocket pc不兼容的函数或者控件需要考虑,记录一下:
1)如果忘记定义析构函数,有可能导致程序在pocket pc上会无端端退出。
2)代码记录:
添加菜单代码:
void CPDACtrlDlg::initMenu()
{
hwndCB = CommandBar_Create(::AfxGetInstanceHandle(),this->GetSafeHwnd(),1);
CommandBar_InsertMenubar (hwndCB,::AfxGetInstanceHandle(), IDR_MAIN_MENU, 0);
CommandBar_AddAdornments (hwndCB, WM_HELP , 0);
}
全屏设置代码:
void CPDACtrlDlg::initGUI()
{
RECT rc;
GetWindowRect(&rc);
rc.top-=26;
MoveWindow(rc.left,rc.top,rc.right,rc.bottom,FALSE); //上移26像素
SHFullScreen(this->m_hWnd,SHFS_HIDETASKBAR); //隐藏任务栏
initMenu();
}
菜单check项修改:
HMENU hmenu = ::CommandBar_GetMenu(hwndCB,0);
UINT state = ::GetMenuState(hmenu,ID_PUSHPLAY,MF_BYCOMMAND);
ASSERT(state != 0xFFFFFFFF);
if (state & MF_CHECKED)
{
pBaseServer->unloadService(pCallPlayResp->getRespType());
CheckMenuItem(hmenu,ID_PUSHPLAY, MF_UNCHECKED | MF_BYCOMMAND);
}
else
{
pBaseServer->loadService(pCallPlayResp);
CheckMenuItem(hmenu,ID_PUSHPLAY, MF_CHECKED | MF_BYCOMMAND);
}
3)wince选择一个或多个文件,利用CFileDialog试过不行,所以干脆自己做了个简单的,利用CTreeCtrl
和CListCtrl一起,做了一个像wince中的资源管理器的东西,代码通过递归所有文件夹目录,在CListCtrl中
显示当前目录下的文件(非文件夹),可以从CListCtrl中选择多个文件,记录文件路径
代码:
DirDlg头文件
- #pragma once
- // CDirDialog 对话框
- #include<string>
- #include<vector>
- #include "afx.h"
- using namespace std;
- class CDirDialog : public CDialog
- {
- DECLARE_DYNAMIC(CDirDialog)
- public :
- CDirDialog(int MAXFILENUM = 500,CWnd* pParent = NULL); // 标准构造函数
- virtual ~CDirDialog();
- // 对话框数据
- enum { IDD = IDD_LISTDLG };
- private :
- void initImageList();
- void clrImageList();
- void initDirTree();
- void clrFileList(CListCtrl *pList);
- void clrTreeItem(CTreeCtrl *pTree,HTREEITEM item);
- void initGUI();
- void clrGUI();
- vector<WIN32_FIND_DATA> findFile(string dir);
- void getDirFile(CListCtrl *pList,CTreeCtrl *pTree,HTREEITEM root);
- string getPath(CTreeCtrl *pTree,HTREEITEM item);
- void recurDir(string dir,CTreeCtrl *pTree,HTREEITEM root);
- public :
- vector<string> getSelFile(); //返回路径
- private :
- CListCtrl *pFileList;
- CTreeCtrl *pDirTree;
- CImageList *pImageList;
- vector<string>vecSelPath;
- vector<string>vecTmp;
- HWND hwndCB;
- int iMaxFileNum; //最大存储显示文件数目
- protected :
- virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持
- DECLARE_MESSAGE_MAP()
- public :
- virtual BOOL OnInitDialog();
- public :
- afx_msg void OnTvnSelchangedDir(NMHDR *pNMHDR, LRESULT *pResult);
- public :
- afx_msg void OnClose();
- public :
- afx_msg void OnBnClickedOk();
- public :
- afx_msg void OnBnClickedCancel();
- public :
- afx_msg void OnActivate( UINT nState, CWnd* pWndOther, BOOL bMinimized);
- public :
- afx_msg void OnSettingChange( UINT uFlags, LPCTSTR lpszSection);
- };
#pragma once // CDirDialog 对话框 #include<string> #include<vector> #include "afx.h" using namespace std; class CDirDialog : public CDialog { DECLARE_DYNAMIC(CDirDialog) public: CDirDialog(int MAXFILENUM = 500,CWnd* pParent = NULL); // 标准构造函数 virtual ~CDirDialog(); // 对话框数据 enum { IDD = IDD_LISTDLG }; private: void initImageList(); void clrImageList(); void initDirTree(); void clrFileList(CListCtrl *pList); void clrTreeItem(CTreeCtrl *pTree,HTREEITEM item); void initGUI(); void clrGUI(); vector<WIN32_FIND_DATA> findFile(string dir); void getDirFile(CListCtrl *pList,CTreeCtrl *pTree,HTREEITEM root); string getPath(CTreeCtrl *pTree,HTREEITEM item); void recurDir(string dir,CTreeCtrl *pTree,HTREEITEM root); public: vector<string> getSelFile(); //返回路径 private: CListCtrl *pFileList; CTreeCtrl *pDirTree; CImageList *pImageList; vector<string>vecSelPath; vector<string>vecTmp; HWND hwndCB; int iMaxFileNum; //最大存储显示文件数目 protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持 DECLARE_MESSAGE_MAP() public: virtual BOOL OnInitDialog(); public: afx_msg void OnTvnSelchangedDir(NMHDR *pNMHDR, LRESULT *pResult); public: afx_msg void OnClose(); public: afx_msg void OnBnClickedOk(); public: afx_msg void OnBnClickedCancel(); public: afx_msg void OnActivate(UINT nState, CWnd* pWndOther, BOOL bMinimized); public: afx_msg void OnSettingChange(UINT uFlags, LPCTSTR lpszSection); };
DirDlg实现文件
- // DirDialog.cpp : 实现文件
- //
- #include "../stdafx.h"
- #include "../DlgSrc/PDACtrl.h"
- #include "DirDialog.h"
- // CDirDialog 对话框
- IMPLEMENT_DYNAMIC(CDirDialog, CDialog)
- CDirDialog::CDirDialog(int MAXFILENUM,CWnd* pParent /*=NULL*/ )
- : CDialog(CDirDialog::IDD, pParent)
- {
- this ->iMaxFileNum = MAXFILENUM;
- }
- CDirDialog::~CDirDialog()
- {
- }
- void CDirDialog::DoDataExchange(CDataExchange* pDX)
- {
- CDialog::DoDataExchange(pDX);
- }
- BEGIN_MESSAGE_MAP(CDirDialog, CDialog)
- ON_WM_CREATE()
- ON_NOTIFY(TVN_SELCHANGED, IDC_DIR, &CDirDialog::OnTvnSelchangedDir)
- ON_WM_CLOSE()
- ON_BN_CLICKED(IDC_OK, &CDirDialog::OnBnClickedOk)
- ON_BN_CLICKED(IDC_CANCEL, &CDirDialog::OnBnClickedCancel)
- ON_WM_ACTIVATE()
- ON_WM_SETTINGCHANGE()
- END_MESSAGE_MAP()
- // CDirDialog 消息处理程序
- void CDirDialog::initGUI()
- {
- RECT rc;
- GetWindowRect(&rc);
- rc.top-=26;
- MoveWindow(rc.left,rc.top,rc.right,rc.bottom,FALSE); //上移26像素
- SHFullScreen(this ->m_hWnd,SHFS_HIDETASKBAR); //隐藏任务栏
- hwndCB = CommandBar_Create(::AfxGetInstanceHandle(),this ->GetSafeHwnd(),1);
- CommandBar_AddAdornments (hwndCB, WM_HELP, 0);
- }
- void CDirDialog::clrGUI()
- {
- ::CommandBar_Destroy(hwndCB);
- }
- void CDirDialog::initDirTree()
- {
- pFileList = (CListCtrl*)this ->GetDlgItem(IDC_FILELIST);
- pDirTree = (CTreeCtrl*)this ->GetDlgItem(IDC_DIR);
- pFileList->SetImageList(pImageList,LVSIL_SMALL);
- pDirTree->SetImageList(pImageList,TVSIL_NORMAL);
- int iIndex = 0;
- HTREEITEM root = pDirTree->InsertItem(L"." ,1,1);
- recurDir("." ,pDirTree,root);
- }
- void CDirDialog::initImageList()
- {
- pImageList = new CImageList();
- pImageList->Create(16,16,ILC_COLOR,2,6);
- CBitmap *pBmp = new CBitmap();
- pBmp->LoadBitmapW(IDB_FILEBMP);
- pImageList->Add(pBmp,(CBitmap*)NULL);
- delete pBmp;
- pBmp = new CBitmap();
- pBmp->LoadBitmapW(IDB_FOLDERBMP);
- pImageList->Add(pBmp,(CBitmap*)NULL);
- delete pBmp;
- }
- void CDirDialog::clrImageList()
- {
- delete pImageList;
- }
- BOOL CDirDialog::OnInitDialog()
- {
- CDialog::OnInitDialog();
- // TODO: 在此添加额外的初始化
- initImageList();
- initDirTree();
- return TRUE; // return TRUE unless you set the focus to a control
- // 异常: OCX 属性页应返回 FALSE
- }
- vector<WIN32_FIND_DATA> CDirDialog::findFile(string dir)
- {
- vector<WIN32_FIND_DATA>vecRet;
- WIN32_FIND_DATA ffd;
- HANDLE hFind;
- USES_CONVERSION;
- hFind = FindFirstFile(A2W(dir.c_str()), &ffd);
- if (hFind == INVALID_HANDLE_VALUE)
- {
- //no file found
- }
- else
- {
- do {
- vecRet.push_back(ffd);
- }while (FindNextFile(hFind, &ffd));
- }
- FindClose(hFind);
- return vecRet;
- }
- void CDirDialog::recurDir(string dir,CTreeCtrl *pTree,HTREEITEM root)
- {
- USES_CONVERSION;
- vector<WIN32_FIND_DATA> vecFile;
- dir += "//*" ;
- vecFile = findFile(dir);
- if (vecFile.size() == 0)
- return ;
- else
- {
- int iIndex = 0;
- string strPath = getPath(pTree,root);
- for ( int i = 0;i<vecFile.size();i++)
- {
- if (vecFile[i].dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
- {
- HTREEITEM cItem = pDirTree->InsertItem(vecFile[i].cFileName,1,1,root);
- string strCurDir = strPath + (string)W2A(vecFile[i].cFileName);
- recurDir(strCurDir,pTree,cItem);
- }
- }
- }
- }
- string CDirDialog::getPath(CTreeCtrl *pTree,HTREEITEM item)
- {
- USES_CONVERSION;
- string strPath("" );
- string curDir = (string)W2A(pDirTree->GetItemText(item));
- while ((item = pDirTree->GetParentItem(item)) != NULL)
- {
- CString cs = pDirTree->GetItemText(item);
- strPath = (string)W2A(cs) +"//" + strPath;
- }
- strPath = strPath + curDir + "//" ;
- return strPath; // 返回 路径 + / eg ./root/test
- }
- void CDirDialog::clrFileList(CListCtrl *pList)
- {
- pList->DeleteAllItems();
- }
- void CDirDialog::clrTreeItem(CTreeCtrl *pTree,HTREEITEM hDelItem)
- {
- HTREEITEM hChildItem = pTree->GetChildItem(hDelItem);
- while (hChildItem != NULL)
- {
- pTree->DeleteItem(hChildItem);
- hChildItem = pTree->GetChildItem(hDelItem);
- }
- }
- void CDirDialog::getDirFile(CListCtrl *pList,CTreeCtrl *pTree,HTREEITEM root)
- {
- clrFileList(pList);
- vecTmp.clear();
- vecTmp.reserve(iMaxFileNum);
- USES_CONVERSION;
- string strPath = getPath(pTree,root);
- string dir = strPath + "//*" ;
- vector<WIN32_FIND_DATA> vecFile;
- vecFile = findFile(dir);
- int iIndex = 0;
- int jL(0);
- for ( int i = 0;i<vecFile.size();i++)
- {
- if (!(vecFile[i].dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
- {
- string strFile = strPath + (string)W2A(vecFile[i].cFileName);
- vecTmp.push_back(strFile);
- pFileList->InsertItem(jL,vecFile[i].cFileName,0);
- pFileList->SetItemData(jL,(DWORD )&vecTmp[jL]);
- jL++;
- }
- }
- }
- void CDirDialog::OnTvnSelchangedDir(NMHDR *pNMHDR, LRESULT *pResult)
- {
- LPNMTREEVIEW pNMTreeView = reinterpret_cast <LPNMTREEVIEW>(pNMHDR);
- // TODO: 在此添加控件通知处理程序代码
- HTREEITEM selItem = pDirTree->GetSelectedItem();
- if (selItem == NULL)
- return ;
- getDirFile(pFileList,pDirTree,selItem);
- *pResult = 0;
- }
- void CDirDialog::OnClose()
- {
- // TODO: 在此添加消息处理程序代码和/或调用默认值
- clrImageList();
- CDialog::OnClose();
- }
- vector<string> CDirDialog::getSelFile()
- {
- return vecSelPath;
- }
- void CDirDialog::OnBnClickedOk()
- {
- // TODO: 在此添加控件通知处理程序代码
- POSITION pos = pFileList->GetFirstSelectedItemPosition();
- int index(0);
- while (pos)
- {
- index = pFileList->GetNextSelectedItem(pos);
- string strPath = (*(string*)pFileList->GetItemData(index));
- vecSelPath.push_back(strPath);
- }
- EndDialog(IDOK);
- }
- void CDirDialog::OnBnClickedCancel()
- {
- // TODO: 在此添加控件通知处理程序代码
- EndDialog(IDCANCEL);
- }
- void CDirDialog::OnActivate( UINT nState, CWnd* pWndOther, BOOL bMinimized)
- {
- CWnd::OnActivate(nState, pWndOther, bMinimized);
- SHFullScreen( this ->m_hWnd, SHFS_HIDETASKBAR);
- // TODO: 在此处添加消息处理程序代码
- }
- void CDirDialog::OnSettingChange( UINT uFlags, LPCTSTR lpszSection)
- {
- //CDialog::OnSettingChange(uFlags, lpszSection);
- // TODO: 在此处添加消息处理程序代码
- }
// DirDialog.cpp : 实现文件 // #include "../stdafx.h" #include "../DlgSrc/PDACtrl.h" #include "DirDialog.h" // CDirDialog 对话框 IMPLEMENT_DYNAMIC(CDirDialog, CDialog) CDirDialog::CDirDialog(int MAXFILENUM,CWnd* pParent /*=NULL*/) : CDialog(CDirDialog::IDD, pParent) { this->iMaxFileNum = MAXFILENUM; } CDirDialog::~CDirDialog() { } void CDirDialog::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); } BEGIN_MESSAGE_MAP(CDirDialog, CDialog) ON_WM_CREATE() ON_NOTIFY(TVN_SELCHANGED, IDC_DIR, &CDirDialog::OnTvnSelchangedDir) ON_WM_CLOSE() ON_BN_CLICKED(IDC_OK, &CDirDialog::OnBnClickedOk) ON_BN_CLICKED(IDC_CANCEL, &CDirDialog::OnBnClickedCancel) ON_WM_ACTIVATE() ON_WM_SETTINGCHANGE() END_MESSAGE_MAP() // CDirDialog 消息处理程序 void CDirDialog::initGUI() { RECT rc; GetWindowRect(&rc); rc.top-=26; MoveWindow(rc.left,rc.top,rc.right,rc.bottom,FALSE); //上移26像素 SHFullScreen(this->m_hWnd,SHFS_HIDETASKBAR); //隐藏任务栏 hwndCB = CommandBar_Create(::AfxGetInstanceHandle(),this->GetSafeHwnd(),1); CommandBar_AddAdornments (hwndCB, WM_HELP, 0); } void CDirDialog::clrGUI() { ::CommandBar_Destroy(hwndCB); } void CDirDialog::initDirTree() { pFileList = (CListCtrl*)this->GetDlgItem(IDC_FILELIST); pDirTree = (CTreeCtrl*)this->GetDlgItem(IDC_DIR); pFileList->SetImageList(pImageList,LVSIL_SMALL); pDirTree->SetImageList(pImageList,TVSIL_NORMAL); int iIndex = 0; HTREEITEM root = pDirTree->InsertItem(L".",1,1); recurDir(".",pDirTree,root); } void CDirDialog::initImageList() { pImageList = new CImageList(); pImageList->Create(16,16,ILC_COLOR,2,6); CBitmap *pBmp = new CBitmap(); pBmp->LoadBitmapW(IDB_FILEBMP); pImageList->Add(pBmp,(CBitmap*)NULL); delete pBmp; pBmp = new CBitmap(); pBmp->LoadBitmapW(IDB_FOLDERBMP); pImageList->Add(pBmp,(CBitmap*)NULL); delete pBmp; } void CDirDialog::clrImageList() { delete pImageList; } BOOL CDirDialog::OnInitDialog() { CDialog::OnInitDialog(); // TODO: 在此添加额外的初始化 initImageList(); initDirTree(); return TRUE; // return TRUE unless you set the focus to a control // 异常: OCX 属性页应返回 FALSE } vector<WIN32_FIND_DATA> CDirDialog::findFile(string dir) { vector<WIN32_FIND_DATA>vecRet; WIN32_FIND_DATA ffd; HANDLE hFind; USES_CONVERSION; hFind = FindFirstFile(A2W(dir.c_str()), &ffd); if (hFind == INVALID_HANDLE_VALUE) { //no file found } else { do{ vecRet.push_back(ffd); }while(FindNextFile(hFind, &ffd)); } FindClose(hFind); return vecRet; } void CDirDialog::recurDir(string dir,CTreeCtrl *pTree,HTREEITEM root) { USES_CONVERSION; vector<WIN32_FIND_DATA> vecFile; dir += "//*"; vecFile = findFile(dir); if(vecFile.size() == 0) return; else { int iIndex = 0; string strPath = getPath(pTree,root); for(int i = 0;i<vecFile.size();i++) { if(vecFile[i].dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) { HTREEITEM cItem = pDirTree->InsertItem(vecFile[i].cFileName,1,1,root); string strCurDir = strPath + (string)W2A(vecFile[i].cFileName); recurDir(strCurDir,pTree,cItem); } } } } string CDirDialog::getPath(CTreeCtrl *pTree,HTREEITEM item) { USES_CONVERSION; string strPath(""); string curDir = (string)W2A(pDirTree->GetItemText(item)); while((item = pDirTree->GetParentItem(item)) != NULL) { CString cs = pDirTree->GetItemText(item); strPath = (string)W2A(cs) +"//" + strPath; } strPath = strPath + curDir + "//"; return strPath; // 返回 路径 + / eg ./root/test } void CDirDialog::clrFileList(CListCtrl *pList) { pList->DeleteAllItems(); } void CDirDialog::clrTreeItem(CTreeCtrl *pTree,HTREEITEM hDelItem) { HTREEITEM hChildItem = pTree->GetChildItem(hDelItem); while (hChildItem != NULL) { pTree->DeleteItem(hChildItem); hChildItem = pTree->GetChildItem(hDelItem); } } void CDirDialog::getDirFile(CListCtrl *pList,CTreeCtrl *pTree,HTREEITEM root) { clrFileList(pList); vecTmp.clear(); vecTmp.reserve(iMaxFileNum); USES_CONVERSION; string strPath = getPath(pTree,root); string dir = strPath + "//*"; vector<WIN32_FIND_DATA> vecFile; vecFile = findFile(dir); int iIndex = 0; int jL(0); for(int i = 0;i<vecFile.size();i++) { if(!(vecFile[i].dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) { string strFile = strPath + (string)W2A(vecFile[i].cFileName); vecTmp.push_back(strFile); pFileList->InsertItem(jL,vecFile[i].cFileName,0); pFileList->SetItemData(jL,(DWORD)&vecTmp[jL]); jL++; } } } void CDirDialog::OnTvnSelchangedDir(NMHDR *pNMHDR, LRESULT *pResult) { LPNMTREEVIEW pNMTreeView = reinterpret_cast<LPNMTREEVIEW>(pNMHDR); // TODO: 在此添加控件通知处理程序代码 HTREEITEM selItem = pDirTree->GetSelectedItem(); if(selItem == NULL) return; getDirFile(pFileList,pDirTree,selItem); *pResult = 0; } void CDirDialog::OnClose() { // TODO: 在此添加消息处理程序代码和/或调用默认值 clrImageList(); CDialog::OnClose(); } vector<string> CDirDialog::getSelFile() { return vecSelPath; } void CDirDialog::OnBnClickedOk() { // TODO: 在此添加控件通知处理程序代码 POSITION pos = pFileList->GetFirstSelectedItemPosition(); int index(0); while(pos) { index = pFileList->GetNextSelectedItem(pos); string strPath = (*(string*)pFileList->GetItemData(index)); vecSelPath.push_back(strPath); } EndDialog(IDOK); } void CDirDialog::OnBnClickedCancel() { // TODO: 在此添加控件通知处理程序代码 EndDialog(IDCANCEL); } void CDirDialog::OnActivate(UINT nState, CWnd* pWndOther, BOOL bMinimized) { CWnd::OnActivate(nState, pWndOther, bMinimized); SHFullScreen( this->m_hWnd, SHFS_HIDETASKBAR); // TODO: 在此处添加消息处理程序代码 } void CDirDialog::OnSettingChange(UINT uFlags, LPCTSTR lpszSection) { //CDialog::OnSettingChange(uFlags, lpszSection); // TODO: 在此处添加消息处理程序代码 }
效果
4)程序运行效果图:
项目里的PDA程序(zhuan)相关推荐
- 在项目里交叉使用Swift和OC
wift and Objective-C in the Same Project 在项目里交叉使用Swift和OC Swift与OC的兼容性使得你可以在项目里使用Swift+OC的方式编写应用程序,称 ...
- 使用MyEclipse构建MAVEN项目 - 我的漫漫程序之旅 - BlogJava
使用MyEclipse构建MAVEN项目 - 我的漫漫程序之旅 - BlogJava这里用的是MyEclpise的自带的MAVEN插件. Maven最好配置成你自己安装的那个,MyEclipse自带会 ...
- 在项目里交叉使用Swift和OC【转】
Swift and Objective-C in the Same Project 在项目里交叉使用Swift和OC Swift与OC的兼容性使得你可以在项目里使用Swift+OC的方式编写应用程序, ...
- 一文捋清项目里的各种配置,看了必懂!
点击关注公众号,实用技术文章及时了解 来源:lepdou.github.io/blogs/config/config.html 引言 项目开发中总是有各种各样的配置,对于程序开发新手来说,配置是摆在面 ...
- Node.js 单元测试:我要写测试 - Mocha - Nodejs开源项目里怎么样写测试、CI和代码测试覆盖率
-------------------------------------- 单元测试Express/NodeJs 个人理解, 1,如果不是测试http请求的单元测试,用Mocha, Chai等基本够 ...
- 项目里的UT越来越慢,怎么办?
项目里的UT越来越慢,怎么办? JUnit是一个Java语言的单元测试框架.它由Kent Beck和Erich Gamma建立,逐渐成为源于Kent Beck的sUnit的xUnit家族中最为成功的一 ...
- 面试中更多会考核相关技能的项目经验——再论程序员该如何准备面试
在如何准备Java面试?如何把面试官的提问引导到自己准备好的范围内?这篇博文后,提到了不少引导的说辞和技巧,如果能把面试官的提问引导到事先准备好的亮点上,一方面确实可以更有效地耗费面试时间,另一方面也 ...
- 如何把Iconfont阿里巴巴矢量图标库引入web项目和微信小程序中,拿走不谢
登录Iconfont-阿里巴巴矢量图标库 官文地址:https://www.iconfont.cn/ ①必须登录才行,我这边是用新浪微博登录的 ②然后可以搜索自己需要的图标,比如搜索homt,然后鼠标 ...
- REVIT中一次性导出项目里的族及“项目族管理”操作
一.Revit中如何将项目里的族一次性导出 如何将一个项目中的族导出? 1.单击应用程序菜单,从下拉列表中选择"另存为"→"库"→"族",如 ...
最新文章
- 编程实现路由算法 实验报告_lt;中国通信专刊gt; EARS:用于软件定义网络中自动路由的智能驱动体验网络架构...
- java将0到9随机输出_生成0到9之间的随机整数
- 8坨穿越千年的便便,让哈佛科学家找到治疗糖尿病的线索 | Nature
- mysql 执行计划详解_mysql explain执行计划详解
- 6种常见的Git错误以及解决的办法
- Angular 事件绑定语法在 SAP Spartacus Popover Component 中的一个应用
- assert函数_悉数Python函数传参的语法糖
- ubuntu联网_Ubuntu物联网操作系统新版发布,支持10年安全更新,镜像仅280M
- 设计模式—23种设计模式总览
- 【洛谷 P3384】树链剖分【详解树链剖分】
- MFC界面设计入门篇
- 数学一年级应用题_一年级训练思维的数学应用题五十道,含答案解析
- 独自封装windows 10系统教程(全)
- Java信息管理系统模板思维导图
- 大数据面试题——spark
- 激活函数总结——2020.2.10
- win2003 Enterprise Edition sp2 企业版序列号
- Ubuntu10.10 CAJView安装 读取nh\kdh\caj文件 成功
- vnc4server安装路径_redhat6.9VNC安装目录和注意项
- 最全大数据就业前景分析!此篇文章给你答案