gpt4 book ai didi

c++ - AfxMessageBox 出现在 MFC 对话框后面

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

在我的应用程序的主视图中,我创建了一个无模式对话框,即:

CMyDialog dlg;
int returnval = dlg.doModal();

这是我第一次遇到这种情况,但在这个特定的对话框中,如果我想在按下按钮时显示消息框,它总是出现在对话框后面。如果我按下键盘上的 alt 键,它就会获得焦点并出现在前面。

int nResult = AfxMessageBox(_T("Are you sure you want to delete this file?"), MB_YESNO|MB_ICONQUESTION|MB_SETFOREGROUND | MB_TOPMOST | MB_TASKMODAL);
if(nResult == IDNO){
return;
}
else{
...
}

我想知道我做了什么或者我检查了什么选项会导致这种行为?


编辑:这是我的 OnInitDialog 函数中的一小部分代码,我注释掉了所有其余部分,并且仍然存在相同的行为:

CDialog::OnInitDialog();
DEVMODE sDevMode;
ZeroMemory(&sDevMode, sizeof(DEVMODE));
sDevMode.dmSize = sizeof(DEVMODE);

EnumDisplaySettings(NULL,ENUM_CURRENT_SETTINGS,&sDevMode);
_screenw = (int)sDevMode.dmPelsWidth;
_screenh = (int)sDevMode.dmPelsHeight;

_dlgx = (int) 50;
_dlgy = (int) 50;
_dlgw = (int) _screenw-100;
_dlgh = (int) _screenh-100;

this->MoveWindow(_dlgx,_dlgy,_dlgw,_dlgh);

最佳答案

我能够通过在 DoModal() 之前调用 CWnd::PostMessage(0x118) 来解决同样的问题,如报告的那样here .

这似乎是 MFC 体系结构中的一个小故障,因为如果底层消息循环不为空,则不会显示对话框,唯一的方法是发出 0x118 消息或 ALT 按键 (WM_SYSKEYDOWN)。

所以这个问题的解决方法可能是:

CMyDialog dlg;
CWnd::PostMessage(0x118);
int returnval = dlg.doModal();

关于c++ - AfxMessageBox 出现在 MFC 对话框后面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9263269/

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