所以我想在某些进程运行时禁用 MFC 对话框的 [X] 关闭按钮。我这样做:
void CSomeDlg::EnableCloseButton(BOOL bEnable)
{
UINT menuf = bEnable ? (MF_BYCOMMAND) : (MF_BYCOMMAND | MF_GRAYED | MF_DISABLED);
CMenu* pSM = GetSystemMenu(FALSE);
if(pSM)
pSM->EnableMenuItem(SC_CLOSE, menuf);
}
void CSomeDlg::OnBtnClick_Cancel()
{
if (!isSomeProcess)
CDialogEx::OnCancel();
}
void CSomeDlg::main()
{
StartSomeProcess();
isSomeProcess = true;
EnableCloseButton(FALSE);
//...
EndSomeProcess();
isSomeProcess = false;
EnableCloseButton(TRUE);
}
这行得通。关闭按钮在某些进程正在运行时禁用。但是,如果我通过用鼠标拖动对话框来移动对话框,则出于某种原因会启用关闭按钮。当我单击它时,应用程序会引发崩溃错误,但它仍然可以工作。如果我不按错误对话框中的“关闭应用程序”按钮,应用程序将正确完成工作,错误对话框将消失。
为什么关闭按钮启用?如何预防?