gpt4 book ai didi

C++ MessageBox (Windows.h) - 它有什么作用,我怎样才能让它不可见(或等效)?

转载 作者:搜寻专家 更新时间:2023-10-31 00:01:49 25 4
gpt4 key购买 nike

当我有:

MessageBox(NULL, NULL , "MessageBox", NULL);

出现一个消息框,我的程序按我希望的方式运行,直到用户在消息框上单击“确定”,然后程序结束。我试图放入一个无限循环以产生相同的效果,但这与消息框的工作方式不同。我不想要消息框的原因是它阻碍了用户对程序的看法,如果他们试图关闭它,程序就会停止。所以我基本上只想有一个不可见的消息框或具有相同效果的东西。

编辑:澄清一下,该程序是游戏的原型(prototype)。我正在使用 Hook 来查找用户按下的键。这是该程序的简化版本:

#define WM_KEYDOWN                      0x0100
#define _WIN32_WINNT 0x0500

#include <iostream>
#include <windows.h>
#include <winuser.h>

using namespace std;

LRESULT CALLBACK HookProc(int nCode, WPARAM wParam, LPARAM lParam){


PKBDLLHOOKSTRUCT keypointer = (PKBDLLHOOKSTRUCT)(lParam);
if (wParam==WM_KEYDOWN){

switch(keypointer->vkCode){


case VK_RIGHT:
cout << "**RIGHT**";
goto skip;
case VK_LEFT:
cout << "**LEFT**";
goto skip;
case VK_DOWN:
cout << "**DOWN**";
goto skip;
case VK_UP:
cout << "**UP**";
skip:
default:
cout << "";
}
}
return CallNextHookEx(NULL, nCode, wParam, lParam);
}
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd) {


SetWindowsHookEx(WH_KEYBOARD_LL, HookProc, hInstance, 0);

MessageBox(NULL, NULL , "KLMBOX", NULL);

return 0;

}

我只希望程序具有相同的功能,但不显示消息框!我不是专家,我只是在闲逛:http://msdn.microsoft.com/en-us/library/windows/desktop/ms632589(v=vs.85).aspx

最佳答案

听起来你要找的是 message loop . MessageBox() 在这里做了两件事:它显示对话框,但它还在内部提供自己的消息循环来处理对话框的输入。低级 Hook 需要消息循环才能正常运行,并且您的代码与 MessageBox 一起工作只是因为它提供的消息循环正在为您执行必要的消息处理。这就是为什么一个普通的无限循环不能作为替代品的原因 - 它没有适本地处理消息。

这是一个您可以剪切和粘贴的简单的:

MSG msg;
while(GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}

当您在代码的其他地方(但仍在同一线程上)决定要退出时 - 也许当您检测到 Hook 中的某些组合键时 - 使用 PostQuitMessage() ;这会将 WM_QUIT 消息发布到线程的队列,当 GetMessage 检索到该消息时,它将返回 0 并且循环将退出。


综上所述,这首先不是编写游戏的好方法;低级键盘 Hook 是矫枉过正,在这里并不合适。如果你想在 Windows 应用程序中获得键盘输入,最简单的做法是创建你自己的窗口,它会在按下/释放键时接收 WM_KEYDOWN/UP 消息。

关于C++ MessageBox (Windows.h) - 它有什么作用,我怎样才能让它不可见(或等效)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9215463/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com