【发布时间】:2012-02-09 17:11:50
【问题描述】:
当我有:
MessageBox(NULL, NULL , "MessageBox", NULL);
出现一个消息框,我的程序按我的意愿运行,直到用户在消息框上单击“确定”,然后程序结束。我试图放入一个无限循环以获得相同的效果,但这与消息框的工作方式不同。我不想要消息框的原因是它阻碍了用户对程序的查看,如果他们试图关闭它,程序就会停止。所以我基本上只是想要一个不可见的消息框或具有相同效果的东西。
编辑:澄清一下,该程序是游戏的原型。我正在使用挂钩来查找用户正在按下的键。这是该程序的简化版本:
#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
【问题讨论】:
-
你正在构建什么样的应用程序,因为你不应该需要一个消息框来保持应用程序的活动。
-
这听起来像是一个控制台应用程序,它输出大量数据然后
MsgBoxs 并退出。要么让它成为一个 GUI 应用程序(带有一个 GUI),要么在最后添加一个“按任意键”提示。 -
@Deanna 查看我所做的编辑谢谢 :)
-
@Dervall 查看我所做的编辑谢谢 :)
-
¤
MessageBox调用正在运行一个消息循环,基本上是一个调用GetMessage、TranslateMessage和DispatchMessage的循环。如果没有消息循环,则不会向您的钩子发送消息。但实际上你不应该使用钩子,而应该只使用你自己的窗口。您可以从my Windows API lessons blog 开始使用 Windows API 级编程。但这只是一个开始;你需要一些书,如果 Windows API 级别是你的选择,那么例如Petzold 的“编程窗口”。干杯&hth.,
标签: c++ winapi messagebox invisible