WEB开发网
开发学院软件开发VC Visual C++模态对话框消息处理机制的分析 阅读

Visual C++模态对话框消息处理机制的分析

 2008-11-14 19:33:15 来源:WEB开发网   
核心提示: 对于每一个正在执行的Windows应用程序,系统为其建立一个"消息队列",即应用程序队列,Visual C++模态对话框消息处理机制的分析(2),用来存放该程序可能创建的各种窗口的消息,应用程序中含有一段称作"消息循环"的代码,直到系统接收到WM_D

对于每一个正在执行的Windows应用程序,系统为其建立一个"消息队列",即应用程序队列,用来存放该程序可能创建的各种窗口的消息。应用程序中含有一段称作"消息循环"的代码,用来从消息队列中检索这些消息并把它们分发到相应的窗口函数中。

消息循环代码是应用程序中主函数winmain ( )中类似如下的程序段:

  while(GetMessage(&&msg,NULL,NULL,NULL))
  { file://从消息队列中取得消息
   TranslateMessage(&&msg);
   file://检索并生成字符消息WM_CHAR
   DispatchMessage(&&msg);
   file://将消息发送给相应的窗口函数
   }

由此可见,所谓"消息循环",实际是程序循环。

Windows 应用程序创建的每个窗口都在系统核心注册一个相应的窗口函数,窗口函数程序代码形式上是一个巨大的switch 语句,用以处理由消息循环发送到该窗口的消息,窗口函数由Windows 采用消息驱动的形式直接调用,而不是由应用程序显示调用的,窗口函数处理完消息后又将控制权返回给Windows。

二、模态对话框的消息处理

由上面我们看到,Windows是一个巨大的消息驱动结构,由用户发出消息,系统响应处理。非模态对话框是响应一个消息,系统处理一个消息,处理完毕后返回控制权给Windows。文档/视图框架结构与其类似。模态对话框在对话框创建后,挂起外部的消息,只是响应对话框内部的消息,而外部消息则全部"过滤"掉了,直到系统接收到WM_DESTROY或WM_CLOSE后,系统返回控制权给模态对话框创建前的线程,继续模态对话框创建前的线程将执行下面的代码。

让我们看看下面的对话框DoModal实现代码:

上一页  1 2 3 4  下一页

Tags:Visual 模态 对话框

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接