我刚刚创建了一个简单的C ++窗口并添加了一个菜单,但是当我点击菜单时,特别是“关于”我想要显示一个简单的MessageBox但我不能 - 因为它没有显示。 / p>
LPCWSTR App_Name = TEXT("TestApp");
LPCWSTR App_Title = TEXT("TestTitle");
const int windowWidth = 480;
const int windowHeight = 480;
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int iCmdShow)
{
WNDCLASS wc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hbrBackground = (HBRUSH)GetStockObject( WHITE_BRUSH );
wc.hCursor = LoadCursor( NULL, IDC_ARROW );
wc.hIcon = LoadIcon( NULL, IDI_APPLICATION );
wc.hInstance = hInstance;
wc.lpfnWndProc = WndProc;
wc.lpszClassName = App_Name;
wc.lpszMenuName = MAKEINTRESOURCE(MNU_MAINMENU);
wc.style = CS_HREDRAW | CS_VREDRAW;
RegisterClass(&wc);
RECT rc;
GetWindowRect(GetDesktopWindow(), &rc);
long screenWidth = rc.right;
long screenHeight = rc.bottom;
HWND hwnd = CreateWindow
(
App_Name,
App_Title,
WS_MINIMIZEBOX | WS_SYSMENU,
(screenWidth / 2) - (windowWidth / 2), (screenHeight / 2)-(windowHeight/2),
windowWidth, windowHeight,
NULL, NULL,
hInstance, NULL
);
ShowWindow(hwnd, iCmdShow );
UpdateWindow(hwnd);
MSG msg;
while( GetMessage( &msg, NULL, 0, 0 ) )
{
TranslateMessage( &msg );
DispatchMessage( &msg );
}
return msg.wParam;
}
和MessageBox ......:
LRESULT CALLBACK WndProc(HWND hwnd,UINT message, WPARAM wparam, LPARAM lparam)
{
switch( message )
{
case WM_COMMAND:
id = LOWORD(wparam);
event = LOWORD(wparam);
switch(id)
{
case MNU_HELP_ABOUT:
MessageBox(NULL, TEXT("TEXT"), TEXT("TITLE"), MB_OK | MB_ICONINFORMATION);
break;
}
break;
}
}
菜单有效,因为我已经添加了Quit等等,所以我知道它会响应菜单上的点击,但是当我点击“关于”按钮时,您会听到弹出声音,但是没有MessageBox显示。
有什么想法吗?
答案 0 :(得分:1)
MessageBox的第一个参数是父级的hWnd。请注意,MessageBox调用是同步的,因此在用户单击“确定”按钮之前,控件不会返回到WndProc。 (因此,您的窗口没有响应。)您还没有提供父hWnd,因此可能已在窗口下创建了消息框。
尝试将hwnd作为第一个MessageBox参数传递,看看是否有帮助。
答案 1 :(得分:0)
我想出来了,不知何故。问题是因为我没有在WM_CREATE中做过任何事情,或者表格上没有任何内容 - 白色背景或其他东西。当我开始向窗口添加控件(按钮)时,它突然出现在之前没有的位置。太奇怪了......