Sma*_*y57 6 c++ windows winapi menu submenu
我想制作一个像这个Mozilla Firefox子菜单的子菜单:

现在就是这样(在我的程序中):

但我希望它看起来像Firefox,当你将鼠标放在它上面时,它有一个额外的菜单.
#define ID_SM 1
LRESULT CALLBACK WindowProcedure (HWND hwnd,
UINT message,
WPARAM wParam,
LPARAM lParam)
{
switch (message)
{
case WM_CREATE:
HMENU hMenubar = CreateMenu();
HMENU hMenu = CreateMenu();
AppendMenu(hMenubar, MF_POPUP, (UINT_PTR)hMenu, "Menu");
AppendMenu(hMenu, MF_STRING, ID_SM, "Sub Menu");
/* Would I put it here? How? */
SetMenu(hwnd, hMenubar);
break;
case WM_COMMAND:
if (LOWORD(wParam) == ID_SM) {
/* Not sure if this should be here,
cause I want it to pop up when you mouse over */
}
break;
}
}
Run Code Online (Sandbox Code Playgroud)
Cod*_*ray 11
您只需创建另一个菜单并将其作为子菜单附加.您可以通过调用相同的AppendMenu函数来执行此操作,您只需将uFlags参数设置为MF_POPUP并将句柄作为uIDNewItem参数传递给子菜单.
例如,类似于:
case WM_CREATE:
HMENU hMenubar = CreateMenu();
HMENU hMenu = CreateMenu();
HMENU hSubMenu = CreatePopupMenu();
AppendMenu(hMenubar, MF_POPUP, (UINT_PTR)hMenu, "Menu");
AppendMenu(hMenu, MF_STRING, ID_SM, "Sub Menu");
AppendMenu(hMenu, MF_STRING | MF_POPUP, (UINT_PTR)hSubMenu, "Sub-Sub Menu");
SetMenu(hwnd, hMenubar);
break;
Run Code Online (Sandbox Code Playgroud)
您不需要做任何特殊的响应WM_COMMAND消息.将鼠标悬停在父菜单项上时,Windows将自动显示弹出菜单.但是,您当然需要处理子菜单上显示的项目的命令.
小智 5
首先,创建一个新菜单并向其中添加项目。例如:
HMENU hSubmenu = CreatePopupMenu();
// Insert or append items to hSubmenu here
Run Code Online (Sandbox Code Playgroud)
然后将创建的菜单附加到 hMenu 中:
AppendMenu(hMenu, MF_POPUP | MF_STRING, (UINT_PTR)hSubmenu, "My Submenu");
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11659 次 |
| 最近记录: |