Win32 API C ++菜单栏

nk

我正在尝试学习一些基本的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 ++ Desktop的默认项目中,具有“文件”和“帮助”菜单栏,并且在内部具有“退出”和“关于”。但是他们所做的就是在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()等的情况下添加文件和帮助菜单栏以及菜单栏中的About和Exit项目?IDM_ABOUT和IDM_EXIT是什么意思?它们在菜单中有,但是只是将它们放在switch语句中会将它们添加到菜单栏中吗?什么是wmId和wmEvent?为什么要打开wmId?实际将那些项目添加到菜单栏的是什么?

如果您需要查看我的程序的更多代码,那只是VS2013中的一个非空白C ++ Win32项目

感谢您提供的任何答案,如果有人可以指出我的最新发展方向,那将不胜感激。Win32 API C ++教程。

巴马克·谢米拉尼(Barmak Shemirani)

有两种制作菜单的方法。您可以按照编程说明通过编程来完成,也可以使用资源编辑器来完成。在解决方案资源管理器中,双击带有* .rc扩展名的文件。您应该看到一个名为“资源视图”的窗口。打开资源节点,直到看到“菜单”。您可以添加/修改/删除菜单项。您也可以创建对话框。

每个菜单项或对话框按钮都有一个标识号,该标识号通过传递WPARAM wParam在上面的示例wmEvent中不使用,暂时不用担心。

IDM_ABOUT是在资源文件中定义的数字#define IDM_ABOUT 101(或者可能是其他数字)。单击菜单项后,将发送带有该号码的消息。您可以捕获消息并做出响应。

这是基本的WinApi,在过去10或20年中并没有太大变化,您在Google上找到的任何教程都是最新的。

另外,当您使用资源编辑器创建新菜单项时,Visual Studio会自动创建一个ID并将其分配给该菜单项。您需要知道这些ID是什么。您可以通过按F4键找到“ Properties Window”(属性窗口)来查找。

例如,如果您键入新的菜单项“&File New”,则该菜单的ID将类似于ID_FILE_NEWFILE“属性窗口”中应显示的名称。

此菜单项将类似于IDM_ABOUT它被发送到与该窗口关联的Windows Procedure函数。

对于菜单项消息:

  • message 始终设置为 WM_COMMAND
  • wParam 是菜单ID
  • lParam 未使用

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在C ++中使用Win32 Api在任务栏中设置NOTIFY ICON

来自分类Dev

C ++ Win32 Api资源文件

来自分类Dev

使用C ++ Win32 API启用视觉样式吗?

来自分类Dev

C Win32 API:设置复选框的状态

来自分类Dev

在C ++ Win32程序中,如何修改菜单标题?

来自分类Dev

C ++,Win32错误

来自分类Dev

检查菜单项是否在Delphi中使用API Win32启用

来自分类Dev

从弹出菜单中选择项目Win32 API Python

来自分类Dev

使用Win32 / C ++ API更改Windows 7墙纸(未实现操作异常)

来自分类Dev

使用Win32 Api在C程序中进行串行连接

来自分类Dev

如何使用WIN32 API for C ++更改文本的颜色和大小?

来自分类Dev

(C ++)使用g ++返回“对WinMain @ 16的未定义引用”的Win32 API示例代码

来自分类Dev

C ++ Win32 API GDI:矩形抗锯齿在透明背景下无法正常工作

来自分类Dev

C ++如何使用Win32 API通过线程从文本框中获取文本

来自分类Dev

C Win32 Api:完成编辑后,更新编辑框

来自分类Dev

Visual C++ Win32 api代码拦截某个击键

来自分类Dev

目标C-菜单栏图标单击事件

来自分类Dev

GetGuiResources WIn32 API使用

来自分类Dev

Win32 API SearchPath失败

来自分类Dev

如何禁用按钮-Win32 API

来自分类Dev

GetGuiResources WIn32 API使用

来自分类Dev

Java到Win32加密API

来自分类Dev

Win32 API 无法 CreateWindowW()

来自分类Dev

在哪里编码 Win32 菜单

来自分类Dev

Win32工具栏句柄

来自分类Dev

检查是否正在使用Win32 API或C / C ++写入文件。我本人没有写权限

来自分类Dev

在Win32上处理CTRL + C

来自分类Dev

C ++ NetBeans Win32 hwnd图标

来自分类Dev

C Win32:窗口自动关闭