新控制按钮没有正确的 Windows ID
New control button doesn't have the correct Windows ID
我有一个 Window C++ 表单应用程序。
我添加了一个新按钮并将其链接到一个名为 ChangeTitle
.
的函数
但是当我 运行 应用程序按下按钮时,它不会调用函数。
我检查了一下,发现当我单击按钮并检查按钮的 Window 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);
我有一个 Window C++ 表单应用程序。
我添加了一个新按钮并将其链接到一个名为 ChangeTitle
.
但是当我 运行 应用程序按下按钮时,它不会调用函数。
我检查了一下,发现当我单击按钮并检查按钮的 Window 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);