鼠标右键弹出菜单响应消息?

chenjuheng 2007-04-13 09:12:01
怎样让鼠标右键弹出菜单响应CN_UPDATE_COMMAND_UI?
...全文
506 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
allclear 2007-04-14
  • 打赏
  • 举报
回复
VC专门为快捷菜单提供了消息WM_CONTEXTMENU,在工程的View类添加此消息的响应函数,然后插入一个菜单资源IDR_CONTEXT_MENU:
void CMyView::OnContextMenu(CWnd* pWnd, CPoint point)
{
CMenu menu;
//载入快捷菜单资源
VERIFY(menu.LoadMenu(IDR_RIGHTBUTTON_MENU));
CMenu* pPopup=menu.GetSubMenu(0);
ASSERT(pPopup);
//弹出快捷菜单
pPopup->TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON,point.x,point.y,this);


}
宝_爸 2007-04-13
  • 打赏
  • 举报
回复
再看看这个:)
http://support.microsoft.com/default.aspx?scid=kb;en-us;242577
宝_爸 2007-04-13
  • 打赏
  • 举报
回复
HOWTO: How to Use TrackPopupMenu() and Update UI Handlers

PSS ID Number: 139469

Article Last Modified on 12/9/2003


--------------------------------------------------------------------------------
The information in this article applies to:


The Microsoft Foundation Classes (MFC), when used with:
Microsoft Visual C++ for Windows, 16-bit edition 1.5
Microsoft Visual C++ for Windows, 16-bit edition 1.51
Microsoft Visual C++ for Windows, 16-bit edition 1.52
Microsoft Visual C++, 32-bit Editions 2.0
Microsoft Visual C++, 32-bit Editions 2.1
Microsoft Visual C++, 32-bit Editions 2.2
Microsoft Visual C++, 32-bit Editions 4.0
Microsoft Visual C++, 32-bit Editions 4.1

--------------------------------------------------------------------------------

This article was previously published under Q139469
SUMMARY
Floating popup menus are generally displayed in response to right-mouse click messages. The CMenu::TrackPopupMenu() function is used to display these menus. For the MFC Update UI mechanism to work correctly with these menus, the owner of these menus should be a class derived from CFrameWnd.
MORE INFORMATION
Menu items in an MFC application are updated in response to the WM_INITMENUPOPUP message. The MFC CFrameWnd::OnInitMenuPopup() function has special code for handling the Update UI mechanism.

The code in CFrameWnd::OnInitMenuPopup iterates through the menu items and checks for the Update UI and Command handlers in the command route, for each item. Depending on the result of this search, it updates the state of the menu item.

The WM_INITMENUPOPUP message is sent only to the owner of the menu. Hence for the menus to be updated correctly, you need to make a CFrameWnd-derived class the owner of the floating popup menu.

The Update UI mechanism doesn't work for a dialog-based application because the code that calls the UI handlers is not found in a CDialog-derived class.

The following sample code displays the File popup menu in the CView-derived class (CMyView) in response to the WM_RBUTTONUP message. Note that the main frame window pointer is used in the call to the CMenu::TrackPopupMenu() function, so the Update UI mechanism will work correctly.
Sample Code
void CMyView::OnRButtonUp(UINT nFlags, CPoint point)
{
// Calling the base class function.
CView::OnRButtonUp(nFlags, point);

// Get the top level menu from the main application window.
CWnd* pMainWindow = AfxGetMainWnd();
CMenu* pTopLevelMenu = pMainWindow->GetMenu();

// Get the File popup menu from the top level menu.
CMenu *pFileMenu = pTopLevelMenu->GetSubMenu(0);

// Convert the mouse location to screen coordinates before passing
// it to the TrackPopupMenu() function.
ClientToScreen(&point);

// Display the File popup menu as a floating popup menu in the
// client area of the main application window.
pFileMenu->TrackPopupMenu(TPM_LEFTALIGN | TPM_LEFTBUTTON,
point.x,
point.y,
pMainWindow); // owner is the main application window
}

REFERENCES
For information about command and message routing, please refer to MFC Technical Note 21 in Books Online


Additional query words: kbinf 2.00 2.10 2.20 2.51 2.52 3.00 3.10 3.20 4.00 4.10

Keywords: kbcode kbhowto kbMenu KbUIDesign KB139469
Technology: kbAudDeveloper kbMFC kbvc150 kbVC151 kbVC152 kbVC16bitSearch kbVC200 kbVC210 kbVC220 kbVC32bitSearch kbVC400 kbVC410 kbVCsearch

15,978

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧