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的例子就。谢谢!
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的例子就。谢谢!
if( cmd == ID_XXX )
{
// call ID_XXX's hanlder
}
cmdID = TrackPopupMenuEx(::GetSubMenu(hMenu,0), POPUP_MENU_UFLAG,0,0,m_hWnd,NULL);
返回的就是你选择的菜单ID - cmdID
在这行代码后面判断即可.
这样如果timer到期,则表明是长按了
int cmd = TrackPopupMenuEx(::GetSubMenu(hMenu,0), POPUP_MENU_UFLAG,0,0,m_hWnd,NULL);
if( cmd == ID_XXX )
{
// call ID_XXX's hanlder
}
呵呵,上面说错了,是这段不行。这样好像不行。比如在一个cedit控件中间。我全选,然后长按触笔。这时候它全选就取消了。再加一个别什么处理呢?