zoukankan      html  css  js  c++  java
  • 实现模态消息循环

    总结 短语模态窗口用于描述在应用程序框架窗口上弹出的消息或对话框。 当模式窗口出现时,应用程序窗口不能使用。 系统提供了如下功能来创建模态窗口:MessageBox, DialogBox, DialogBoxParam, DialogBoxIndirect和DialogBoxParamIndirect。 更多的信息 模态窗口的实现有两个方面。 首先,必须禁用父窗口,以防止用户交互。 第二,模态消息循环——模态窗口是用它自己的消息循环实现的。 一个典型的实现可能是这样的: 隐藏,收缩,复制Code

    BOOL fDone;
    INT  nResult;
    
    int RunModalWindow(
      HWND hwndDialog,
      HWND hwndParent)
    {
      if(hwndParent != NULL)
        EnableWindow(hwndParent,FALSE);
    
      MSG msg;
      
      for(fDone=FALSE;fDone;WaitMessage())
      {
        while(PeekMessage(&msg,0,0,0,PM_REMOVE))
        {
          if(msg.message == WM_QUIT)
          {
            fDone = TRUE;
            PostMessage(NULL,WM_QUIT,0,0);
            break;
          }
    
          if(!IsDialogMessage(hwndDlg,&msg))
          {
            TranslateMessage(&msg);
            DispatchMessage(&msg);
          }
        }
      }
    
      if(hwndParent != NULL)
        EnableWindow(hwndParent,TRUE);
    
      DestroyWindow(hwndDialog);
    
      return nResult;
    }

    注意一些重要的特点的循环: 不能通过调用PostQuitMessage来终止模态消息循环,因为该函数用于终止UI线程。 线程拥有的所有窗口必须被销毁。 因此,如果WM_QUIT被拾取,它必须手动重新发布。 通过调用一个特殊的函数来设置与窗口相关联的标志,可以正确地关闭模态窗口。 在示例代码中,终止标志是fDone,通常存储在WindowLong中。 通常,模态窗口也允许返回代码——示例代码使用了nResult来达到这个目的。 还要注意破坏对话框和启用父对话框的调用顺序。 父窗口必须在对话框被销毁之前启用,因为禁用的窗口不能接收焦点或激活。 DestroyWindow将想分配激活到一个窗口 如果父窗口被禁用,另一个顶级窗口将被选择并激活- 通常不是预期的结果。 本文转载于:http://www.diyabc.com/frontweb/news8204.html

  • 相关阅读:
    CentOS 8下安装hadoop-3.3.0
    c# log4net安装时在AssemblyInfo中提示找不到log4net解决办法
    C#自定义类型数组排序
    C#中的隐藏方法
    VBA 按列查找小工具类似lookUp函数
    欢迎来到网络对抗路 实验八 Web综合
    利用GMSSL中ZUC算法实现对序列密码的结构性检测(代码)
    第二十一章学习笔记
    欢迎来到网络对抗路 实验七 网络欺诈防范
    数据转换考试qwq
  • 原文地址:https://www.cnblogs.com/Dincat/p/13467619.html
Copyright © 2011-2022 走看看