第七章 基于对话框的应用程序 7.1 Windows编程基础 7.2 基于对话框的应用程序 7.3 静态文本框

Slides:



Advertisements
Similar presentations
软件开发技术基础 第 3 章 操作系统及程序设计 讲授教师:卫颜俊. 主 要 内 容 主 要 内 容 操作系统及其功能 进程管理应用程序设计 内存管理应用程序设计 设备与文件管理应用程序设计 人机接口管理应用程序设计.
Advertisements

项目2 字符格式和段落编排 2017年3月7日6时54分.
过程性保存文本格式的实现 计算概论小课题 王元康.
插入超链接 高邮市第一实验小学 范太国 任务一:设置文本超链接 任务一:设置文字超链接 步骤:1、选定文字并右击,在快捷菜单 中选择“超链接”命令。 2、在弹出的对话框中选择左侧“链接到:”中的“本文档中的位置(A)”项,在“请选择文档中的位置(C):”中选择需要链接的幻灯片,单击“确定”按钮。
计算机高级程序设计 第五章.
用MFC制作windows风格界面步骤:
基于VC++的数字图像特效处理系统的设计与实现
第9章 Windows 标准控件在可视化编程中的应用
第2章 对话框与控件 返回目录.
第八章 菜单设计 §8.1 Visual FoxPro 系统菜单 §8.2 为自己的程序添加菜单 §8.3 创建快捷菜单.
授课老师:龚涛 信息科学与技术学院 2018年3月 教材: 《Visual C++程序员成长攻略》 《C++ Builder程序员成长攻略》
6.4 Notification 通知栏.
第5章 文本与字体 2018/12/3 面向对象与可视化 程序设计 --Visual C++ 编程 主讲教师: 唐 龙教授 (计算机科学与技术系) 黄维通博士 (计算机与信息管理中心) 清 华 大 学 2001年2月 2018/12/3 Huang Weitong.
简要回顾 了解课程体系、课程目的和主要内容 掌握Windows编程涉及的一些主要概念 DOS程序和Windows程序的主要区别 窗口和程序
第5章 文本与字体 2018/12/4 面向对象与可视化 程序设计 --Visual C++ 编程 主讲教师: 唐 龙教授 (计算机科学与技术系) 黄维通博士 (计算机与信息管理中心) 清 华 大 学 2001年2月 2018/12/4 Huang Weitong.
第1章 Windows应用程序框架的 创建与消息处理
大学计算机基础 典型案例之一 构建FPT服务器.
走进编程 程序的顺序结构(二).
第十一讲 MFC常用控件的使用(3) 严宣辉 数学与计算机科学学院
MFC WinSock类的编程 为简化套接字网络编程,更方便地利用Windows的消息驱动机制,微软的基础类库(Microsoft Foundation Class Libary,简称MFC),提供了两个套接字类,在不同的层次上对Windows Socket API函数进行了封装,为编写Windows.
网络游戏开发语言基础 ——Windows程序设计
第一单元 初识C程序与C程序开发平台搭建 ---观其大略
第5章 文本与字体 2018/12/31 面向对象与可视化 程序设计 --Visual C++ 编程 主讲教师: 唐 龙教授 (计算机科学与技术系) 黄维通博士 (计算机与信息管理中心) 清 华 大 学 2001年2月 2018/12/31 Huang Weitong.
第五讲 四则运算计算器(一) 精品教程《C#程序设计与应用(第2版)清华大学出版社 谭恒松 主编
第4章 MFC编程 4.1 MFC概述 4.2 MFC和Win CObject类 4.4 消息映射的实现
第 10 章 Windows用户界面 10.1 Windows消息与命令 10.2 单文档与多文档程序 10.3 对话框与常用组件
Visual C++ Windows Programming
Windows 7 的系统设置.
第八章 文档/视图结构应用程序 8.1 文档/视图结构 8.2 图形与文字输出 8.3 定时器 8.4 鼠标和键盘消息处理 8.5 对话框
PRESENTED BY OfficePLUS
第七章 操作符重载 胡昊 南京大学计算机系软件所.
程序设计工具实习 Software Program Tool
LO GO 通用工作汇报PPT模板 您的内容打在这里,或者通过复制您的文本后,在此框中选择粘贴,并选择只保留文字。您的内容打在这里,或者通过复制您的文本后,在此框中选择粘贴,并选择只保留文字。 北纬.
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
第四讲 客户问卷调查程序 教育部“十二五”职业教育国家规划教材
C语言程序设计 主讲教师:陆幼利.
第5章 文本与字体 2019/4/9 面向对象与可视化 程序设计 --Visual C++ 编程 主讲教师: 唐 龙教授 (计算机科学与技术系) 黄维通博士 (计算机与信息管理中心) 清 华 大 学 2001年2月 2019/4/9 Huang Weitong.
标准配色方案 背景 文本和线条 阴影 强调色 主色一 主色二 主色三 主色四 推荐应用顺序. 标准配色方案 背景 文本和线条 阴影 强调色 主色一 主色二 主色三 主色四 推荐应用顺序.
《面向对象程序设计与Visual C++6.0教程》
_04Combox控件和ListBox控件的使用
PRESENTED BY OfficePLUS
姚金宇 MIT SCHEME 使用说明 姚金宇
项目二:HTML语言基础.
MFC控件 本节内容 视频提供:昆山爱达人信息技术有限公司 视频录制:yang 官网地址:
复 这里可以输入公司 名 古 Powerpoint is a complete presentation graphic package it gives you everyt.
本节内容 Win32 API中的宽字符 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
第5章 文本与字体 2019/4/25 面向对象与可视化 程序设计 --Visual C++ 编程 主讲教师: 唐 龙教授 (计算机科学与技术系) 黄维通博士 (计算机与信息管理中心) 清 华 大 学 2001年2月 2019/4/25 Huang Weitong.
第六章 Excel的应用 一、Excel的单元格与区域 1、单元格:H8, D7, IV26等 2、区域:H2..D8, HS98:IT77
第4章 Excel电子表格制作软件 4.4 函数(一).
第九节 赋值运算符和赋值表达式.
iSIGHT 基本培训 使用 Excel的栅栏问题
_13简单的GDI绘图操作 本节课讲师——void* 视频提供:昆山爱达人信息技术有限公司 官网地址:
第11章 物件互動行為塑模.
Chapter 18 使用GRASP的对象设计示例.
Visual Basic程序设计 第13章 访问数据库
C++语言程序设计 C++语言程序设计 第八章 继承 C++语言程序设计.
本节内容 C语言的汇编表示 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
MFC控件 本节内容 视频提供:昆山爱达人信息技术有限公司 视频录制:yang 官网地址:
第六章 Excel的应用 五、EXCEL的数据库功能 1、Excel的数据库及其结构 2、Excel下的数据排序 (1)Excel的字段名行
C++语言程序设计 C++语言程序设计 第九章 类的特殊成员 第十一组 C++语言程序设计.
YOUR SUBTITLE GOES HERE
使用myApps平台配置Bug管理系统练习大纲
第8章 创建与使用图块 将一个或多个单一的实体对象整合为一个对象,这个对象就是图块。图块中的各实体可以具有各自的图层、线性、颜色等特征。在应用时,图块作为一个独立的、完整的对象进行操作,可以根据需要按一定比例和角度将图块插入到需要的位置。 2019/6/30.
使用ADO访问数据库 李宝智 BonizLee 课程 10564A
创建、启动和关闭Activity 本讲大纲: 1、创建Activity 2、配置Activity 3、启动和关闭Activity
本课内容 接下来的几节课,我们要利用C语言开发一些游戏 本节课开发一个俄罗斯方块游戏 游戏规则.
使用Fragment 本讲大纲: 1、创建Fragment 2、在Activity中添加Fragment
第六讲 酒店客房管理系统(二) 教育部“十二五”职业教育国家规划教材
顺序结构程序设计 ——关于“字符串”和数值.
手工编写第一个 MFC程序 本节内容 视频提供:昆山爱达人信息技术有限公司 视频录制:yang 官网地址:
Presentation transcript:

第七章 基于对话框的应用程序 7.1 Windows编程基础 7.2 基于对话框的应用程序 7.3 静态文本框 第七章 基于对话框的应用程序 7.1 Windows编程基础 7.2 基于对话框的应用程序 7.3 静态文本框 7.4 框架、单选按钮和复选框 7.5 列表框和组合框 7.6 滚动条 7.7 程序举例

7.1 Windows编程基础 Windows应用程序的特点: 主函数: 具有标准的图形用户界面。 WinMain() 具有与硬件无关的特性。 采用“消息传递,事件驱动”的运行机制。 主函数: WinMain() { } 使用API函数 Visual C++编写 Windows应用程序 使用MFC MFC: Microsoft Foundation Class 微软基础类 API: Application Programming Interface 应用程序接口

7.1.1 API编程 s 共有上千个标准的API函数 调用方法与调用C语言库函数类似 示例: 注意: 不是典型的Windows应用程序 典型WinMain具有固定结构,完成三个任务: 注册窗口类 创建并初始化窗口 创建消息循环

7.1.1 MFC编程 封装了大部分Windows API函数 200多个类: CObject类的派生类 非CObject派生类,如CPoint、CRect等 VC++: MFC类 应用程序向导 开发工具 MFC AppWizard(exe)创建三类程序: 基于对话框的应用程序 单文档界面(SDI)应用程序 多文档界面(MDI)应用程序

1. 建立应用程序框架; 2. 放置控件; 3. 设置控件属性; 4. 为控件连接变量; 5. 添加、编写消息处理函数 【例7.1】 7.2 基于对话框的应用程序 1. 建立应用程序框架; 2. 放置控件; 3. 设置控件属性; 4. 为控件连接变量; 5. 添加、编写消息处理函数 【例7.1】 属性设置 Member Variable name:m_e1 Category:Control Variable type:CEdit Member Variable name:m_e2 Category:Control Variable type:CEdit

添加、编写消息处理函数 void CTESTDlg::OnButton1() { // TODO: Add your control notification handler code here m_e1.SetSel(0,-1); // 选定编辑框m_e1中的所有内容 m_e1.Copy(); // 把编辑框m_e1中选定的内容复制到剪贴板 m_e2.SetSel(0,-1); // 选定编辑框m_e2中的所有内容 m_e2.Paste(); // 将剪贴板中内容粘贴到编辑框m_e2中, // 替换所有选定的内容 } void CTESTDlg::OnButton2() OnOK(); // 退出对话框程序

7.2.2 对话框应用程序框架 1.ResourceView 对话框界面是一种资源 双击IDD_TEST_DIALOG显示对话框设计界面 7.2.2 对话框应用程序框架 1.ResourceView 对话框界面是一种资源 双击IDD_TEST_DIALOG显示对话框设计界面 对话框ID 2.ClassView CAboutDlg:对应生成的版本信息对话框。 CTESTDlg:对话框类,从CDialog继承,设计的对话框。 CTESTApp:应用程序类,从CWinApp继承, 封装了初始化、运行、终止该程序的代码。 4.控件工具栏

7.3 静态文本框、命令按钮和编辑框 7.3.1 静态文本框 CStatic类 CButton类 CEdit类 对象:静态文本框 框架 CButton类 对象:命令按钮 单选按钮、复选框 CEdit类 对象:编辑框 7.3.1 静态文本框 一般不需要连接变量,不需要消息处理函数。 缺省ID为IDC_STATIC

7.3.2 命令按钮 7.3.3 编辑框 重要属性:标题属性 不需要连接变量。 重要消息:BN_CLICKED 1. 重要属性 Multiline:定义该编辑框为多行文本框。 Number:限定输入的字符只能是数字字符。 Border:为控件创建边界。 Read-only:编辑框成为只读的,禁止用户编辑。

1. 重要属性 Multiline:定义该编辑框为多行文本框。 Number:限定输入的字符只能是数字字符。 Border:为控件创建边界。 Read-only:编辑框成为只读的,禁止用户编辑。 2. 成员函数

从CWnd类继承的成员函数 (1)将编辑框中的内容复制出来 //复制到CString对象 void GetWindowText( CString& rString ) const; 示例: CString ch; m_e.GetWindowText(ch); //复制到数组 int GetWindowText( LPTSTR lpszStringBuf, int nMaxCount ) const; 示例: char ch[80]; m_e.GetWindowText(ch,80); (2)设置编辑框中的内容 void SetWindowText( LPCTSTR lpszString ); 示例: char ch[20]="abcdefg"; m_e.SetWindowText(ch);

3. 连接变量 Control:只能是CEdit类型 Value:CString int double等 注意:可以使用相应类型函数,但不能使用关于控件的函数 变量类型 编辑框与变量之间的内容更新

【例7.2】输入一元二次方程ax2+bx+c=0的系数a、b、c, 计算并输出两个根x1、x2 void CTESTDlg::OnCalc() { UpdateData(TRUE); double a=m_a; double b=m_b; double c=m_c; m_x1=(-b+sqrt(b*b-4*a*c)) /(2*a); m_x2=(-b-sqrt(b*b-4*a*c)) UpdateData(FALSE); } m_a (double) m_b (double) m_c (double) ID:Calc ID:Ok void CTESTDlg::OnOk() { OnOK(); } m_x1(double) m_x2(double)

【例7.3】字符串转换程序 转换规则为:大写字母转换成小写; 将小写字母转换成大写; 换行符和回车符不变; 其余字符转换为“*” 要求:每输入一个字符立即转换 选定: Multiline Vertical scroll Auto VScroll Want return m_e1 (Control ) EN_CHANGE 消息处理函数 选定: Multiline Vertical scroll Auto VScroll Read-only m_e2 (Control )

void CTESTDlg::OnChangeEdit1() { // TODO: Add your control notification handler code here char s[80]; m_e1.GetWindowText(s,80); for(int i=0;s[i]!='\0';i++) if (s[i]>='A' && s[i]<='Z') s[i]=s[i]+'a'-'A'; else if(s[i]>='a' && s[i]<='z') s[i]=s[i]+'A'-'a'; if (s[i]=='\n' || s[i]=='\r') s[i]=s[i]; s[i]='*'; m_e2.SetWindowText(s); }

7.4 框架、单选按钮和复选框 7.4.1 框架 7.4.2 单选按钮 作用:标识一组控件 不需要连接变量,不需要处理消息 。 缺省ID:IDC_STATIC 重要属性:标题属性 7.4.2 单选按钮 1.设计要求 同一组按钮:必须连续放入,中间不能插入其他控件 第一个按扭要选中Group属性 Member Variables选项卡中第一个按钮显示ID 2.重要属性 ID:如IDC_RADIO1 标题:右边显示的文本信息 Group:一组中第一个按钮选中该属性

3.消息 BN_CLICKED 4.重要函数 设定单选按钮选中状态 初始时使用 void CheckRadioButton(int nIDFirstButton, int nIDLastButton, int nIDCheckButton); nIDFirstButton:一组中第一个单选按钮的ID nIDLastButton:一组中最后一个单选按钮的ID nIDCheckButton:初始时设置为选中状态的单选按钮ID 判定是否被选定 UINT IsDlgButtonChecked( int nIDButton ) const; 返回值: true:选定 false:没有选定

【例7.4】当单击“确定”后,用AfxMessageBox函数显示有关信息 m_e(CString) 初始化 BOOL CTESTDlg::OnInitDialog() { ┆ CheckRadioButton(IDC_RADIO1, IDC_RADIO2, IDC_RADIO1); CheckRadioButton(IDC_RADIO3, IDC_RADIO5, IDC_RADIO3); };

消息处理函数 void CTESTDlg::OnButton1() { // TODO: Add your control notification handler code here UpdateData(TRUE); CString s; s=s+m_e; if(IsDlgButtonChecked(IDC_RADIO1)) s=s+"男"; else s=s+"女"; if(IsDlgButtonChecked(IDC_RADIO3)) s=s+"教授"; else if(IsDlgButtonChecked(IDC_RADIO4)) s=s+"副教授"; s=s+"讲师"; AfxMessageBox(s); }

7.4.2 复选框 1.重要属性 ID:如IDC_CHECK1 标题:右边显示的文本信息 2.连接变量 一般连接到Value类别BOOL类型的变量 3.消息 BN_CLICKED 【例7.5】当单击“确定”后,在右边的编辑框中显示有关信息 m_e1(CString) m_e2(CString) m_c1(BOOL) m_c2(BOOL) m_c3(BOOL)

void CTESTDlg::OnButton1() { // TODO: Add your control notification handler code here UpdateData(TRUE); CString s; s=m_e1; s=s+" 爱好:"; if (m_c1) s=s+"旅游 "; if (m_c2) s=s+"运行 "; if (m_c3) s=s+"音乐"; m_e2=s; UpdateData(FALSE); }

7.5 列表框和组合框 CListBox类 列表框 CComboBox类 组合框 7.5.1 列表框 m_l (CListBox )

1. 属性设置 2. 成员函数 Selection:选择方式 Single ── 单项选择 Multiple ── 多项选择,但是忽略Ctrl和Alt键。 Extended ── 允许使用Ctrl和Alt进行多项选择, None ── 禁止选择 Sort:排序 2. 成员函数 添加:int AddString( LPCTSTR lpszItem ); 示列:m_l. AddString("陈蓉");

删除:int DeleteString( UINT nIndex ); 示例:m_l. DeleteString (4); //删除第5个 说明:下标从0开始 获取当前选定项目的序号 int DeleteString( UINT nIndex ); 格式:int GetCurSel( ) const; 示例:int i=m_l.GetCurSel(); 获取指定项目 int GetText( int nIndex, LPTSTR lpszBuffer ) const; void GetText( int nIndex, CString& rString ) const; 示例: char s1[20]; CString s2;, m_l. GetText(4, s1); //读入数组 m_l. GetText(4, s2); //读入CString对象

修改:选定;选择“修改”;修改;选择“修改确定” 【例7.6】“添加”:将文本框中的内容添加到列表框 “删除”:删除列表框中选定的选项 修改:选定;选择“修改”;修改;选择“修改确定” m_e2(CString) m_l(CListBox )

初始化 BOOL CTESTDlg::OnInitDialog() { ┆ m_l.AddString("大学计算机基础"); m_l.AddString("C/C++程序设计"); m_l.AddString("VB程序设计"); m_l.AddString("软件技术基础"); } 消息处理函数 void CTESTDlg::OnButton1() // 添加 UpdateData(TRUE); m_l.AddString(m_e); m_e=""; UpdateData(FALSE); void CTESTDlg::OnButton2() //删除 {int n=m_l.GetCurSel(); m_l.DeleteString(n); } void CTESTDlg::OnButton3() //修改 {CString s; int n=m_l.GetCurSel(); m_l.GetText(n,s); m_e=s; UpdateData(FALSE); void CTESTDlg::OnButton4() //确定修改 {UpdateData(TRUE); m_l.InsertString(n,m_e); m_e="";

7.5.2 组合框 1. 属性设置 Ctrl+Enter键

2. 成员函数 编辑框和列表框的成员函数 GetText()不能用 int GetLBText( int nIndex, LPTSTR lpszText ) const; void GetLBText( int nIndex, CString& rString ) const; 3.组合框发出的消息 CBN_SELECTCHANGE:选项改变 CBN_EDITCHANGE:编辑框中文本改变 【例7.7】单击“确定”按钮,则用MessageBox显示选择的信息 m_c(CString) 选项在设计时输入 m_e(CString)

消息处理函数 void CTESTDlg::OnButton1() { // TODO: Add your control notification handler code here UpdateData(TRUE); CString s; s="品牌:"; s=s+m_c; s=s+"\n"; s=s+"数量:"; s=s+m_e; MessageBox(s); }

7.6 滚动条 m_s m_e (CScrollBar ) (int ) 列表框 m_s (CScrollBar ) m_e (int ) 【例7.8】最小值为0,最大值为100,单击滚动条两端箭头时滑块移动的增量值为2,单击滚动条中的空白处(滑块与两端箭头之间的区域)时滑块移动的增量值为10。另有一个只读的编辑框,显示了滑块当前位置所代表的值。

初始化 (1)设置最大值和最小值 void SetScrollRange(int nMinPos, int nMaxPos, BOOL bRedraw = TRUE); 最小值 最大值 TRUE时重画 (2)设置滑块的位置 int SetScrollPos( int nPos, BOOL bRedraw = TRUE ); 滑块的位置 TRUE时重画 BOOL CTESTDlg::OnInitDialog() { ┆ // TODO: Add extra initialization here m_s.SetScrollRange(0,100); m_s.SetScrollPos(50); m_e=50; //初始时,编辑框显示50。 UpdateData(FALSE); //更新编辑框显示的内容。 };

对话框却能接收到WM_HScroll(WM_Vscroll) 消息处理函数 滚动条没有消息 对话框却能接收到WM_HScroll(WM_Vscroll) void CTESTDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) { // TODO: Add your message handler code here and/or call default CDialog::OnHScroll(nSBCode, nPos, pScrollBar); }  pScrollBar:指向用户正在操作的滚动条。  nPos:滑块当前位置。  nSBCode:用户正在进行的操作

7.7 程序举例 【例7.9】选定了“日期”显示日期,选定“时间”显示时间。 CTime类封装了日期和时间 m_k1(BOOL) m_e1(CString) m_k1(BOOL) m_e2(CString) CTime类封装了日期和时间 静态成员GetCurrentTime()返回系统当前的日期和时间。

void CTESTDlg::OnCheck1() { UpdateData(TRUE); if(m_k1==TRUE) CTime time=CTime::GetCurrentTime(); //构造“YYYY.MM.DD”形式的日期字符串 m_e1=time.Format("%Y.%m.%d"); } else m_e1=""; UpdateData(FALSE); void CTESTDlg::OnCheck2() { UpdateData(TRUE); if(m_k2==TRUE) CTime time=CTime::GetCurrentTime(); //构造“HH.MM.SS”形式的时间字符串 m_e2=time.Format("%I.%M.%S"); } else m_e2=""; UpdateData(FALSE);

【例7.10】单击“确定”按钮后,在列表框中显示选择的信息。 CTime类封装了日期和时间 静态成员GetCurrentTime()返回系统当前的日期和时间。

初始化 组合框的选项在设计时输入 BOOL CTESTDlg::OnInitDialog() { ┆ CheckRadioButton(IDC_RADIO1, IDC_RADIO2, IDC_RADIO1); m_sc.SetScrollRange(0,30); m_sc.SetScrollPos(10); m_e2=10; UpdateData(FALSE); } 滚动条消息处理函数 为了不影响其它控件,应开始处添加命令:UpdateData(TRUE);

命令按钮的消息处理函数 void CTESTDlg::OnButton1() { UpdateData(TRUE); //用各控件中的值更新对应的连接变量 m_l.ResetContent(); //删除列表框中所有的内容 m_l.AddString(m_e1); if(IsDlgButtonChecked(IDC_RADIO1)) m_l.AddString("男"); else m_l.AddString("女"); if (m_c1)m_l.AddString("旅游"); if (m_c2)m_l.AddString("运动"); if (m_c3)m_l.AddString("音乐"); CString s; s.Format("%d",m_e2); // m_e2是int类型,将它转换成字符串 m_l.AddString(s); m_l.AddString(m_conb); }