void shubiao() { ExMessage msg; if (peekmessage(&msg, EM_MOUSE)); { switch (msg.message) { case WM_LBUTTONDOWN: if (msg.x >= 430 && msg.x <= 430 + 300 && msg.y >= 150 && msg.y <= 150 + 100) { jiandan(); } else if (msg.x >= 430 && msg.x <= 430 + 300 && msg.y >= 350 && msg.y <= 350 + 100) { kkn(); } else if (msg.x >= 430 && msg.x <= 430 + 300 && msg.y >= 550 && msg.y <= 550 + 100) { diyu(); } break; default: break; } } /char key = _getch(); switch (key) { case 'a': jiandan(); break; case 'b': kkn(); break; case 'c': diyu(); break; }/ }请检查这段代码有什么问题
时间: 2024-01-10 13:02:08 浏览: 69
在这段代码中,存在以下问题:
1. peekmessage() 函数是 Windows API 中的函数,需要在使用之前先调用 GetMessage() 函数获取消息。没有获取到消息的情况下,peekmessage() 函数会返回 0,但是这里没有对这种情况进行处理。
2. switch-case 语句中,每个 case 后面的代码都应该加上 break,否则会出现意想不到的错误。这里只有在 WM_LBUTTONDOWN 消息的情况下加上了 break,其他情况下都没有加。
3. 注释掉的部分代码中,使用了 _getch() 函数,这是 C 语言的函数,不能在 C++ 中使用。正确的替代方案是使用 std::cin 或者 std::getline() 函数。
4. 注释掉的部分代码中,switch-case 语句中的 case 后面的代码也没有加上 break。
综上所述,这段代码需要进行如下修改:
```c++
void shubiao() {
ExMessage msg;
if (GetMessage(&msg, NULL, 0, 0)) { // 获取消息
if (msg.message == EM_MOUSE) {
switch (msg.wParam) { // msg.wParam 存储了鼠标按键的信息
case WM_LBUTTONDOWN:
if (msg.x >= 430 && msg.x <= 430 + 300 && msg.y >= 150 && msg.y <= 150 + 100) {
jiandan();
} else if (msg.x >= 430 && msg.x <= 430 + 300 && msg.y >= 350 && msg.y <= 350 + 100) {
kkn();
} else if (msg.x >= 430 && msg.x <= 430 + 300 && msg.y >= 550 && msg.y <= 550 + 100) {
diyu();
}
break;
default:
break;
}
}
}
/*
char key;
std::cin >> key;
switch (key) {
case 'a':
jiandan();
break;
case 'b':
kkn();
break;
case 'c':
diyu();
break;
default:
break;
}
*/
}
```
阅读全文