void CMailView::UpdateCaptionText () { CBCGPOrganizerDoc* pDoc = GetDocument (); if (pDoc == NULL || pDoc->GetMode () != CBCGPOrganizerDoc::e_ModeMail) { return; } CMainFrame* pFrame = DYNAMIC_DOWNCAST(CMainFrame, AfxGetMainWnd ()); if (pFrame != NULL) { CString str; CBCGPGridCtrl* pGridCtrl = GetGridCtrl (); if (pGridCtrl != NULL) { CBCGPGridRow* pRow = pGridCtrl->GetCurSel (); if (pRow != NULL && !pRow->IsGroup ()) { str = _T("From: ") + pRow->GetItem (3)->FormatItem (); str += _T("; Subject: ") + pRow->GetItem (4)->FormatItem (); } } if (str.IsEmpty ()) { str = _T(" "); } pFrame->SetCaptionText (str); } }
/** * @brief "Associate VP",为震源分配炮点 * @note 打开一个可指定要(通过输入其 Shot Number)分配给该震源的 VP 的对话框。这与用鼠标右键点击放炮表内 部所调出的“Start Seismonitor with Vib Source”命令效果基本相同。 * @param void * @return void */ void CActiveSourceWnd::OnActivesourceAssociatevp() { CBCGPGridCtrl* pGridCtrl = GetGridCtrl(); if(NULL==pGridCtrl) return; // 如果没有选择震源或者网格中某一行,则不处理 CBCGPGridRow* pRow= pGridCtrl->GetCurSel(); if(NULL==pRow) return; CMainFrame* pFrm = (CMainFrame*)AfxGetMainWnd(); pFrm->OnAssociatevp(pRow->GetData()); }
/** * @brief "Associate SPL & SPN",为震源分配炮点 * @note 与 Associate VP 命令效果基本相同,但您不必输入要分配给该震源的 VP Shot Number,而是必须输 入其 SPL (震源点测线) 和 SPN (震源点号)。 * @param void * @return void */ void CActiveSourceWnd::OnActivesourceAssociatesplspn() { CBCGPGridCtrl* pGridCtrl = GetGridCtrl(); if(NULL==pGridCtrl) return; // 如果没有选择震源或者网格中某一行,则不处理 CBCGPGridRow* pRow= pGridCtrl->GetCurSel(); if(NULL==pRow) return; CMainFrame* pFrm = (CMainFrame*)AfxGetMainWnd(); // 调用主框架处理函数,通过SPL和SPN找到响应的炮点 pFrm->OnAssociateSPLSPN(pRow->GetData()); }
/** * @brief 响应鼠标在震源网格中右键消息,显示右键菜单 * @note 如果选中某一个震源,则响应消息,显示右键菜单。菜单内容包括停止某一震源、为震源分配炮点编号、 为某震源通过震源点测线号及道号来确定炮点、清除Ready状态等 * @param CWnd* pWnd,窗口指针 * @param CPoint point,鼠标坐标 * @return void */ void CActiveSourceWnd::OnContextMenu(CWnd* pWnd, CPoint point) { // TODO: 在此处添加消息处理程序代码 CBCGPGridCtrl* pGridCtrl = GetGridCtrl(); if(NULL==pGridCtrl) return; // 如果没有选择震源或者网格中某一行,则不弹出菜单 CBCGPGridRow* pRow= pGridCtrl->GetCurSel(); if(NULL==pRow) return; CMenu menu; // 加载右击菜单 VERIFY(menu.LoadMenu (IDR_POPUP_ACTIVESOURCE)); CMenu* pPopup = menu.GetSubMenu(0); ASSERT(pPopup != NULL); // CMainFrame* pFrm = (CMainFrame*)AfxGetMainWnd(); CString strTemp; // 每一行的数据等于震源的编号 strTemp.Format(_T("Source %d"),pRow->GetData()); // pPopup->ModifyMenu(MF_BYCOMMAND,MF_STRING,ID_ACTIVESOURCE_SOURCE,strTemp); // pPopup->ModifyMenu(MF_BYPOSITION,MF_STRING,0,_T("AAAAA")); // 更改第一个菜单的标题,显示为“Source”+震源编号 MENUITEMINFO info; info.cbSize = sizeof (MENUITEMINFO); // must fill up this field info.fMask = MIIM_STRING; // get the state of the menu item info.dwTypeData = strTemp.GetBuffer(); info.cch = strTemp.GetLength(); VERIFY(pPopup->SetMenuItemInfo(ID_ACTIVESOURCE_SOURCE, &info,FALSE)); strTemp.ReleaseBuffer(); /* int nSourceState = pRow->GetItem(0)->GetImage(); if(nSourceState==SHOTSOURCE_FOCUS) { info.cbSize = sizeof (MENUITEMINFO); // must fill up this field info.fMask = MIIM_STATE; info.fState = MFS_DISABLED; // 如果正处于采集过程中,禁止更改放炮点 pPopup->SetMenuItemInfo(ID_ACTIVESOURCE_DISASSOCIATEVP, &info,FALSE); pPopup->SetMenuItemInfo(ID_ACTIVESOURCE_ASSOCIATEVP, &info,FALSE); pPopup->SetMenuItemInfo(ID_ACTIVESOURCE_ASSOCIATESPLSPN, &info,FALSE); // pPopup->EnableMenuItem(ID_ACTIVESOURCE_DISASSOCIATEVP,MF_BYCOMMAND|MF_DISABLED); // pPopup->EnableMenuItem(ID_ACTIVESOURCE_ASSOCIATEVP,MF_BYCOMMAND|MF_DISABLED); // pPopup->EnableMenuItem(ID_ACTIVESOURCE_ASSOCIATESPLSPN,MF_BYCOMMAND|MF_DISABLED); }*/ CBCGPPopupMenu* pPopupMenu = new CBCGPPopupMenu; pPopupMenu->Create(this, point.x, point.y,pPopup->Detach(),FALSE,TRUE); }
/** * @brief "Disassociate VP",暂停震源使用 * @note 不再希望继续使用某一震源,或想要将其置入待命状态,或想要手工分配给它另一 个 VP,则在Active Source窗口右键菜单中选择Disassociate VP,暂停该震源的施工。 在滑动扫描等模式下以前分配给该未用震源的剩余 VP 将被忽略。 * @param void * @return void */ void CActiveSourceWnd::OnActivesourceDisassociatevp() { CBCGPGridCtrl* pGridCtrl = GetGridCtrl(); if(NULL==pGridCtrl) return; // 如果没有选择震源或者网格中某一行,则不处理 CBCGPGridRow* pRow= pGridCtrl->GetCurSel(); if(NULL==pRow) return; CMainFrame* pFrm = (CMainFrame*)AfxGetMainWnd(); // 调用主框架处理函数,通知服务器停止放炮,删除放炮管理对象 CShotSource* pSource = pFrm->OnDisassociatevp(pRow->GetData()); // 重新加载震源,并删除对应的炮点属性 if(pSource) LoadShotSource(pSource,pRow->GetRowId()); }