Presentation is loading. Please wait.

Presentation is loading. Please wait.

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

Similar presentations


Presentation on theme: "第七章 基于对话框的应用程序 7.1 Windows编程基础 7.2 基于对话框的应用程序 7.3 静态文本框"— Presentation transcript:

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

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

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

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

5

6 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

7 添加、编写消息处理函数 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(); // 退出对话框程序

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

9

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

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

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

13 从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);

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

15 【例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)

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

17 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); }

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

19 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:没有选定

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

21 消息处理函数 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); }

22 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)

23 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); }

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

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

26 删除: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对象

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

28 初始化 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="";

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

30 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)

31 消息处理函数 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); }

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

33 初始化 (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); //更新编辑框显示的内容。 };

34 对话框却能接收到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:用户正在进行的操作

35

36

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

38 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);

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

40 初始化 组合框的选项在设计时输入 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);

41 命令按钮的消息处理函数 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); }


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

Similar presentations


Ads by Google