0

そのため、プロセスの実行中に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);
}   

これは機能します。一部のプロセスの実行中は、[閉じる] ボタンが無効になります。しかし、マウスでドラッグしてダイアログを移動すると、何らかの理由で閉じるボタンが有効になります。そして、それをクリックすると、アプリケーションはクラッシュエラーをスローしますが、まだ機能しています。また、エラー ダイアログの [アプリケーションを閉じる] ボタンを押さないと、アプリケーションは作業を正しく終了し、エラー ダイアログは消えます。

閉じるボタンが有効になるのはなぜですか? それを防ぐ方法は?

4

0 に答える 0