今天终于把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头文件

view plain copy to clipboard print ?
  1. #pragma once
  2. // CDirDialog 对话框
  3. #include<string>
  4. #include<vector>
  5. #include "afx.h"
  6. using   namespace  std;
  7. class  CDirDialog :  public  CDialog
  8. {
  9. DECLARE_DYNAMIC(CDirDialog)
  10. public :
  11. CDirDialog(int  MAXFILENUM = 500,CWnd* pParent = NULL);    // 标准构造函数
  12. virtual  ~CDirDialog();
  13. // 对话框数据
  14. enum  { IDD = IDD_LISTDLG };
  15. private :
  16. void  initImageList();
  17. void  clrImageList();
  18. void  initDirTree();
  19. void  clrFileList(CListCtrl *pList);
  20. void  clrTreeItem(CTreeCtrl *pTree,HTREEITEM item);
  21. void  initGUI();
  22. void  clrGUI();
  23. vector<WIN32_FIND_DATA> findFile(string dir);
  24. void  getDirFile(CListCtrl *pList,CTreeCtrl *pTree,HTREEITEM root);
  25. string getPath(CTreeCtrl *pTree,HTREEITEM item);
  26. void  recurDir(string dir,CTreeCtrl *pTree,HTREEITEM root);
  27. public :
  28. vector<string> getSelFile();                  //返回路径
  29. private :
  30. CListCtrl *pFileList;
  31. CTreeCtrl *pDirTree;
  32. CImageList *pImageList;
  33. vector<string>vecSelPath;
  34. vector<string>vecTmp;
  35. HWND  hwndCB;
  36. int  iMaxFileNum;                 //最大存储显示文件数目
  37. protected :
  38. virtual   void  DoDataExchange(CDataExchange* pDX);     // DDX/DDV 支持
  39. DECLARE_MESSAGE_MAP()
  40. public :
  41. virtual   BOOL  OnInitDialog();
  42. public :
  43. afx_msg void  OnTvnSelchangedDir(NMHDR *pNMHDR,  LRESULT  *pResult);
  44. public :
  45. afx_msg void  OnClose();
  46. public :
  47. afx_msg void  OnBnClickedOk();
  48. public :
  49. afx_msg void  OnBnClickedCancel();
  50. public :
  51. afx_msg void  OnActivate( UINT  nState, CWnd* pWndOther,  BOOL  bMinimized);
  52. public :
  53. afx_msg void  OnSettingChange( UINT  uFlags,  LPCTSTR  lpszSection);
  54. };

#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实现文件

view plain copy to clipboard print ?
  1. // DirDialog.cpp : 实现文件
  2. //
  3. #include "../stdafx.h"
  4. #include "../DlgSrc/PDACtrl.h"
  5. #include "DirDialog.h"
  6. // CDirDialog 对话框
  7. IMPLEMENT_DYNAMIC(CDirDialog, CDialog)
  8. CDirDialog::CDirDialog(int  MAXFILENUM,CWnd* pParent  /*=NULL*/ )
  9. : CDialog(CDirDialog::IDD, pParent)
  10. {
  11. this ->iMaxFileNum = MAXFILENUM;
  12. }
  13. CDirDialog::~CDirDialog()
  14. {
  15. }
  16. void  CDirDialog::DoDataExchange(CDataExchange* pDX)
  17. {
  18. CDialog::DoDataExchange(pDX);
  19. }
  20. BEGIN_MESSAGE_MAP(CDirDialog, CDialog)
  21. ON_WM_CREATE()
  22. ON_NOTIFY(TVN_SELCHANGED, IDC_DIR, &CDirDialog::OnTvnSelchangedDir)
  23. ON_WM_CLOSE()
  24. ON_BN_CLICKED(IDC_OK, &CDirDialog::OnBnClickedOk)
  25. ON_BN_CLICKED(IDC_CANCEL, &CDirDialog::OnBnClickedCancel)
  26. ON_WM_ACTIVATE()
  27. ON_WM_SETTINGCHANGE()
  28. END_MESSAGE_MAP()
  29. // CDirDialog 消息处理程序
  30. void  CDirDialog::initGUI()
  31. {
  32. RECT rc;
  33. GetWindowRect(&rc);
  34. rc.top-=26;
  35. MoveWindow(rc.left,rc.top,rc.right,rc.bottom,FALSE); //上移26像素
  36. SHFullScreen(this ->m_hWnd,SHFS_HIDETASKBAR);  //隐藏任务栏
  37. hwndCB = CommandBar_Create(::AfxGetInstanceHandle(),this ->GetSafeHwnd(),1);
  38. CommandBar_AddAdornments (hwndCB, WM_HELP, 0);
  39. }
  40. void  CDirDialog::clrGUI()
  41. {
  42. ::CommandBar_Destroy(hwndCB);
  43. }
  44. void  CDirDialog::initDirTree()
  45. {
  46. pFileList = (CListCtrl*)this ->GetDlgItem(IDC_FILELIST);
  47. pDirTree = (CTreeCtrl*)this ->GetDlgItem(IDC_DIR);
  48. pFileList->SetImageList(pImageList,LVSIL_SMALL);
  49. pDirTree->SetImageList(pImageList,TVSIL_NORMAL);
  50. int  iIndex = 0;
  51. HTREEITEM root = pDirTree->InsertItem(L"." ,1,1);
  52. recurDir("." ,pDirTree,root);
  53. }
  54. void  CDirDialog::initImageList()
  55. {
  56. pImageList = new  CImageList();
  57. pImageList->Create(16,16,ILC_COLOR,2,6);
  58. CBitmap *pBmp = new  CBitmap();
  59. pBmp->LoadBitmapW(IDB_FILEBMP);
  60. pImageList->Add(pBmp,(CBitmap*)NULL);
  61. delete  pBmp;
  62. pBmp = new  CBitmap();
  63. pBmp->LoadBitmapW(IDB_FOLDERBMP);
  64. pImageList->Add(pBmp,(CBitmap*)NULL);
  65. delete  pBmp;
  66. }
  67. void  CDirDialog::clrImageList()
  68. {
  69. delete  pImageList;
  70. }
  71. BOOL  CDirDialog::OnInitDialog()
  72. {
  73. CDialog::OnInitDialog();
  74. // TODO:  在此添加额外的初始化
  75. initImageList();
  76. initDirTree();
  77. return  TRUE;   // return TRUE unless you set the focus to a control
  78. // 异常: OCX 属性页应返回 FALSE
  79. }
  80. vector<WIN32_FIND_DATA> CDirDialog::findFile(string dir)
  81. {
  82. vector<WIN32_FIND_DATA>vecRet;
  83. WIN32_FIND_DATA ffd;
  84. HANDLE  hFind;
  85. USES_CONVERSION;
  86. hFind = FindFirstFile(A2W(dir.c_str()), &ffd);
  87. if  (hFind == INVALID_HANDLE_VALUE)
  88. {
  89. //no file found
  90. }
  91. else
  92. {
  93. do {
  94. vecRet.push_back(ffd);
  95. }while (FindNextFile(hFind, &ffd));
  96. }
  97. FindClose(hFind);
  98. return  vecRet;
  99. }
  100. void  CDirDialog::recurDir(string dir,CTreeCtrl *pTree,HTREEITEM root)
  101. {
  102. USES_CONVERSION;
  103. vector<WIN32_FIND_DATA> vecFile;
  104. dir += "//*" ;
  105. vecFile = findFile(dir);
  106. if (vecFile.size() == 0)
  107. return ;
  108. else
  109. {
  110. int  iIndex = 0;
  111. string strPath = getPath(pTree,root);
  112. for ( int  i = 0;i<vecFile.size();i++)
  113. {
  114. if (vecFile[i].dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
  115. {
  116. HTREEITEM cItem = pDirTree->InsertItem(vecFile[i].cFileName,1,1,root);
  117. string strCurDir = strPath + (string)W2A(vecFile[i].cFileName);
  118. recurDir(strCurDir,pTree,cItem);
  119. }
  120. }
  121. }
  122. }
  123. string CDirDialog::getPath(CTreeCtrl *pTree,HTREEITEM item)
  124. {
  125. USES_CONVERSION;
  126. string strPath("" );
  127. string curDir = (string)W2A(pDirTree->GetItemText(item));
  128. while ((item = pDirTree->GetParentItem(item)) != NULL)
  129. {
  130. CString cs = pDirTree->GetItemText(item);
  131. strPath = (string)W2A(cs) +"//"  + strPath;
  132. }
  133. strPath = strPath + curDir + "//" ;
  134. return  strPath;                              // 返回 路径 + / eg ./root/test
  135. }
  136. void  CDirDialog::clrFileList(CListCtrl *pList)
  137. {
  138. pList->DeleteAllItems();
  139. }
  140. void  CDirDialog::clrTreeItem(CTreeCtrl *pTree,HTREEITEM hDelItem)
  141. {
  142. HTREEITEM hChildItem = pTree->GetChildItem(hDelItem);
  143. while  (hChildItem != NULL)
  144. {
  145. pTree->DeleteItem(hChildItem);
  146. hChildItem = pTree->GetChildItem(hDelItem);
  147. }
  148. }
  149. void  CDirDialog::getDirFile(CListCtrl *pList,CTreeCtrl *pTree,HTREEITEM root)
  150. {
  151. clrFileList(pList);
  152. vecTmp.clear();
  153. vecTmp.reserve(iMaxFileNum);
  154. USES_CONVERSION;
  155. string strPath = getPath(pTree,root);
  156. string dir = strPath + "//*" ;
  157. vector<WIN32_FIND_DATA> vecFile;
  158. vecFile = findFile(dir);
  159. int  iIndex = 0;
  160. int  jL(0);
  161. for ( int  i = 0;i<vecFile.size();i++)
  162. {
  163. if (!(vecFile[i].dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
  164. {
  165. string strFile = strPath + (string)W2A(vecFile[i].cFileName);
  166. vecTmp.push_back(strFile);
  167. pFileList->InsertItem(jL,vecFile[i].cFileName,0);
  168. pFileList->SetItemData(jL,(DWORD )&vecTmp[jL]);
  169. jL++;
  170. }
  171. }
  172. }
  173. void  CDirDialog::OnTvnSelchangedDir(NMHDR *pNMHDR,  LRESULT  *pResult)
  174. {
  175. LPNMTREEVIEW pNMTreeView = reinterpret_cast <LPNMTREEVIEW>(pNMHDR);
  176. // TODO: 在此添加控件通知处理程序代码
  177. HTREEITEM selItem = pDirTree->GetSelectedItem();
  178. if (selItem == NULL)
  179. return ;
  180. getDirFile(pFileList,pDirTree,selItem);
  181. *pResult = 0;
  182. }
  183. void  CDirDialog::OnClose()
  184. {
  185. // TODO: 在此添加消息处理程序代码和/或调用默认值
  186. clrImageList();
  187. CDialog::OnClose();
  188. }
  189. vector<string> CDirDialog::getSelFile()
  190. {
  191. return  vecSelPath;
  192. }
  193. void  CDirDialog::OnBnClickedOk()
  194. {
  195. // TODO: 在此添加控件通知处理程序代码
  196. POSITION pos = pFileList->GetFirstSelectedItemPosition();
  197. int  index(0);
  198. while (pos)
  199. {
  200. index = pFileList->GetNextSelectedItem(pos);
  201. string strPath = (*(string*)pFileList->GetItemData(index));
  202. vecSelPath.push_back(strPath);
  203. }
  204. EndDialog(IDOK);
  205. }
  206. void  CDirDialog::OnBnClickedCancel()
  207. {
  208. // TODO: 在此添加控件通知处理程序代码
  209. EndDialog(IDCANCEL);
  210. }
  211. void  CDirDialog::OnActivate( UINT  nState, CWnd* pWndOther,  BOOL  bMinimized)
  212. {
  213. CWnd::OnActivate(nState, pWndOther, bMinimized);
  214. SHFullScreen( this ->m_hWnd, SHFS_HIDETASKBAR);
  215. // TODO: 在此处添加消息处理程序代码
  216. }
  217. void  CDirDialog::OnSettingChange( UINT  uFlags,  LPCTSTR  lpszSection)
  218. {
  219. //CDialog::OnSettingChange(uFlags, lpszSection);
  220. // TODO: 在此处添加消息处理程序代码
  221. }

// 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)相关推荐

  1. 在项目里交叉使用Swift和OC

    wift and Objective-C in the Same Project 在项目里交叉使用Swift和OC Swift与OC的兼容性使得你可以在项目里使用Swift+OC的方式编写应用程序,称 ...

  2. 使用MyEclipse构建MAVEN项目 - 我的漫漫程序之旅 - BlogJava

    使用MyEclipse构建MAVEN项目 - 我的漫漫程序之旅 - BlogJava这里用的是MyEclpise的自带的MAVEN插件. Maven最好配置成你自己安装的那个,MyEclipse自带会 ...

  3. 在项目里交叉使用Swift和OC【转】

    Swift and Objective-C in the Same Project 在项目里交叉使用Swift和OC Swift与OC的兼容性使得你可以在项目里使用Swift+OC的方式编写应用程序, ...

  4. 一文捋清项目里的各种配置,看了必懂!

    点击关注公众号,实用技术文章及时了解 来源:lepdou.github.io/blogs/config/config.html 引言 项目开发中总是有各种各样的配置,对于程序开发新手来说,配置是摆在面 ...

  5. Node.js 单元测试:我要写测试 - Mocha - Nodejs开源项目里怎么样写测试、CI和代码测试覆盖率

    -------------------------------------- 单元测试Express/NodeJs 个人理解, 1,如果不是测试http请求的单元测试,用Mocha, Chai等基本够 ...

  6. 项目里的UT越来越慢,怎么办?

    项目里的UT越来越慢,怎么办? JUnit是一个Java语言的单元测试框架.它由Kent Beck和Erich Gamma建立,逐渐成为源于Kent Beck的sUnit的xUnit家族中最为成功的一 ...

  7. 面试中更多会考核相关技能的项目经验——再论程序员该如何准备面试

    在如何准备Java面试?如何把面试官的提问引导到自己准备好的范围内?这篇博文后,提到了不少引导的说辞和技巧,如果能把面试官的提问引导到事先准备好的亮点上,一方面确实可以更有效地耗费面试时间,另一方面也 ...

  8. 如何把Iconfont阿里巴巴矢量图标库引入web项目和微信小程序中,拿走不谢

    登录Iconfont-阿里巴巴矢量图标库 官文地址:https://www.iconfont.cn/ ①必须登录才行,我这边是用新浪微博登录的 ②然后可以搜索自己需要的图标,比如搜索homt,然后鼠标 ...

  9. REVIT中一次性导出项目里的族及“项目族管理”操作

    一.Revit中如何将项目里的族一次性导出 如何将一个项目中的族导出? 1.单击应用程序菜单,从下拉列表中选择"另存为"→"库"→"族",如 ...

最新文章

  1. 编程实现路由算法 实验报告_lt;中国通信专刊gt; EARS:用于软件定义网络中自动路由的智能驱动体验网络架构...
  2. java将0到9随机输出_生成0到9之间的随机整数
  3. 8坨穿越千年的便便,让哈佛科学家找到治疗糖尿病的线索 | Nature
  4. mysql 执行计划详解_mysql explain执行计划详解
  5. 6种常见的Git错误以及解决的办法
  6. Angular 事件绑定语法在 SAP Spartacus Popover Component 中的一个应用
  7. assert函数_悉数Python函数传参的语法糖
  8. ubuntu联网_Ubuntu物联网操作系统新版发布,支持10年安全更新,镜像仅280M
  9. 设计模式—23种设计模式总览
  10. 【洛谷 P3384】树链剖分【详解树链剖分】
  11. MFC界面设计入门篇
  12. 数学一年级应用题_一年级训练思维的数学应用题五十道,含答案解析
  13. 独自封装windows 10系统教程(全)
  14. Java信息管理系统模板思维导图
  15. 大数据面试题——spark
  16. 激活函数总结——2020.2.10
  17. win2003 Enterprise Edition sp2 企业版序列号
  18. Ubuntu10.10 CAJView安装 读取nh\kdh\caj文件 成功
  19. vnc4server安装路径_redhat6.9VNC安装目录和注意项
  20. 最全大数据就业前景分析!此篇文章给你答案

热门文章

  1. htcvive怎么输入_Steam VR(HTCVIVE)按键调用
  2. 女性哺乳期可以染发吗?
  3. 反射型XSS,存储型XSS,Dom型XSS,如何获取cookie,XSS钓鱼,XSS获取键盘记录
  4. MySQL知识——基本知识
  5. java stream toarray_java8 stream接口 终端操作 toArray操作
  6. OPPO Watch与vivo Watch,哪个更值得入手?
  7. 【订单服务】库存解锁和关单
  8. Alfred 初学者指南:如何在 Mac 之间同步 Alfred 设置?
  9. 10个艰难的Java面试题与答案
  10. Java解析Json对象