void CDockablePane::OnLButtonUp(UINT nFlags, CPoint point)
{
...
if (m_nHit != HTNOWHERE)
{
...
if (nHot == nHit)
{//分别对应CDockablePane标题栏上的三个按钮
switch (nHit)
{
case AFX_HTCLOSE:
{
BOOL bCanClose = TRUE;
CFrameWnd* pWndMain = AFXGetTopLevelFrame(this);
if (pWndMain != NULL)
{
...
bCanClose = pMainFrame->OnCloseDockingPane(this);
...
}
if (bCanClose)
{
OnPressCloseButton();
}
break;
}
case HTMAXBUTTON:
...
return;
case HTMINBUTTON:
if (CDockingManager::IsDockSiteMenu())
{
...
//上下文菜单,是一个虚函数。
CPane::OnShowControlBarMenu(CPoint point)
{
CMenu menu;
menu.CreatePopupMenu();
//以下建立5个菜单项。
{
CString strItem;
ENSURE(strItem.LoadString(IDS_AFXBARRES_FLOATING));
menu.AppendMenu(MF_STRING, idFloating, strItem);
ENSURE(strItem.LoadString(IDS_AFXBARRES_DOCKING));
menu.AppendMenu(MF_STRING, idDocking, strItem);
ENSURE(strItem.LoadString(IDS_AFXBARRES_TABBED));
menu.AppendMenu(MF_STRING, idTabbed, strItem);
ENSURE(strItem.LoadString(IDS_AFXBARRES_AUTOHIDE));
menu.AppendMenu(MF_STRING, idAutoHide, strItem);
ENSURE(strItem.LoadString(IDS_AFXBARRES_HIDE));
menu.AppendMenu(MF_STRING, idHide, strItem);
}
...
是否允许菜单项
...
if (!OnBeforeShowPaneMenu(menu))
{
return FALSE;
}
...
int nMenuResult = afxContextMenuManager->TrackPopupMenu(menu, point.x, point.y, this);
if (!OnAfterShowPaneMenu(nMenuResult))
{
return TRUE;
}
...
switch(nMenuResult)
{
//根据五项菜单选择的结果分别进行处理。
}
}
...
}
return;
default:
OnPressButtons(nHit);
}
}
CWnd::OnLButtonUp(nFlags, point);
return;
}
CPane::OnLButtonUp(nFlags, point);
}
CDockablePane标题栏菜单源码分析
最新推荐文章于 2024-07-11 11:48:17 发布