WinAPI-按下显示键
WinAPI - show key pressed
我正在尝试学习WinAPI编程,但现在我遇到了这个问题-我想按键并显示它
LRESULT CALLBACK WndProc(HWND hwnd, UINT Msg, WPARAM wParam, LPARAM lParam){
switch(Msg){
case WM_CREATE:
break;
case WM_CHAR:
char ascii_code = wParam;
unsigned int key_state = lParam;
SetWindowText(hwndStatic, TEXT("You pressed key "+ascii_code));
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
}
return DefWindowProc(hwnd, Msg, wParam, lParam);
}
但输出很奇怪。。。它显示随机消息(每个键不同)。我做错了什么?
我试着调试它(一步一步),ascii_code包含按下的键,但TEXT()没有显示它。
不能像这样将字符添加在一起:
"You pressed key "+ascii_code;
这将取"You pressed key "
的地址,例如1000
,并将ascii码值添加到其中,例如95。
该函数将尝试打印内存地址1095
处的字符串。它将打印所有内存,直到它碰到一个空字符(零)。这可以是任何东西。
您需要使用C
函数来构建字符串,或者,由于标记为C++
,请使用std::string
。
std::string message = "You pressed key ";
message += ascii_code;
SetWindowText(hwndStatic, TEXT(message.c_str()))
"You pressed key "+ascii_code
不能像那样连接字符串。"foo bar"
的真正类型是const char[8]
——一个原始的类似C的字符数组。当您对它应用+时,它会衰减为指向其第一个元素的指针,并且操作在指针上执行。这意味着您最终会根据指针最终指向的位置打印一些随机数据。
如果要将字符连接到字符串,则必须使用更智能的字符串表示,例如std::string
:
(std::string("you pressed key ") + ascii_code).c_str();
相关文章:
- 比较并显示使用最小值(a,b)和最大值(a、b)升序排列的4个数字
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- Winapi:屏幕截图未显示在窗口中
- 如何在"SUBSYSTEM:WINDOWS"下显示并输出到Windows(C++ WinApi)上的
- 如何停止在所有桌面上显示C / C++ WINAPI窗口?
- 使用 WinApi 获取与面板中相同的显示名称"Advanced display settings"
- 挂钩 winapi 函数显示我 dllimport 错误
- Winapi在屏幕上使用MouseClick活动显示图标
- 如何使用C Winapi 32在默认值中显示Combobox第二值
- 运行 winapi 程序时显示的控制台
- 获取文本框值并将其显示为消息框WinApi
- 使用 WinAPI 附加禁用的显示设备
- WINAPI 创建窗口显示奇怪的结果
- winapi -更改显示分辨率不工作
- c++ WinAPI -如何使按钮显示按下
- WINAPI -窗口显示在调试版本中,而不是在发布版本中
- WinAPI 窗口未显示
- WinAPI-按下显示键
- visual studio 2010 -加载位图图像到WINApi c++和显示
- 检测窗口是否完成绘制并显示在屏幕上(WINAPI)