我有一个测试程序,我用它来玩菜单栏。它看起来像这样:
(这里应该有一个图像。如果没有,它只是一个带菜单栏的小窗口。)
我的代码很简单,我需要设计明智。我唯一需要帮助的是在点击它们时执行操作。
这就是我所拥有的:
switch (message)
{
case WM_CREATE:
{
HMENU hMunubar = CreateMenu();
HMENU hFile = CreateMenu();
HMENU hEdit = CreateMenu();
HMENU hHelp = CreateMenu();
/* Create the "File" tab */
AppendMenu(hMunubar, MF_POPUP, (UINT_PTR) hFile, "File");
AppendMenu(hFile, MF_STRING, (UINT_PTR) 1, TEXT("Exit Alt+f4"));
/* Create the "Edit" tab */
AppendMenu(hMunubar, MF_POPUP, (UINT_PTR) hEdit, "Edit");
AppendMenu(hEdit, MF_STRING, (UINT_PTR) 2, TEXT("Copy Ctrl+C"));
AppendMenu(hEdit, MF_STRING, (UINT_PTR) 3, TEXT("Cut Ctrl+X"));
AppendMenu(hEdit, MF_STRING, (UINT_PTR) 4, TEXT("Paste Ctrl+V"));
/* Create the "Help" tab */
AppendMenu(hMunubar, MF_POPUP, (UINT_PTR) hHelp, "Help");
AppendMenu(hHelp, MF_STRING, (UINT_PTR) 5, TEXT("Visit Forum"));
SetMenu(hwnd, hMunubar);
break;
}
case WM_DESTROY:
PostQuitMessage (0);
break;
default:
return DefWindowProc (hwnd, message, wParam, lParam);
}
我学会了如何从this youtube video.创建菜单。这个人深入地解释了如何创建菜单,但没有解释如何使用它做任何事情。现在,当我点击File-> Exit。
时,我想要它做的就是退出我尝试在switch (message)
函数中使用它:
case WM_COMMAND:
{
if(LOWORD(wParam) == 1){
return 0;
}
break;
}
但那没用。我该怎么做呢?
答案 0 :(得分:0)
第一个 if 表达式检查传入的WM_COMMAND消息是否引用菜单命令。第二个 if 表达式检查菜单标识符,因此您可以对不同的菜单选项应用不同的操作。
case WM_COMMAND:
{
if (!HIWORD(wParam))
{
if (LOWORD(wParam) == 1) // Checks for the menu identifier of the Exit option
{
DestroyWindow(hwnd);
}
}
return 0;
}
我建议您创建宏定义,或者实际上因为您将问题标记为C ++,常量变量提供表示具有有意义名称的菜单标识符的数字常量。