gpt4 book ai didi

c++ - 为什么这个对话框打开后立即关闭?

转载 作者:行者123 更新时间:2023-11-30 03:09:48 25 4
gpt4 key购买 nike

我的问题是我正在尝试创建一个 Opengl/Win32 应用程序,但我无法让我的对话框保持打开状态。它确实在闪烁,就好像有人在它打开时按下了取消键。我环顾了谷歌并发现了其他几个有这个问题的人,但他们发布的解决方案都没有帮助我,所以我求助于 StackOverflow 社区!

最初,我为对话过程编写了代码...

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 是一个全局变量。

实际的对话框也已正确创建和包含。你有什么想法?-天体 key

最佳答案

  • DialogBox 不返回 hwnd,该函数直到对话框关闭才返回,如果您想要无模式对话框和句柄,请使用 CreateDialog
  • DLGPROC DialogBox 参数应该是not require a cast , 将 LoginDlgProc' LRESULT 更改为 INT_PTR
  • MessageBox(NULL, NULL, NULL, MB_OK);不会显示任何内容,它需要第二个参数中的文本

很难说为什么对话框没有保持打开状态,但是你应该检查DialogBox的返回值,如果是0,父hwnd无效,如果是-1,调用GetLastError()得到更多信息。您可以尝试的一件事是删除 LOGIN_DIALOG 对话框模板中的所有控件(如果您使用通用控件,但没有调用 InitCommonControls,对话框将无法工作等)

关于c++ - 为什么这个对话框打开后立即关闭?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3823906/

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