• mfc关闭模态dialog的正确方式


    在模态对话框中:

    正常的用户触发的OnOK 、OnCancel消息都是通过调用函数EndDialog去关闭模态对话框的,EndDialog函数并不立即清除对话框。而是设置一个标志,并且允许对话框应用程序把控制权返回系统。系统在试图从应用程序队列检索下一个消息之前检测标志。如果已经设置了标志则系统中止消息循环,清除对话框,所以当我们想在代码中去调用EndDialog函数去结束对话框,最后再释放对话框对象。

    函数原型:BOOL EndDialog(HWND hDlg,int nResult); 
      参数: 
      hDlg:表示要被清除的对话框窗口。 
      NResult:指定从创建对话框函数返回到应用程序的值。 
      返回值:如果函数调用成功,则返回值为非零值;如果函数调用失败则返回值为零。若想获得错误信息请调用GetLastError函数


    EndDialog 与 DestroyWindow 的区别
    (1) EndDialog(-1);


    关闭模态对话框,并且将参数作为父对话框调用的返回值。


    (2)  DestroyWindow();  ::PostQuitMessage(0);


    DestroyWindow 关闭非模态对话框。 退出消息循环,真正结束进程。有不少程序窗口关闭,但是不等于退出运行。CDialog::EndDialog


    void EndDialog(int nResult);


    参数:

    nResult 对话框返回的值,用于调用者DoModal。
    说明:
    调用该成员函数来中止一个模态对话框。该函数返回nResult。无论模态对话框是何时被创建的,必须使用EndDialog来结束处理。

    可以随时调用EndDialog,即使在使用OnInitDialog时,即在对话框显示或获得输入焦点之前就关闭它。

    EndDialog不会立即关闭对话框。它设置了一个标记,用以指定在当前消息处理程序返回时就关闭对话框。

    PS:今天遇到的问题:由于在模态对话框中调用了其他结束函数,没有调用EndDialog函数终止消息循环,所以进程无法正常退出,被系统挂起。

    参考链接:
    https://blog.csdn.net/yangyihongyangjiying/java/article/details/44488343

  • 相关阅读:
    Nginx支持WebSocket反向代理-学习小结
    CentOS6.9下升级默认的OpenSSH操作记录(升级到OpenSSH_7.6p1)
    CentOS 6下gcc升级的操作记录(由默认的4.4.7升级到6.4.0版本)
    Docker容器内部端口映射到外部宿主机端口
    Linux下分布式系统以及CAP理论分析
    C/ C++ 快速上手
    YUV视频格式详解(翻译自微软文档)
    YUV详解
    阿里云ECS使用vnc远程连接(Ubuntu + CentOS)
    oh-my-zsh: 让终端飞
  • 原文地址:https://www.cnblogs.com/2018shawn/p/12652929.html
Copyright © 2020-2023  润新知