第5章 文本与字体 2019/4/9 面向对象与可视化 程序设计 --Visual C++ 编程 主讲教师: 唐 龙教授 (计算机科学与技术系) 黄维通博士 (计算机与信息管理中心) 清 华 大 学 2001年2月 2019/4/9 Huang Weitong
第5章 文本与字体 2019/4/9 第十四章 按钮类与列表框类及其应用 2019/4/9 Huang Weitong
内容提要 按钮控件及其方法 列表框控件及其方法 按钮控件的应用 列表框控件的应用 2019/4/9
第5章 文本与字体 2019/4/9 §14.1. 按钮控件 2019/4/9 Huang Weitong
1. 常见的按钮控件 复选框(Checkboxes) 单选按钮(Radiobuttons) 下压式按钮(Pushbuttons) 第5章 文本与字体 2019/4/9 1. 常见的按钮控件 复选框(Checkboxes) 常用于只有两种完全相反状态的情况下 单选按钮(Radiobuttons) 适用于同一组属性相同的数据中选一个数据 下压式按钮(Pushbuttons) 适用于消息的发送 分组框(Group boxes) 没有太多的操作只是在窗口中划分区域范围 Huang Weitong
2.Cbutton类和CBitmapButton类 第5章 文本与字体 2019/4/9 2.Cbutton类和CBitmapButton类 Cbutton类是CWnd类直接派生的。 CBitmapButton类又是Cbutton类直接派生的。 在AfxWin.h中定义了Cbutton类。 Huang Weitong
3. Cbutton类样式和方法 按钮不仅继承了一般的窗口式样,还可用winuser.h中所定义的按钮特有的式样。 2019/4/9
3. Cbutton类样式和方法 2019/4/9
2019/4/9
4.CBitmapButton类的方法 LoadBitmaps()为CBitmapButton对象附上位图,最多可有4个位图,这些位图从资源文件中读取; AutoLoad()将对话框按钮和CBitmapButton()对象联系起来; SizeToContent() 用于调整位图的尺寸大小。 DrawItem()自动在一个按钮的用户区上画上位图,即用户可以自定义按钮。 2019/4/9
第5章 文本与字体 2019/4/9 §14.2. 列表框控件 2019/4/9 Huang Weitong
1. 列表框的用处 常用于从众多数据中选某一项,如在对话框里,用列表框选择文件名、目录等。 有预定义的键盘接口,实现交互操作。 可用盘上的方向(箭头)键和PageUp或PageDown键,在列表框中进行数据的选择; 设置适当的样式后,可与Shift或Ctrl键组合用。 2019/4/9
2. CListBox类及其样式 CListBox类是CWnd类派生。 CListBox类控件有多种可用的样式。 MFC中CListBox类的层次结构 2019/4/9
2019/4/9
ON_Message(Control ID,ClassMethod) 消息映像项使用下面的基本格式: ON_Message(Control ID,ClassMethod) 所有者类声明中的方法原型 afx_msg void ClassMethod(); 发送消息的列表框 控件的子窗口标识 处理消息的父 类方法的名字 2019/4/9
3. CListBox类的方法 通用方法 单项选择特定方法 多项选择特定方法 字符串指定的方法 虚拟方法 2019/4/9
(1) 通用方法 通用方法用来获得和设置列表框数据的值和属性, 所有的CListBox列表框,包括单选列表框、多选列表框和自绘列表框等都有这些方法。 2019/4/9
列表框的默认模式是单选项模式; 所有的通用方法均适用于单选项列表框。 只有两个类方法专门处理单选项列表框 (2) 单项选择特定方法 GetCurSel()获得当前选择列表框项的下标(基于0) SetCurSel()选择列表框字符串。 2019/4/9
(3) 多项选择特定方法 特定多项选择列表框的CListBox类方法 GetAnchorIndex() 获取当前定位项的下标 扩展了标准单选列表框 的能力,解决了在一个 列表框中选择多项带来 的复杂性 特定多项选择列表框的CListBox类方法 GetAnchorIndex() 获取当前定位项的下标 GetCaretIndex() 获取具有光标矩形的项的下标 GetSelCount() 获取当前所选的项的数目 GetSelItems() 将所有当前被选项下标放入一整型数组缓冲区 SelItemRange() 切换多选择列表框项范围的选择状态 SetAnchorIndex() 在框中扩充选择设置开始(定位)项 SetCaretIndex() 在框中指定下标项设置光标矩形 SetSel() 在框中切换项目的选择状态 2019/4/9
(4) 字符串指定的方法 AddString() 加入一个字符串 DeleteString() 删除一个字符串 CListBox指定列表框中字符串的方法 AddString() 加入一个字符串 DeleteString() 删除一个字符串 Dir() 从当前目录加文件名放入列表框 FindString() 搜索一字符串 FindStringExact() 搜索第一个与指定字符串匹配的字符串 InsertString() 在指定下标处插入一字符串 ResetContent() 清除列表框中的所有项 SelectString() 在单选列表框中搜索并选择一字符串 2019/4/9
(5) 虚拟方法 CListBox类还声明了几个虚拟方法,可从CListBox类中派生一些类替换到你的类中。 CharToItem() 为自绘列表框(没有字符串)处理WM-CHAR CompareItem() 取得到排序的自绘列表框中新项的位置 DeleteItem() 从自绘列表框中删除一项时 DrawItem() 必要时,重绘时自绘列表框项 MeasureItem() 创建一自绘列表框时,决定列表框的维数 VKeyToItem() 处理具有LBS_WANTKEYBOARDINPUT样式 的列表框的WM_KEYDOWN 2019/4/9
4. 创建和初始化CListBox对象 构造函数CListBox::CListBox()和关键字new为CListBox对象分配一个实例;并返回指向该对象的指针: ClistBox *pMyListBox = new CListBox; CListBox::Create()初始化指针pMyListBox。初始化CListBox对象并赋于它一个Windows列表框, 设置其参数和样式。 2019/4/9
4. 创建和初始化CListBox对象 BOOL Create ( DWORD dwStyle, //列表框控件的窗口样式 CListBox::Create() 声明如下: BOOL Create ( DWORD dwStyle, //列表框控件的窗口样式 const Recy& rect,//控件的大小和位置矩形 CWnd* pParentWnd,//指向控件所有者的指针 UINT nID //父窗口标识 ); 2019/4/9
第5章 文本与字体 2019/4/9 §14.3. 按钮控件及列表框控件的应用 2019/4/9 Huang Weitong
[例14-1]交互界面具有三个分组框,分组框含有按钮和列表框。 2019/4/9
1.应用程序的可视化编程 #define IDC_Age1_RADIO 1015 #define IDC_Age2_RADIO 1016 同一组单选按钮 必须一个接一个 地放进对话框中 中间不能中断 单选按钮组的ID都为IDC_STATIC,说明不同的控件可以有相同的ID。因为单选按钮组只是用来显示一组内容的属性,无具体操作 #define IDC_Age1_RADIO 1015 #define IDC_Age2_RADIO 1016 #define IDC_Age3_RADIO 1017 #define IDC_Boy_RADIO 1023 #define IDC_Girl_RADIO 1024 对于成组的单选按钮,只在每组的第一个按钮的属性窗口中选中Group 2019/4/9
2.应用程序的代码编程部分 2019/4/9
3. 给有关按钮、编辑框等控件连接方法 2019/4/9
4.为复选框IDC_TIME_CHECK添加代码 void CSELECTBOXDlg::OnTimeCheck() { UpdateData(TRUE); if(m_TimeCheck==TRUE) { CTime tNow; tNow=CTime::GetCurrentTime(); CString sNow=tNow.Format("%H:%M:%S"); m_TimeEdit.SetSel(0,-1); m_TimeEdit.ReplaceSel(sNow); } else { m_TimeEdit.SetSel(0,-1); m_TimeEdit.ReplaceSel(""); UpdateData(FALSE); %I是小时的表示法(01到12) %m是分的表示法(00到59) %d是秒的表示法(00到59) 2019/4/9
5.给Enable按钮添加代码 void CSELECTBOXDlg::OnEnableButton() { GetDlgItem(IDC_DATE_CHECK)->EnableWindow(TRUE); GetDlgItem(IDC_TIME_CHECK)->EnableWindow(TRUE); m_DateEdit.EnableWindow(TRUE); m_TimeEdit.EnableWindow(TRUE); } 2019/4/9
6.为Disable按钮连接代码 void CSELECTBOXDlg::OnDisableButton() { GetDlgItem(IDC_DATE_CHECK)->EnableWindow(FALSE); GetDlgItem(IDC_TIME_CHECK)->EnableWindow(FALSE); m_DateEdit.EnableWindow(FALSE); m_TimeEdit.EnableWindow(FALSE); } 2019/4/9
7.为Show Again按钮添加代码 void CSELECTBOXDlg::OnShowButton() { GetDlgItem(IDC_DATE_CHECK)->EnableWindow(SW_SHOW); GetDlgItem(IDC_TIME_CHECK)->EnableWindow(SW_SHOW); GetDlgItem(IDC_DATE_EDIT)->EnableWindow(SW_SHOW); m_DateEdit.ShowWindow(SW_SHOW); GetDlgItem(IDC_TIME_EDIT)->EnableWindow(SW_SHOW); m_TimeEdit.ShowWindow(SW_SHOW); } 2019/4/9
(第十四章) 完 2019/4/9
第13-14章课后练习题 编写一个程序,用含有按钮和滚动条等控件的三个分组框,实现功能包括: [注]5月28日前完成 控制显示日期和时间; 选择加或减运算,并显示数据; 滚动条输入数据; [注]5月28日前完成 2019/4/9