c++ - 新的控制按钮没有正确的 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
解决方案
我解决了。问题是我创建了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);
推荐阅读
- typescript - 是否可以在没有类型断言或中间的 TypeScript 中定义具有属性的函数?
- php - laravel,如何使用控制器存储动作级联保存对象
- command-line - 如何格式化字节字符串以使用 cbt set(云大表命令行工具)设置值?
- continuous-integration - 分别使用 BitBake 构建依赖包
- rxjs - 热的未完成的数据库可观察对象是 Rx 用例吗?副作用写作问题
- ios - Firebase iOS 卡在“运行您的应用程序以验证安装”
- android - 从带有 KSoap2 的 Android 到 .net WebServer 的 SOAP 调用
- javascript - 如何只允许输入 textarea 数字、许可证、单词白名单中的内容
- c# - MVCGrid.NET - 如何重新加载网格?
- javascript - 为什么 webpack 代理不起作用(Access-Control-Allow-Origin 错误)?