首页 > 解决方案 > 新的控制按钮没有正确的 Windows ID

问题描述

我有一个 C++ 窗口窗体应用程序。
我添加了一个新按钮并将其链接到一个名为ChangeTitle.

但是当我运行应用程序并按下按钮时,它不会调用该函数。
我检查并注意到,当我单击按钮并检查按钮的窗口 ID ( wmId) 时,我将其设置为110( IDM_CHANGE_TITLE),它的值为1.

我不确定是什么问题,也许它与资源文件有关?

复制:

打开 Visual Studio 并创建新项目Visual C++-> Windows Desktop Application
将其设置为 name WindowsProject1

WindowsProject1.cpp的代码

LRESULT CALLBACK    WndProc(HWND, UINT, WPARAM, LPARAM);
INT_PTR CALLBACK    About(HWND, UINT, WPARAM, LPARAM);
INT_PTR CALLBACK ChangeTitle(HWND hWnd);

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message)
    {
    case WM_COMMAND:
        {
            int wmId = LOWORD(wParam);
            // Parse the menu selections:
            switch (wmId)
            {
            case IDM_ABOUT:
                DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
                break;
            case IDM_EXIT:
                DestroyWindow(hWnd);
                break;
            case IDM_CHANGE_TITLE:
                ChangeTitle(hWnd);
            default:
                return DefWindowProc(hWnd, message, wParam, lParam);
            }
        }
        break;
    case WM_CREATE:
        CreateWindowW(L"button", L"Change Title",
            WS_VISIBLE | WS_CHILD,
            20, 50, 95, 25, hWnd, (HMENU)1, (HINSTANCE)ChangeTitle(hWnd), NULL);
        break;
    default:
        return DefWindowProc(hWnd, message, wParam, lParam);
    }
    return 0;
}

// Message handler for about box.
INT_PTR CALLBACK ChangeTitle(HWND hWnd)
{
   SetWindowText(hWnd, L"BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB");
   return TRUE;
}  

Resource.h的部分代码

//{{NO_DEPENDENCIES}}
// Microsoft Visual C++ generated include file.
// Used by WindowsProject1.rc

#define IDM_ABOUT               104
#define IDM_CHANGE_TITLE                110

WindowsProject1.rc部分代码

IDC_WINDOWSPROJECT1 MENU
BEGIN
    BEGIN
        MENUITEM "&About ...",           IDM_ABOUT
    END
END

IDC_WINDOWSPROJECT1 ACCELERATORS
BEGIN
    "?",            IDM_ABOUT,              ASCII,  ALT
    "/",            IDM_ABOUT,              ASCII,  ALT
END

标签: c++winapibuttoncontrols

解决方案


我解决了。问题是我创建了hMenu设置为的按钮控件1
我把它改成#define IDM_CHANGE_TITLE 110现在它可以工作了。
这是固定代码:

CreateWindowW(L"button", L"Change Title",
    WS_VISIBLE | WS_CHILD,
    20, 50, 95, 25, hWnd, (HMENU)IDM_CHANGE_TITLE, NULL, NULL);

推荐阅读