• 实现模态消息循环


    总结 短语模态窗口用于描述在应用程序框架窗口上弹出的消息或对话框。 当模式窗口出现时,应用程序窗口不能使用。 系统提供了如下功能来创建模态窗口: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

  • 相关阅读:
    课件的引子
    用nc做网络压力测试
    分布式计算学习笔记
    静态库 .a 转成共享库 .so
    nmon用法
    eclipse debug URLClassPath.getLoader(int) file
    sodu 命令场景分析
    俩孩随笔
    深度学习丨深度学习中GPU和显存分析
    语义分割丨DeepLab系列总结「v1、v2、v3、v3+」
  • 原文地址:https://www.cnblogs.com/Dincat/p/13467619.html
Copyright © 2020-2023  润新知