1. 程序是wm6的,想实现长按鼠标,弹出菜单。没有长按鼠标的事件呢。mfc下能得到WM_CONTEXTMENU,wtl下没有呢。2. 我用双击实现弹出菜单,弹出后。总是不响应菜单消息呢。这是怎么回事。单文档,实现如下.h
BEGIN_MSG_MAP(CMainFrame)
MESSAGE_HANDLER(WM_CREATE, OnCreate)
COMMAND_ID_HANDLER(ID_APP_EXIT, OnFileExit)
COMMAND_ID_HANDLER(ID_FILE_NEW, OnFileNew)
COMMAND_ID_HANDLER(ID_APP_ABOUT, OnAppAbout) COMMAND_ID_HANDLER(IDD_COPY_TEST, OnAboutTest)//
COMMAND_ID_HANDLER(IDD_PASTE_TEST, OnAboutTest)//
COMMAND_ID_HANDLER(IDD_CUT_TEST, OnAboutTest)//
COMMAND_ID_HANDLER(IDD_CANCEL_TEST, OnAboutTest)//

CHAIN_MSG_MAP(CUpdateUI<CMainFrame>)
CHAIN_MSG_MAP(CFrameWindowImpl<CMainFrame>)
END_MSG_MAP() LRESULT OnAboutTest(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
{
MessageBox(_T("ddddddddddddddd"));
return 0;
}.cpp
LRESULT CMainFrame::dbclick(){
#define POPUP_MENU_UFLAG TPM_LEFTALIGN|TPM_NONOTIFY|TPM_RETURNCMD
HMENU hMenu = LoadMenu (hInst, MAKEINTRESOURCE(IDR_POPUP));
TrackPopupMenuEx(::GetSubMenu(hMenu,0), POPUP_MENU_UFLAG,0,0,m_hWnd,NULL);
DestroyMenu(hMenu);
}谁能给我个例子更好了,如果是wm5的例子就。谢谢!

解决方案 »

  1.   

    POPUP_MENU_UFLAG 中定义了 TPM_RETURNCMD ,那就需要这样:int cmd = TrackPopupMenuEx(::GetSubMenu(hMenu,0), POPUP_MENU_UFLAG,0,0,m_hWnd,NULL); 
    if( cmd == ID_XXX )
    {
       // call ID_XXX's hanlder
    }
      

  2.   

    注意到你已指定了TPM_RETURNCMD标志,
    cmdID = TrackPopupMenuEx(::GetSubMenu(hMenu,0), POPUP_MENU_UFLAG,0,0,m_hWnd,NULL); 
    返回的就是你选择的菜单ID - cmdID
    在这行代码后面判断即可.
      

  3.   

    1. 没有长按鼠标的消息...你可以在 WM_LBUTTONDOWN中settimer, 在WM_LBUTTONUP中killtimer
    这样如果timer到期,则表明是长按了
      

  4.   

    哈哈,实验了,灰常正确。
    int cmd = TrackPopupMenuEx(::GetSubMenu(hMenu,0), POPUP_MENU_UFLAG,0,0,m_hWnd,NULL); 
    if( cmd == ID_XXX ) 

      // call ID_XXX's hanlder 
    }
      

  5.   

    这样好像不行。比如在一个cedit控件中间。我全选,然后长按触笔。这时候它全选就取消了。再加一个别什么处理呢?
      

  6.   


    呵呵,上面说错了,是这段不行。这样好像不行。比如在一个cedit控件中间。我全选,然后长按触笔。这时候它全选就取消了。再加一个别什么处理呢?
      

  7.   

    那只能说明 长按就弹出菜单 不适合你这个程序... 采取另外的方法吧~1. edit全选时,短按它的全选就取消了. 这种操作可能是用户希望的操作.2. 长按是首先是从短按开始的~ 那么对一个短按,就没有办法判断用户到底是想执行1的操作呢还是想执行长按弹出菜单的操作