Пример #1
0
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());
}