项目里的PDA程序

今天终于把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); };

 

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: 在此处添加消息处理程序代码 }

 

效果项目里的PDA程序_第1张图片

4)程序运行效果图:

项目里的PDA程序_第2张图片

 

项目里的PDA程序_第3张图片

 

项目里的PDA程序_第4张图片

 

项目里的PDA程序_第5张图片

你可能感兴趣的:(String,File,null,delete,任务,WinCE)