我的问题是我正在尝试创建一个Opengl / Win32应用程序,但我无法打开对话框。字面上闪烁,好像有人在打开时按下了它右边。 我已经浏览了谷歌并找到了其他一些问题,但他们发布的解决方案都没有帮助我,所以我转向StackOverflow社区!
最初,我为Dialog Procedure编写代码......
LRESULT CALLBACK LoginDlgProc(HWND hWndDlg, UINT Msg, WPARAM wParam, LPARAM lParam)
{
ShowWindow(hWndDlg, SW_SHOW); // These were added to get the window to show up
UpdateWindow(hWndDlg); // even if the chance was small.
switch(Msg)
{
case WM_INITDIALOG:
return true;
case WM_COMMAND:
switch(wParam)
{
case IDOK:
EndDialog(hWndDlg, 0);
return TRUE;
}
break;
}
return FALSE;
}
然后我写了实际代码来显示框。
void DisplayLoginBox()
{
LoginDlgHwnd = NULL;
LoginDlgHwnd = (HWND)DialogBox(GetModuleHandle(NULL),
MAKEINTRESOURCE(LOGIN_DIALOG),
app.GetHandle(),
reinterpret_cast<DLGPROC>(LoginDlgProc)
);
if(LoginDlgHwnd == NULL)
MessageBox(NULL, NULL, NULL, MB_OK);
}
app.GetHandle()返回主程序的hwnd。此功能正常工作。和LoginDlgHwnd是一个全局变量。
也会创建并正确包含实际对话框。你有什么想法? -Celestialkey
答案 0 :(得分:3)
很难说为什么对话框不会保持打开状态,但你应该检查DialogBox的返回值,如果是0,则父hwnd无效,如果是-1,则调用GetLastError()以获得更多信息。您可以尝试的一件事是删除LOGIN_DIALOG对话框模板中的所有控件(如果您使用了常用控件,但没有调用InitCommonControls,则对话框将不起作用等)