新控制按钮没有正确的窗口 ID



我有一个C++中的Window窗体应用程序
我添加了一个新按钮,并将其链接到一个名为ChangeTitle的函数。

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

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

再现:

打开Visual Studio并创建新项目Visual C++->Windows Desktop Application
将其设置为名称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

我解决了这个问题。问题是我创建了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);

最新更新