收藏 分享(赏)

mfc对话框程序若干问题.doc

上传人:无敌 文档编号:42342 上传时间:2018-03-05 格式:DOC 页数:4 大小:101KB
下载 相关 举报
mfc对话框程序若干问题.doc_第1页
第1页 / 共4页
mfc对话框程序若干问题.doc_第2页
第2页 / 共4页
mfc对话框程序若干问题.doc_第3页
第3页 / 共4页
mfc对话框程序若干问题.doc_第4页
第4页 / 共4页
亲,该文档总共4页,全部预览完了,如果喜欢就下载吧!
资源描述

1、MFC 对 话框 程序要 点每个 MFC 对话框应 用程序都 是一个 工程(项 目) 。一 个工程 主要 由若干 个对 话框 组成 。 一 个对话 框主 要由 对话 框资 源和对 话框 类两 部分 组成 。 对话 框资 源 包括对 话框 的外 观 ( 大小 、 属性、 颜色 、 标 题, 控 件等) , 对话 框类 由头 文 件和 CPP 两 个文件 组成 , 定义了 对话 框的各 种 操作 。 每 个控 件都有 一个 ID ,唯 一的 标 识该控 件 ,有 的控件 还有 标题 。 可 以为 控 件定义 一个 映 射变 量, 映 射变量 的值 即是 该控 件显 示的值 。 一、 界面设 置 1

2、 、 用 MFC AppWizard(EXE) 新 建一 个对 话框类 型的 窗口 对象 ; 2、 用拖 动的 方 法加入 控件 ( 注意 控件 的 ID 和 caption ) ; 3、 设置控 件的 外观; 4、 为 控件添 加映 射 变量; 5、 双 击控 件添 加 消息响 应函 数 (默 认函 数 名) , 此 添加 的函 数函 数 体为空。 由于 消息是 多样的,使用 ClassWizard 的 Message Map 页面添加消息处理函数更 加合适,这 时 可 用选 择为 哪个 消息 添 加消息 处理 函数 ; 6、 编 辑刚添 加的 消息 响应 函数 以完成 所需 的 工作; 7

3、 、 还可 用根 据需 要为对 话框 类添 加新 的成 员函数 (不 是消 息处 理函 数) , 添加 成 员函数 的 方法 是右 击工 作 区窗格 的类 视图 ,出 现环 境菜单 ,选 择 Add Member Function, 就 可以进 行操 作了 。 二 、 添 加新类 1 、 在 工作 区窗 格 里选择 类视 图 (class view ) 标 签; 2、 右击第 一行 出现 环境 菜单 ; 3、 选择“new class” ; 4、 添 加的 新类 可以 是 MFC 的子类 也可以 是自 定义 的一 般类 , 在“New class” 窗 口中 可 以选择 , 例 如新 类的 名

4、字 叫 sss ; 5 、 添 加进新 类后 , 要 在对 话框 类 的 CPP 文 件中 加一行“#include sss.h” , 不然 新类 无 法使用 ; 6、 新添 加的类以 两个文件的形式 存在 ,一 个是头文件,一 个是 CPP 文件,头文件 定义 了类 的接口 ,CPP 文 件定 义了 类的实 现; 7、 这 两个 文 件可以 在脱 离工 程的 状态 下进行 编辑 , 然后覆 盖原 来的 同名 文件 就可以 了 ; 8 、 虽然 在添 加 新类时 使用 的类 名只 是代 表一个 类 , 但 是在一 个文件 中可以 定义 多个类 , 只要 写好 类的接 口和类 的实现 就可以 了

5、, 这些类 都是全 局的, 可以 互相 访问 , 无 需 借 助友 元来 进行 ; 9、 如果 需要 使用 多个 新类 , 也可以 逐次 用 “new class” 的 方法 添加 进 去, 只不 过文 件 多 了一 些 而已 , 这 样更 有利 于多 人 分工编 写 ; 10 、 在对话 框类 中可 以定 义 新 类的对 象 (全 局对象 ) , 但是对 象对 函数 的操 纵却 只能在 函 数中 进行; 11 、 在一 个类 文 件中所 写的 每一 个新 类, 在对话 框的 类视 图中 都会 反映出 来。 三、 使用列 表框 1 、 列表 类控 件共有 四种: 组合框 、列 表框、 树控件

6、、列表 控件 框。这 些控件 均为供 操 作者 选择 而设, 组合框 和列表 框使用 基本 差不多 ;树控 件还可 以作 为菜单 使用, 列 表 控件 框可 以分 列显 示 信息, 可以 用作 信息 输出 ; 2、 组合 框、 列表 框和 列表控 件框 使 用函数 Addstring 向框中添加项目; 3、 树 控件使用函数 InserItem 插 入项目,使用函 数 DeleteAllItem 来删除 所有 项目; 4 、 在 向树 控件 添 加项目 节点 前要 定义 一个 HTREEITEM 类型的 数组, 该数组 中的 每个元 素记录 着每 次向树 控件所 添加的 项目的 句柄 ,为下

7、一次向 该 项 目 添 加 下 级 项 目 做 准 备 ; 例 如 : HTREEITEM hLetter10; hLetter1=m_TreeFile.InsertItem(“A:”); / 注释:m_TreeFile 为树控件 的映 射变 量 ,InteryItem 函 数 有三 个参 数, 第 一个为 字 符串 ,是 要插 入的 项目 , 第二 、三 个为 HTREEITEM 类型 的项目句柄,表 示 要 插 入 项 目 节 点 的 父 节 点 , 如 果 省 略 , 就 表 示 要 插 入 的 是 根 节 点 m_TreeFile.InsertItem(“Windows”,hLette

8、r1); / 注 释 : 在 节 点“A” 下面插入子节点“Windows” 5、 向列 表控 件框添 加项 目。因 为列表 控件框 是报 表式的 ,有行 列之分 ,因 此要使 用六 个 函数来 操作 : InsertColumn(Number,String,Align,Width) / 索引号 Number 从 0 开始 , 列标 题为 String , 对 齐 方 式 Align 有 LVCFMT_LEFT,LVCFMT_RIGHT 和 LVCFMT_CENTER ,列 宽度 Width 单 位 为 象 素 DeleteAllItem() / 删 除 所 有 行 DeleteItem(nI

9、tem,Column) / 删除句柄 nItem 指 向 的 行 的 Column 列 的 文 本 DeleteColumn(Column) / 删除 Column 列 InsertItem(Number,String) / 插入 String 到新 行的 Number 列, 此函数返回一 个指向这行的句柄,为下次插入此行的子项的文本做准备 SetItemText(nItem,Column,String) / 在句柄 nItem 指向的行的 Number 列上 插入文本 String 6 、 设 置 列 表 控 件 框 显 示 网 格 线 设 m_list 为 list control 的 映

10、 射 变 量 , 则 有 : DWORD dwStyle = m_list.GetExtendedStyle(); / 取 得 当 前 的 扩 展 设 置 dwStyle |= LVS_EX_GRIDLINES; / 网格线 ( 只 适 用 与 report 风格的 listctrl ) m_list.SetExtendedStyle(dwStyle); / 设置扩展风 格 7 、 组合 框的 Drop List 属性,Drop List 属性是 在属 性对 话框 的 Styles (风格 ) 页 的 Type 栏中选择 的 , 这 使得 IDC_KIND 成 为一 个下拉 列表 式组 合框

11、。 组合 框有简 易式 (Simple) 、 下拉 式(Dropdown) 和 下拉 列表 式(Drop List) 三种。 简易式 组合框 包含 一 个编 辑框和 一个 总是显 示的列 表框。 下拉式 组合 框同简 易式组 合框的 区别在 于仅当 单击 下滚箭 头时才 出现列 表框 。下拉 列表式 组合框 也有 一个下 拉的列 表框 , 但 它的 编辑 框是 只 读的 , 不 能输 入字 符。 组 合框不 要自 动排 序 , 因 此 需在 Styles 页 中使 Sort 项 不被 选中。 四、 使 用多 对话 框 (模 态 对话框 ) 1、 创 建一 个新 工程 ( 或打 开 一个已 存在

12、 的工 程) ; 2 、 在 资源 视图 窗格 中右 击 第一行 , 出 现环 境菜 单, 单击菜 单中 的 “ 插入” 选项 , 在 插 入菜 单 的选项 中选 择插 入对 话框 模板资 源 (Dialog ) ; 3、 用 ClassWizard 创建新 的对话 框处理 类。 在资源 视图窗 格中选 中新 资源模 板,右 击 对 话框出 现环境 菜单, 在菜单 中选 择类 向导 (ClassWizard ) ,ClassWizard 会自动 检 测到 该对 话框 模 板是 一 个新 的资源 , 然后 按提 示操 作就 可用了 。 注意 : 类名 前必 须 加大写 字母 C , 最后 三个

13、字母是 Dlg ; 4、 在 Message Maps 标 签下为 此对 话框 添加 消息 处理函 数以 及映 射变 量; 5、 在 新对 话 框 的 父 对 话框 的 合 适的 处理 函 数 中 (相 应 为 控件 )创 建 一 个 新对 话 框 的实 例( 对 象 ) : CMyCustomDlg dlgMyCustom(this) ,这里的 CMyCustomDlg 要换成 具体 的 新 对话框 类名 , dlgMyCustom 换成具体 的 对象名 ; 6、 在新 对话 框 的父对 话框的 的 CPP 文 件的顶 部加 入 “#include MyCustomDlg.h”, 并 用 语

14、句 int nRetCode=dlgMyCustom.DoModal() 来 激活( 打开 ) 新的对 话框 ; 7、 可 在父 对话框 中用 检查 nRetCode 的值 来确 定新 对话 框是 单 击了“OK“ 还 是单击 了 CANCEL 按钮 退出的 :if (nRetCode=IDOK) 8 、 父对 话框 在调 用 新对话 框时 可 以初始 化新 对话 框的 控件 映射变 量的 值 , 然 后在 新对 话框 按下 OK 按钮 后能 将新对 话框 控 件的映射 变量 的值传 回父 对话框。 父对 话框在 调用 DoModal() 函数前 初始化 新对话框 的控 件映 射 变 量 前

15、, 可 以 : CmyCusTomDlg dlgMyCustom(this); DlgMyCustom.m_nAge=31; DlgMyCustom.m_strName=”Jon Bates”; DlgMyCustom.DoModal(); 就可 以初 始化 新对话 框的 控 件 了 。这 里 的 m_nAge 和 m_nName 都 是 新 对话框 控 件 的 映 射 变量 。 当在新 对 话 框中 按下了 OK 按钮后,这些映射变量也带回了在新对 话框 中所做的修改后的新 值,这里的 CmyCusTomDlg 和 DlgMyCustom 也 要换成 具体的 类 名和对象 名。 9、 设置启

16、 动对话框 设项目 的名 称是 kcsj , 则 在项目 的文 件视 图中 有一 个文件 为 kcsj.cpp , 双击 打 开这 个文 件, 可以找到函数 InitInstance() 。设要启动的对话框的类 名是 CmainDlg ,其对 应的 头 文 件 是 mainDlg.h , 则设 置为 : (1 ) 在文件 kcsj.cpp 的#include 部分 增加 一行 : #include”mainDlg.h” (2 ) 在 函数 InitInstance() 中有 3 行: CKcsjDlg dlg; / 这里的 CKcsjDlg 为现 在启动 对话 框 的类名 m_pMainWnd

17、 = int nResponse = dlg.DoModal(); 将其改 为要 启动 的 对话框 类: CmainDlg dlg; m_pMainWnd= int nResponse=dlg.DoModal(); 五、 处理 对话 框 1 删除 对话框 (1 ) 在 工作 区窗 格的“ 对话 框视 图” 中 选中 要删除 的对 话框 的 ID , 再 按下键 盘 上 的 Delete 键 即可。 例如 在下 图所示 的工 程中 删除 对话 框 IDD_BEIJ_DIALOG,操 作 为: (2 ) 在“ 文件视图” 中删除其对 应 的头文件和源文件; (3) 在相应文件夹中物理 删除上面删除

18、 的头文 件和 源文 件。 2 删除对 话框 类 (1 ) 在“ 文件视 图” 中删 除类 的头 文 件和源 文件 , 如上图 ; (2) 在相 应文 件夹中 物理 删除 上面 删除 的头文 件和 源文 件。 (3 ) 在相 应文 件 夹中删除“ clw” 文件(一 个) 3 合并对话框。 如果几个人合作,每人一个对话框,要 将这些 对话 框合 并到 一个 工程中 。 操 作为: (1) 打开主 对话 框所 在的 工程 ; (2) 使编 辑窗格 获得 焦点 ; (3) 使用“ 打开” 功能, 打开 要 合并进 来的 对话 框的 资源 文件 (rc 文 件) ; (4) 将 右边 对 话框 ID

19、 拖进 左边 窗格 ( 工作区 窗格 )即 可。 如下 图: (5 ) 如 果合并 过来的 对话框 已经 定义了 类文件 ,就把 类文 件(头 文件和 源文件 )复 制到主 对话框所在的 文件 夹 ; (6 ) 在 主对话 框的 “ 文 件视 图” 右击 中, “Source Files” 在弹出 的菜 单 中选择 , “Add Files to Foder” , 再 选择 相应 的源 文 件可以 添加 源文 件。 右击“Header Files” 可以复 制头文 件。 4 对 话框问 答 (1 ) 问 :一 个父窗 口有多 种方式 调用 一个子 窗口, 在 子 窗 口 中如 何 知 道父 窗

20、口 是 怎 样 调用 了 它 ? 答 : 在 父 窗 口所 在 的 类中 定义 一 个 全 局变 量,在 子窗口 中声明 为外 部的, 父窗口 在相应 调用 的消息 处理函 数中将 此全 局变量 设置为 不同的 值, 在子 窗口 的需 要 位置上 判断 此变 量, 就 能 知道父 窗口 是怎 样调 用了 它。 (2) 问: 在 窗 口中 怎 样修 改 控件 的标 题 ? 答 : 窗口 中的 每 个控 件 都有 一 个独 一 无二 的 ID ,在设置 控件标 题前 要获 得该 控件 的句 柄指 针 ( 使用 系统 函 数 GetDlgItem(ID) ) , 然 后通过 该指 针 调用系 统设

21、置 ( 使用 系统 函数 SetWindowText(“标题”) ) 。 5 对话 框注 意 事项 (1) 在 程序中 不能 设置 窗口 的标 题。 (2 ) 设置 控件 标 题可以 在窗 口的 OnInitDialog() 消息函 数 中设置 。 (3) 写 数据 文件有 汉字 输出 时, 每个 数据项 都应 该是 单数 字节 (4) 在 自 定义类 中 , 要 用 CString 类 型来表 示字 符串 。 (5) CString 型转换 成 int 型 时 用桉树 atoi , 例如: int k; CString str=”2008”; k=atoi(str); int 型转换成 Cs

22、tring 型 , 用 格式 化 函数 Format , 例如: int k=5; CString str; str.Format(“%d”,k); / 将 k 转换 成 Cstring 型 并存放 于 str 中 (6) CString 型变 量可 以进行 截取 操作 。 例 如: CString str1,str2,str3,str=” 中 国江苏 南京”; str1=str.Left(4); / 从 str 左边截取 四个 字符 ( 中国 ) , 保 存于 str1 中 str2=str.Mid(4,4); / 从 str 中间第 4 (最左 边为 0 ) 个字符 起 , 截 取 4 个

23、字 符 / (江苏 ) , 保 存于 str2 str3=str.Right(4); / 从 str 右边截 取四 个字 符 (南 京 ) , 保 存于 str3 中 (7 ) CString 型字 符串不 能进 行 “+” 操 作, 但 是可 以进 行“+=”操作。 例如: CString str1=“ 中国”,str2=“江苏” ; str1+=str2; /str1 为“ 中 国江 苏” 但是: str1=str1+str2; / 错误! 错误 ! str1=str1+str2; / 错误 6 使 用 UpdateData() 使控件和映射变量交换数据 (1 )函数实参使用 TRUE ,

24、将数据从控件传到映射变量: UpdateData(TRUE) ; ( 2 ) 函 数 实 参 使 用 FALSE , 将 数 据 从 映 射 变 量 传 到 控 件 : UpdateData(FALSE) ; 六、处理组合框 1组合框 静态添加数据 在组合框 属 性对话框中, 选择 Data 页输 入项 目 。 没 输完一 行 , 按 下 Ctrol+Enter 换行 , 在输 入下 一行 , 如 下图 2组 合 框动 态添 加数 据 此时 在添 加组 合框 的的 映射变 量时 ,要 将映 射变 量的类 别(Category ) 设置为 control (控 件) ,才可 以使 用下 列函 数

25、。 有下列 函数 可以 动态 (在 程序中 使用) 为组合框添加项: AddString 将一个项目添加到项列表中去(不排序时添加到最后) DeleteString 删 除 一 个 项 InsertString 在 特 定 位 置 插 入 一 个 项 ResertContent 删 除 所 有 已 存 在的 项 Dir 将文 件名作为项插 入 3 设置组合框 类型 在 Styles 页中 ,可以设置 组合框的 类型 组 合 框 共 有 三 种 Style : (1 ) 当 值 为 0 , 组 合 框 是“ 下 拉 式 组 合 框” (DropDown Combo ) , 与下 拉式 列表 框

26、相 似 , 但不 同的 是 , 下 拉 式组合 框可 以通 过输 入文 本的方 法在 表 项中进 行选 择, 可识 别 Dropdown 、Click 、Change 事件, 如下 图: 没下 拉之 前 下 拉之 后 (2) 当值 为 1 , 组 合框 称为“ 简单 组合 框” (Simple Combo ) , 由可 以输 入文 本 的编 辑区 与 一个标 准列 表框 组成 , 可 识别 Change 、DblClick 事件 , 如 下图 : (3) 当值 为 2 ,组 合 框称为“ 下 拉式 列表 框” (Dropdown ListBox ) ,它的 右边有 个箭 头, 可供“拉下” 或

27、“收起” 操 作。 它不 能 识别 DblClick 及 Change 事 件 , 但 可识 别 Dropdown 、Click 事 件, 如下 图: 4 组合 框项 目排 序 在 组 合框属 性的 Styles 页中, 通过选 择“Sort” 选项, 可以 设置组 合框 项 目是否 排序。 选择 时所输 入的项 目自动 排序, 没选 时不排 序。如 下图: 5 组合框 的下拉 选择 组合 框没 设置 时, 运 行时拉 不下 来, 点击 时只 拉下来 一条 线, 如下 图: 在选中 组合 框 时, 它周 围的 8 个 控制 点 只有两 端的 2 个是 实的 , 上下 6 个 是虚 的。 用鼠

28、标单击 组合 框 的三角 箭头 , 下面 的控 制 点就变 成了 实的 , 如 上右 图。 此时 用鼠 标拖 动下 面 的实控 制点 下 拉一定 的长度 ,运行 时就 可下拉 这个长 度。如 下图 : 6组 合框 的选择 组合 框在运 行时可 以选择 。 在 组合 框的 消息 函数“SELENDOK” 或其它 相关的 消息 函数 中 , 可 以 检测所 选择 的 结果, 进而作 出相应 的处 理。 7 组合 框检测 函数 可以使 用类似 下列代 码进 行检测 组合框的选择 结果 int nItem; / 存 放选择 行号 (首 行的 行号 为 0) CString str; / 存放 所选项 目的 文 本(内容) nItem=m_list1.GetCurSel(); / 函数 GetCurSel 取 项 目 的 行 号 m_list1.GetLBText(nItem,str); / 函数 GetLBText 去 项 目 内 容 switch(nItem) case 0: Cbj x1;x1.DoModal();break; / 选择北 京 , 打 开北 京对 话 框 case 1: Cnj1 x2;x2.DoModal();break; case 2: Csh x3;x3.DoModal(); / 选择南京 ,打 开南 京对话 框 / 选 择上 海, 打 开上海 对话 框

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报