C++ Win32 API C++;菜单栏

C++ Win32 API C++;菜单栏,c++,winapi,C++,Winapi,我正在学习一些基本的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, N

我正在学习一些基本的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++桌面默认项目中有一个文件和帮助菜单条,里面有退出和关闭。但他们所做的只是在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_和IDM_退出意味着什么?它们在菜单中有它们,但是仅仅将它们放在switch语句中是否会将它们添加到菜单栏中?什么是wmId和wmEvent?为什么打开wmId?到底是什么将这些项目添加到菜单栏

如果您需要查看更多的程序代码,它只是VS2013

中的一个非空C++ C++ Win32项目
谢谢你提供的任何答案,如果有人能指点我,我希望能找到一个好的潮流,尽可能的Win32 API C++教程。它可以如您所示以编程方式完成,也可以使用资源编辑器完成。在解决方案资源管理器中,双击扩展名为*.rc的文件。您应该会看到一个名为“资源视图”的窗口。打开资源节点,直到看到“菜单”。您可以添加/修改/删除菜单项。您还可以创建对话框

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

IDM_ABOUT
是在资源文件
中定义的一个数字,定义IDM_ABOUT 101
(也可以是另一个数字)。单击菜单项时,将发送带有该号码的消息。你可以捕捉信息并作出回应

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

另外,当您使用资源编辑器创建新菜单项时,VisualStudio会自动创建一个ID并将其分配给该菜单项。你需要知道那些身份证是什么。您可以通过按F4键找到答案,该键将打开“属性窗口”

例如,如果您键入一个新菜单项“&File new”,该菜单的ID将类似于
ID\u File\u NEWFILE
,应该在“属性窗口”中可见

此菜单项将类似于
IDM\U ABOUT
。它被发送到与该窗口关联的Windows过程函数

对于菜单项消息:

  • 消息
    始终设置为
    WM\u命令
  • wParam
    是菜单ID
  • lParam
    未使用

<代码>如果有人能指出我的Win32 API C++教程 Charles Petzold的任何一本书的好的方向,谢谢。我将检查菜单,因为HiWord(WPARAM)设置为0,这并不重要,但是值得记住的是,控制/菜单ID是在LoWordD(WPARAM)中编码的。