WM_MENUSELECT The WM_MENUSELECT message is sent to a menu's owner window when the user selects a menu item. WM_MENUSELECT uItem = (UINT) LOWORD(wParam); // menu item or submenu index fuFlags = (UINT) HIWORD(wParam); // menu flags hmenu = (HMENU) lParam; // handle to menu clicked
Parameters uItem Value of the low-order word of wParam. If the selected item is a command item, this parameter contains the identifier of the menu item. If the selected item opens a drop-down menu or submenu, this parameter contains the menu index of the drop-down menu or submenu in the main menu, and the hMenu parameter then contains the handle to the main (clicked) menu; use the GetSubMenu function to get the menu handle to the drop-down menu or submenu. fuFlags Value of the high-order word of wParam. Specifies one or more menu flags. This parameter can be a combination of the following values: Value Description MF_BITMAP Item displays a bitmap. MF_CHECKED Item is checked. MF_DISABLED Item is disabled. MF_GRAYED Item is grayed. MF_HILITE Item is highlighted. MF_MOUSESELECT Item is selected with the mouse. MF_OWNERDRAW Item is an owner-drawn item. MF_POPUP Item opens a drop-down menu or submenu. MF_SYSMENU Item is contained in the window menu (also known as the System menu or Control menu). The hmenu parameter identifies the window menu associated with the message. hmenu Value of lParam. Handle to the menu that was clicked. Return Values If an application processes this message, it should return zero. Res If the fuFlags parameter contains 0xFFFF and the hmenu parameter contains NULL, the system has closed the menu. Do not use the value –1 for fuFlags. That is because fuFlags is specified as (UINT) HIWORD(wParam). If HIWORD(wParam) were 0xFFFF, fuFlags (because of the UINT cast) would be 0x0000FFFF, not –1. QuickInfo Windows NT: Requires version 3.1 or later. Windows: Requires Windows 95 or later. Windows CE: Unsupported. Header: Declared in winuser.h.See Also Keyboard Accelerators Overview, Keyboard Accelerator Messages, GetSubMenu
The WM_MENUSELECT message is sent to a menu's owner window when the user selects a menu item. WM_MENUSELECT
uItem = (UINT) LOWORD(wParam); // menu item or submenu index
fuFlags = (UINT) HIWORD(wParam); // menu flags
hmenu = (HMENU) lParam; // handle to menu clicked
Parameters
uItem
Value of the low-order word of wParam. If the selected item is a command item, this parameter contains the identifier of the menu item. If the selected item opens a drop-down menu or submenu, this parameter contains the menu index of the drop-down menu or submenu in the main menu, and the hMenu parameter then contains the handle to the main (clicked) menu; use the GetSubMenu function to get the menu handle to the drop-down menu or submenu.
fuFlags
Value of the high-order word of wParam. Specifies one or more menu flags. This parameter can be a combination of the following values: Value Description
MF_BITMAP Item displays a bitmap.
MF_CHECKED Item is checked.
MF_DISABLED Item is disabled.
MF_GRAYED Item is grayed.
MF_HILITE Item is highlighted.
MF_MOUSESELECT Item is selected with the mouse.
MF_OWNERDRAW Item is an owner-drawn item.
MF_POPUP Item opens a drop-down menu or submenu.
MF_SYSMENU Item is contained in the window menu (also known as the System menu or Control menu). The hmenu parameter identifies the window menu associated with the message.
hmenu
Value of lParam. Handle to the menu that was clicked.
Return Values
If an application processes this message, it should return zero. Res
If the fuFlags parameter contains 0xFFFF and the hmenu parameter contains NULL, the system has closed the menu. Do not use the value –1 for fuFlags. That is because fuFlags is specified as (UINT) HIWORD(wParam). If HIWORD(wParam) were 0xFFFF, fuFlags (because of the UINT cast) would be 0x0000FFFF, not –1. QuickInfo
Windows NT: Requires version 3.1 or later.
Windows: Requires Windows 95 or later.
Windows CE: Unsupported.
Header: Declared in winuser.h.See Also
Keyboard Accelerators Overview, Keyboard Accelerator Messages, GetSubMenu
{
CDialog::OnEnterIdle(nWhy, pWho);
// TODO: Add your message handler code here
if (nWhy==MSGF_MENU)
{
CPoint pt;
GetCursorPos(&pt); if (pWho->m_hWnd != ::WindowFromPoint(pt))
{
隐藏菜单
}
}
}
{
CWnd::OnEnterIdle(nWhy, pWho);
// TODO: Add your message handler code here
if (nWhy == MSGF_MENU)
{
}
tufaqing()大哥,GetMenuItemRect这个函数我也用过了,但有两个问题不好解决,一是大家如果仔细观察的话应该能看到,标准菜单是有点边框的,这个边框的宽度我找不到标准的说法,比如:GetSystemMetrics(SM_CXBORDER)是窗口边框的宽度,可菜单呢?我没有查到标准的依据。二是如果出现子菜单,子菜单是要盖住上级菜单一部分的,而这到底怎么计算也是个问题。所以,这确实不是个很容易的问题,麻烦各位大哥再帮忙想想,多谢!
两位大哥,你们试验过你们的代码吗?好像不行啊。