Button 移动对话框时,“禁用关闭”按钮将启用

Button 移动对话框时,“禁用关闭”按钮将启用,button,mfc,dialog,isenabled,Button,Mfc,Dialog,Isenabled,所以我想在某个进程运行时禁用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->EnableMenu

所以我想在某个进程运行时禁用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);
}   
这很有效。关闭按钮在某些进程运行时禁用。但是,如果我用鼠标拖动对话框,出于某种原因,关闭按钮将启用。当我点击它时,应用程序抛出崩溃错误,但它仍在工作。如果我不按下错误对话框中的“关闭应用程序”按钮,应用程序将正确完成工作,错误对话框将消失


为什么关闭按钮会启用?如何防止它?

我在一个非常基本的基于对话框的示例应用程序中尝试了这个方法,效果很好。一旦关闭按钮被禁用,当我移动对话框时,它不会被启用。移动对话框时,是否选中了“无人调用EnableCloseButton”(TRUE)?但是在这个函数中有一个断点并检查。我用断点再次检查了一次,除了上面的示例代码中的两个调用之外,我没有找到任何EnableCloseButton()调用。奇怪的是,你的对话框有OnMove处理程序吗?如果是,请将其拆下,然后查看是否有效。另外,从头开始创建一个新项目,并尝试禁用关闭按钮,看看它是否有效。如果它在那里工作,那一定是您的软件中有问题。没有OnMove处理程序。我尝试了一个新项目,它成功了。所以问题可能在其他地方。谢谢你的帮助!