现在的位置: 首页 > 自动控制 > 工业·编程 > 正文

OnContextMenu 响应鼠标右键菜单消息

2012-08-16 12:11 工业·编程 ⁄ 共 753字 ⁄ 字号 暂无评论

WM_CONTEXTMENU消息 用来响应鼠标右键消息, 它响应的不是鼠标右键按下消息,也不是鼠标右键弹起消息

而是鼠标右键 依次按下弹起后触发的消息。

         因此,若程序还响应了鼠标右键按下的消息OnRButtonDown,且在此响应函数中有模特对话框出现的话,则不会响应WM_CONTEXTMENU消息。

         比如,有AfxMessageBox(L"Right Down"); 模特对话框出现在右键按下响应函数中, 则关闭此模特对话框后,不在响应右键菜单消息。

         原因在于:

         右键菜单 是在右键依次按下弹起时才被触发的。

        右键按下, 模特对话框产生时,消息只被发送到了模特对话框,因此,鼠标弹起消息未被发送到主窗口,因此,不会响应右键菜单消息。

        但是,如果在右键弹起响应函数OnRButtonUp中响应模特对话框消息的话, 右键菜单消息 不会被影响。

        原因是: 此时鼠标按下、弹起消息均已被发送到了主窗口,因此程序在关闭模特对话框后,仍会响应右键菜单消息。

OnContextMenu(CWnd* pWnd, CPoint point)
{
    CPoint pt=point;
    CMenu menu;
    CMenu* PopupMenu=NULL;

    ScreenToClient(&pt);

    //加载菜单
    menu.LoadMenu(IDR_IMAGEVIEW);

    //子菜单项
    //右键点击 弹出此子菜单项
    PopupMenu=menu.GetSubMenu(3);
    PopupMenu->TrackPopupMenu(TPM_RIGHTBUTTON | TPM_LEFTALIGN,point.x,point.y,this);
}

给我留言

留言无头像?