void CHostList::OnCommander() { POSITION pos = GetFirstSelectedItemPosition(); int index = GetNextSelectedItem(pos); if (pos < 0) return; CLIENT_INFO* info; info = (CLIENT_INFO*)GetItemData(index); CCmdDlg *dlg = NULL; if (m_FuncMap[info->clientid].cmd == NULL) { dlg = new CCmdDlg(); dlg->InitModule(info->clientid); dlg->Create(IDD_DIALOG_CMD); m_FuncMap[info->clientid].cmd = dlg; } else { dlg = m_FuncMap[info->clientid].cmd; } dlg->ShowWindow(TRUE); }
// CPanelDlg 消息处理程序 void CPanelDlg::InitInsideModule() { CRect rs; m_TabCtrl.GetClientRect(&rs); rs.top += 21; CFileMgrDlg* FileDlg = new CFileMgrDlg; CTransferDlg* TransDlg = new CTransferDlg; CCmdDlg* CmdDlg = new CCmdDlg; m_MemList.push_back(FileDlg); m_MemList.push_back(TransDlg); m_MemList.push_back(CmdDlg); MODULE_INFO fileInfo = {0}; MODULE_INFO transInfo = {0};; MODULE_INFO cmdInfo = {0};; fileInfo.lpParameter = (CDialogEx*)FileDlg; fileInfo.isInside = TRUE; fileInfo.inside_init = FileDlg->InitModule; fileInfo.handler = FileDlg->HandleModuleMsg; transInfo.lpParameter = (CDialogEx*)TransDlg; transInfo.isInside = TRUE; transInfo.inside_init = TransDlg->InitModule; transInfo.handler = TransDlg->HandleModuleMsg; cmdInfo.lpParameter = (CDialogEx*)CmdDlg; cmdInfo.isInside = TRUE; cmdInfo.inside_init = CmdDlg->InitModule; cmdInfo.handler = CmdDlg->HandleModuleMsg; m_TabCtrl.InsertItem(0,_T("File Manager")); m_TabCtrl.InsertItem(1,_T("Transfer")); m_TabCtrl.InsertItem(2,_T("Shell")); m_moduleMap.insert(MAKE_PAIR(ModuleMap,0,fileInfo)); m_moduleMap.insert(MAKE_PAIR(ModuleMap,1,transInfo)); m_moduleMap.insert(MAKE_PAIR(ModuleMap,2,cmdInfo)); CLIENT_INFO info; GetClientInfo(m_clientid,&info); FnModuleNotifyProc func = \ ClientControlPanelManager::GetInstanceRef().HandleModuleMsg; ModuleMap::iterator it = m_moduleMap.begin(); for (; it != m_moduleMap.end() ; it++) { MODULE_INFO& modinfo = it->second; if (it->second.isInside) modinfo.inside_init(m_clientid,info,func,modinfo.lpParameter); } FileDlg->Create(IDD_DIALOG_FILE); TransDlg->Create(IDD_DIALOG_TRANSFER); CmdDlg->Create(IDD_DIALOG_CMD); CWnd* pWnd = CWnd::FromHandle(m_TabCtrl.GetSafeHwnd()); FileDlg->SetParent(pWnd); TransDlg->SetParent(pWnd); CmdDlg->SetParent(pWnd); it = m_moduleMap.begin(); for (; it != m_moduleMap.end() ; it++) { MODULE_INFO& modinfo = it->second; modinfo.hWnd = ((CDialogEx*)modinfo.lpParameter)->GetSafeHwnd(); } TransDlg->MoveWindow(&rs); FileDlg->MoveWindow(&rs); CmdDlg->MoveWindow(&rs); }
void CCmdDlg::HandleModuleMsg( LPCTSTR clientid,UINT nMsg, LPVOID lpContext, LPVOID lpParameter ) { CCmdDlg* lpDlg = (CCmdDlg*)lpParameter; return lpDlg->HandleModuleMsgProc(nMsg,lpContext,lpParameter); }