Win32 API C++ Menu bar
Win32 API C++ Menu bar
我正在尝试学习一些基本的Win32 API。我看到要在菜单栏教程中添加项目,以使用以下内容:
hMenubar = CreateMenu();
hMenu = CreateMenu();
AppendMenuW(hMenu, MF_STRING, IDM_FILE_NEW, L"&New");
AppendMenuW(hMenu, MF_STRING, IDM_FILE_OPEN, L"&Open");
AppendMenuW(hMenu, MF_SEPARATOR, 0, NULL);
AppendMenuW(hMenu, MF_STRING, IDM_FILE_QUIT, L"&Quit");
AppendMenuW(hMenubar, MF_POPUP, (UINT_PTR)hMenu, L"&File");
但是,在VS2013中的C 桌面的默认项目中,有一个文件并帮助Menubar,并且内部已出口。但是他们所做的就是在WNDProc中使用这样的开关:
switch (message)
{
case WM_COMMAND:
wmId = LOWORD(wParam);
wmEvent = HIWORD(wParam);
// Parse the menu selections:
switch (wmId)
{
case IDM_ABOUT:
DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
break;
case IDM_EXIT:
DestroyWindow(hWnd);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
break;
我有几个问题。他们如何添加文件和帮助菜单栏,以及在不使用createMenu()等的情况下,在梅纳布尔中的大约和退出项目?IDM_ABOUT和IDM_EXIT是什么意思?他们在菜单中有那些,但是只是将它们放入Switch语句中吗?什么是WMID和WMEVENT,为什么开关在WMID上?实际上将这些项目添加到菜单栏是什么?
如果您需要查看我程序的更多代码,则只是VS2013中的非空白C Win32项目
感谢您提供的任何答案,如果有人可以将我指向良好电流的方向,请访问它。
有两种制作菜单的方法。可以按照您显示的方式以编程方式完成,也可以使用资源编辑器进行。在解决方案资源管理器中,用 *.rc扩展程序双击文件。您应该看到一个称为"资源视图"的窗口。打开资源节点,直到看到"菜单"。您可以添加/修改/删除菜单项。您也可以制作对话框。
每个菜单项或对话框按钮都有一个标识号,此号码通过WPARAM wParam
传递。在上面的示例中,不使用wmEvent
,现在不用担心。
IDM_ABOUT
是资源文件#define IDM_ABOUT 101
中定义的数字(或可能是不同的数字)。单击菜单项时,则将发送一条消息。您可以抓住消息并响应它。
这是基本的Winapi,在过去的10或20年中,它的变化并没有太大变化,您在Google上找到的任何教程都是最新的。
另外,当您使用资源编辑器制作新菜单项时,Visual Studio会自动创建ID并将其分配给该菜单项。您需要知道这些ID是什么。您可以通过点击F4键来找出答案,从而带来"属性窗口"。
例如,如果您输入新菜单项"& file new",则该菜单的ID将是ID_FILE_NEWFILE
之类的,应该在" properties窗口"中可见。
此菜单项将就像IDM_ABOUT
一样。它已发送到与该窗口关联的Windows过程函数。
菜单项消息:
-
message
始终设置为WM_COMMAND
-
wParam
是菜单ID -
lParam
不使用
- ld: foo.o:foo.h:6 'bar' 的多重定义 foo.h:6: 首先在这里定义
- C++ "var foo = !!::bar()"语法?
- 诸如class bar *bar之类的指针的名称是什么?
- 无法将样式添加到QT Tab小部件中的选项卡(bar)和Tab(窗格)
- What does int foo = bar << ' '; mean in c++?
- 桌带(Explorer Bar)视觉样式
- Win32 API C++ Menu bar
- C++ vertical bar?
- 在"bar::foo"的定义中使用"foo"
- 为什么 foo(short int *) 和 bar(signed short *) 认为 QT 的签名不同
- 为什么我需要双括号在构造函数调用中,如:foo x((bar());
- g++ 拒绝,clang++ 接受: foo(x)( "bar" )( "baz" );
- 错误:类型为"bar&"的参数的默认参数<int>具有类型"bar<int>"
- 在 C++11 中使用 auto foo = "bar" vs std::string
- 为什么"Foo f(Bar());"可以是采用 Bar 类型并返回类型 Foo 的函数的声明?
- 对"vtable for Menu"的未定义引用
- 将 'bar 类型的向量复制到 BYTE 类型的向量
- Blackberry 10正在安装.bar文件
- What is an `int foo::*bar::*`?
- 未解析的外部符号"public: class Foo __thiscall Bar::bu(char const *)"