1.10 对话框的运行 < 深入浅出MFC读书笔记 >

本文介绍了Windows编程中对话框的模态与非模态概念,模态对话框屏蔽父窗口直至关闭,而非模态则与父窗口同时运行。对话框由对话框模板和对话框函数组成,其中RC文件用于定义对话框外观,对话框函数处理WM_INITDIALOG和WM_COMMAND等消息。模态对话框通过DialogBox和EndDialog函数进行管理。通过对同一ID的不同消息处理,一个控件可以响应多种操作。
摘要由CSDN通过智能技术生成

对话框的运行

读完这一章的内容后一共获得以下收获

  1. 什么是模态(modal)对话框
  2. 什么是非模态(modeless)对话框
  3. 对话框时如何运行的

对于什么是模态什么是非模态是根据对话框与其父窗口的关系来确定的
一. 什么是模态对话框
书上的说法: " 屏蔽了父窗口, 直到对话框结束 " 的就是模态对话框, 为了便于记忆我就想象模态就是对话框变成了一个球形的保护膜罩住了父窗口, 如果我们不去弄破这个保护膜就无法使用父窗口<类似屏蔽了呵呵>.

二. 什么是非模态对话框
书上的说法: " 父窗口与对话框同时运行 "
我的看法 : 确实如此

三. 对话框是如何运行的
在了解对话框是如何运行之前, 先来了解对话框是什么以及对话框是如何创建的.
1.对话框包括对话框中的控件其实都是一个个窗口.
2.对话框的创建,从书上得知,以关于About对话框为例.做出一个对话框必须有如下两个东西
① 对话框模板(dialog template), 这是在RC文件中定义的一个对话框外貌, 以各种方式决定对话框的大小,字形,内部有哪些控件,各在什么位置等等.
(思考: RC文件是什么现实中是长什么样子的.)
{验证: 在VS2013中打开一个RC文件会直接跳转到资源视图之中, 可通过全局查找ID的方式来打开文本文件}

IDD_ABOUTBOX DIALOGEX 0, 0, 170, 62
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "关于 对话框的运行"
FONT 9, "MS Shell Dlg", 0, 0, 0x1
BEGIN
    ICON            IDR_MAINFRAME,IDC_STATIC,14,14,20,20
    LTEXT           "对话框的运行,1.0 版",IDC_STATIC,42,14,114,8,SS_NOPREFIX
    LTEXT           "Copyright (C) 2022",IDC_STATIC,42,26,114,8
    DEFPUSHBUTTON   "确定",IDOK,113,41,50,14,WS_GROUP
    PUSHBUTTON      "Button1",IDC_BUTTON1,18,41,50,14
END

②对话框函数(dialog Procedure), 其形态非常类似窗口函数, 但是它通常只处理WM_INTIDIALOG, WM_COMMAND两个消息, 对话框中的控件是一个个小窗口, 他们与对话框之前的交互是通过发送WM_COMMAND的方式进行的, 最后通过控件各自的ID号来判断是谁发送的.
(思考: 要是是同一个控件需要两种不同的处理是怎么实现的呢, 假如一个按钮要处理一个单击, 和一个双击)
{验证: 通过查看代码发现在案例中的同一个ID号可以有不同的消息处理函数

BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx)
	ON_BN_CLICKED(IDC_BUTTON1, &CAboutDlg::OnBnClickedButton1)
	ON_BN_DOUBLECLICKED(IDC_BUTTON1, &CAboutDlg::OnBnDoubleclickedButton1)
END_MESSAGE_MAP()

这就很奇怪了, 按照上一章的描述来看, 一个WM_COMMAND消息中的wParam参数中的ID号只能对应一个消息响应函数, 可是在这里一个ID号却出现了两个消息响应函数是怎么实现的呢?只能通过更加深入的学习来了解了.
}

我们现在再来看对话框的运行
modul对话框的运行和结束(Win32)靠的是DialogBox, EndDialog两个函数来实现的

1.DialogBox
1.1控制权交给 对话框函数
2.消息循环(GetMessage阻塞)
3.结束从对话框函数返回值到DialogBox

ERROR: Ignored the following versions that require a different python version: 1.10.10 Requires-Python >=3.6,<3.8; 1.10.11 Requires-Python >=3.6,<3.8; 1.10.12 Requires-Python >=3.6,<3.8; 1.10.13 Requires-Python >=3.6,<3.8; 1.10.14 Requires-Python >=3.6,<3.8; 1.10.15 Requires-Python >=3.6,<3.8; 1.10.16 Requires-Python >=3.6,<3.8; 1.10.17 Requires-Python >=3.6,<3.8; 1.10.18 Requires-Python >=3.6,<3.8; 1.10.19 Requires-Python >=3.6,<3.8; 1.10.20 Requires-Python >=3.6,<3.8; 1.10.21 Requires-Python >=3.6,<3.8; 1.10.22 Requires-Python >=3.6,<3.8; 1.10.23 Requires-Python >=3.6,<3.8; 1.10.24 Requires-Python >=3.6,<3.8; 1.10.25 Requires-Python >=3.6,<3.8; 1.10.26 Requires-Python >=3.6,<3.8; 1.10.3 Requires-Python >=3.6,<3.8; 1.10.4 Requires-Python >=3.6,<3.8; 1.10.5 Requires-Python >=3.6,<3.8; 1.10.6 Requires-Python >=3.6,<3.8; 1.10.7 Requires-Python >=3.6,<3.8; 1.10.8 Requires-Python >=3.6,<3.8; 1.10.9 Requires-Python >=3.6,<3.8 ERROR: Could not find a version that satisfies the requirement tensorflow~=1.14.0 (from rasa) (from versions: 2.2.0, 2.2.1, 2.2.2, 2.2.3, 2.3.0, 2.3.1, 2.3.2, 2.3.3, 2.3.4, 2.4.0, 2.4.1, 2.4.2, 2.4.3, 2.4.4, 2.5.0, 2.5.1, 2.5.2, 2.5.3, 2.6.0rc0, 2.6.0rc1, 2.6.0rc2, 2.6.0, 2.6.1, 2.6.2, 2.6.3, 2.6.4, 2.6.5, 2.7.0rc0, 2.7.0rc1, 2.7.0, 2.7.1, 2.7.2, 2.7.3, 2.7.4, 2.8.0rc0, 2.8.0rc1, 2.8.0, 2.8.1, 2.8.2, 2.8.3, 2.8.4, 2.9.0rc0, 2.9.0rc1, 2.9.0rc2, 2.9.0, 2.9.1, 2.9.2, 2.9.3, 2.10.0rc0, 2.10.0rc1, 2.10.0rc2, 2.10.0rc3, 2.10.0, 2.10.1, 2.11.0rc0, 2.11.0rc1, 2.11.0rc2, 2.11.0, 2.11.1, 2.12.0rc0, 2.12.0rc1, 2.12.0, 2.13.0rc0, 2.13.0rc1) ERROR: No matching distribution found for tensorflow~=1.14.0
06-13
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值