mfc 对话框和对话框类CDialog.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
对话框和对话框类 CDialog 对话框经常被使用,因为对话框可以从模板创建,而对话框模板是可以使用资源编辑器方便地进行编辑的。 模式和无模式对话框 对话框分两种类型,模式对话框和无模式对话框。 模式对话框 一个模式对话框是一个有系统菜单、标题栏、边线等的弹出式窗口。在创建对话框时指定 WS_POPUP, WS_SYSMENU, WS_CAPTION 和 DS_MODALFRAME 风格。即使没有指定WS_VISIBLE 风格,模式对话框也会被显示。 创建对话框窗口时,将发送 WM_INITDIALOG 消息(如果指定对话框的 DS_SETFONT 风格,还有 WM_SETFONT 消息)给对话框过程。 对话框过程(Dialog box procedure)不是对话框窗口的窗口过程(Window procedure)。在 Win32 里,对话框的窗口过程由 Windows 系统提供,用户在创建对话框窗口时提供一个对话框过程由窗口过程调用。 对话框窗口被创建之后,Windows 使得它成为一个激活的窗口,它保持激活直到对话框过程调用::EndDialog 函数结束对话框的运行或者 Windows 激活另一个应用程序为止,在激活时,用户或者应用程序不可以激活它的所属窗口(Owner window)。 从某个窗口创建一个模式对话框时,Windows 自动地禁止使用(Disable)这个窗口和它的所有子窗口,直到该模式对话框被关闭和销毁。虽然对话框过程可以 Enable 所属窗口,但是这样做就失去了模式对话框的作用,所以不鼓励这样做。 Windows 创建模式对话框时,给当前捕获鼠标输入的窗口 (如果有的话)发送消息 WM_CANCLEMODE。收到该消息后,应用程序应该终止鼠标捕获(Release the mouse capture)以便于用户能把鼠标移到模式对话框;否则由于Owner 窗口被禁止,程序将失去鼠标输入。 为了处理模式对话框的消息,Windows 开始对话框自身的消息循环,暂时控制整个应用程序的消息队列。如果 Windows 收到一个非对话框消息时,则它把消息派发给适当的窗口处理;如果收到了 WM_QUIT 消息,则把该消息放回应用程序的消息队列里,这样应用程序的主消息循环最终能处理这个消息。 当应用程序的消息队列为空时,Windows 发送WM_ENTERIDLE 消息给 Owner 窗口。在对话框运行时,程序可以使用这个消息进行后台处理,当然应该注意经常让出控制给模式对话框,以便它能接收用户输入。如果不希望模式对话框发送 WM_ENTERIDlE 消息,则在创建模式对话框时指定 DS_NOIDLEMSG 风格。 一个应用程序通过调用::EndDialog 函数来销毁一个模式对话框。一般情况下,当用户从系统菜单里选择了关闭 (Close)命令或者按下了确认(OK)或取消(CANCLE)按钮,::EndDialog 被对话框过程所调用。调用::EndDialog 时,指定其参数 nResult 的值,Windows 将在销毁对话框窗口后返回这个值,一般,程序通过返回值判断对话框窗口是否完成了任务或者被用户取消。 无模式对话框 一个无模式对话框是一个有系统菜单、标题栏、边线等的弹出式窗口。在创建对话框模板时指定 WS_POPUP、WS_CAPTION、WS_BORDER 和 WS_SYSMENU 风格。如果没有指定 WS_VISIBLE 风格,无模式对话框不会自动地显示出来。 一个无模式对话框既不会禁止所属窗口,也不会给它发送消息。当创建一个模式对话框时,Windows 使它成为活动窗口,但用户或者程序可以随时改变和设置活动窗口。如果对话框失去激活, 那么即使所属窗口是活动的,在 Z 轴顺序上,它仍然在所属窗口之上。 应用程序负责获取和派发输入消息给对话框。大部分应用程序使用主消息循环来处理,但是为了用户可以使用键盘在控制窗口之间移动或者选择控制窗口,应用程序应该调用::IsDialogMessage 函数。 这里,顺便解释::IsDialogMessage 函数。虽然该函数是为无模式对话框设计的,但是任何包含了控制子窗口的窗口都可以调用它,用来实现类似于对话框的键盘选择操作。 当::IsDialogMessage 处理一个消息时,它检查键盘消息并把它们转换成相应对话框的选择命令。例如,当 Tab 键被压下时,下 一个或下一组控制被选中,当 Down Arrow 键按下后,一组控制中的下一个控制被选择。 ::IsDialogMessage 完成了所有必要的消息转换和消息派发,所以该函数处理的消息一定不要传递给 TranslateMessage 和DispatchMessage 处理。 一个无模式对话框不能像模式对话框那样

文档评论(0)

tianya189 + 关注
官方认证
文档贡献者

该用户很懒,什么也没介绍

认证主体阳新县融易互联网技术工作室
IP属地上海
统一社会信用代码/组织机构代码
92420222MA4ELHM75D

1亿VIP精品文档

相关文档