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

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);

最佳答案

AfxMessageBox在Z顺序的顶部窗口中始终是模态的。我认为不需要传递额外的标志来实现它。是的,如果应用程序(主窗口)没有对准焦点,则可以在调用AfxMessageBox之前显式激活它。

我看到消息框不会出现的唯一情况是父窗口是由其他线程创建的,而AfxMessageBox是从另一个线程调用的。

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

10-11 16:26