已阅读5页,还剩43页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第10章 基本控件使用(二),第10章 基本控件使用(二),10.1 按钮类 10.2 列表框类 10.3 应用实例,10.1 按钮类,按钮是一个矩形窗口,通常包含一个标题用来说明按钮的作用。 CButton(按钮控件)类是从CWnd类继承下来的。,10.1.1 按钮类的结构,VC+在Afxwin.h中定义了CButton类的结构,结构代码:,class CButton : public CWnd DECLARE_DYNAMIC(CButton) public: CButton(); / Constructors BOOL Create(LPCTSTR lpszCaption, DWORD dwStyle, const RECT,#if (WINVER = 0x400) HICON SetIcon(HICON hIcon); HICON GetIcon() const; HBITMAP SetBitmap(HBITMAP hBitmap); HBITMAP GetBitmap() const; HCURSOR SetCursor(HCURSOR hCursor); HCURSOR GetCursor(); #endif / Overridables (for owner draw only) virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct); / Implementation public: virtual CButton(); protected: virtual BOOL OnChildNotify(UINT, WPARAM, LPARAM, LRESULT*); ;,CButton类中按钮特有的样式,10.1.2 按钮类的方法,按钮类(CButton类)提供了如下的访问方法。,10.2 列表框类,CListBox类在MFC类层次结构中的位置。,10.2.1 列表框类的结构,结构见教材P241,列表框控件可用的样式:,列表框类的结构,表10-4显示了消息映像项,它用于处理列表框通知。,10.2.2 列表框类的方法,1通用 方法,2单选列表框的方法,列表框的默认模式是单选项模式;所有的通用方法均适用于单选项列表框。,3多选列表框的方法,方法 说明 GetAnchorIndex() 获得多项选择列表框中当前定位项的下标 GetCaretIndex() 获得多项选择列表框中具有光标矩形的项的下标 GetSelCount() 获得多项选择列表框中当前所选的项的数目 GetSelItems() 将所有当前被选列表框项下标放入一整型数组缓冲区 SelItemRange() 切换多选择列表框项范围的选择状态 SetAnchorIndex() 在多项选择列表框中扩充选择设置开始(定位)项 SetCaretIndex() 在多项选择列表框中指定下标项设置光标矩形 SetSel() 在多项选择列表框中切换项目的选择状态,多选项列表框扩展了 标准单项选择列表框 的能力,可以解决在 一个列表框中选择多 项带来的复杂性,4特定字符串方法,方法 说明 AddString() 在列表框中加入一个字符串 DeleteString() 从列表框中删除一个字符串 Dir() 从当前目录加文件名放入列表框 FindString() 在列表框中搜索一字符串 FindStringExact() 在列表框中搜索第一个与指定搜索字符串匹配的字符串 InsertString() 在列表框指定下标处插入一字符串 ResetContent() 清除列表框中的所有项 SelectString() 在单选列表框中搜索并选择一字符串,适用于单选择和多选择两种模式的列表框,这些方法处理列表框中的字符串项。,5虚拟方法,CListBox类还声明了几个虚拟方法,编程时可从CListBox类中派生一些类替换到应用程序的类中。,方法 说明 CharToItem() 可替换此方法为自绘列表框(没有字符串)处理WM_CHAR CompareItem() 由MFC调用以得到排序的自绘列表框中的新项的位置 DeleteItem() 当用户从自绘列表框中删除一项时MFC调用此方法 DrawItem() 当确定自绘列表框项必须重绘时MFC调用此方法 MeasureItem() 当一自绘列表框被创建时MFC调用此方法来决定列表框的维数 VKeyToItem() 可替换此方法,处理具有LBS_WANTKEYBOARDINPUT样 式的列表框的WM_KEYDOWN消息,10.3 按钮类与列表框类的应用实例,例10-1 编写应用程序。,1应用程序的界面设计,对于成组的单选按钮,只在每组的第一个按钮的属性中选中Group设置,在Sex Selecting组中只有Boy单选按钮选中Group属性,在Age Range组中只有“20”单选按钮选中Group属性,设计过程中,同一组单选按钮必须一个接一个地放进对话框中,中间不能插入其它的控件,顺序放置的原因:Visual C按照放入对话框中的先后顺序,给每个控件赋一个ID值,所以控件的ID值是连续的。 Group属性的控件之间的控件为一组。 从resource.h的资源头文件中可得到ID值 #define IDC_SHOW_BUTTON 1006 #define IDC_HIDE_BUTTON 1007 #define IDC_Boy_RADIO 1008 #define IDC_Girl_RADIO 1009 #define IDC_Age1_RADIO 1010 #define IDC_Age2_RADIO 1011 #define IDC_Age3_RADIO 1012 #define IDC_Show_Sex_Age_BUTTON 1013 #define IDC_Result_EDIT 1014,2应用程序的代码编程部分 1) 给各个控件连接变量(什么情况下需要连接变量?),2) 与有关按钮、编辑框等控件的连接方法( 什么情况下需要定义方法?),3) 方法的实现 (3.1) 给复选框IDC_DATE_CHECK添加代码,void CSELECTBOXDlg :OnDataCheck() UpdateData(TRUE); /以当前的屏幕显示内容更新控件的变量 if(m_DateCheck=TRUE) /若选中Date则在编辑框中显示日期 CTime tNow ; /创建CTime的对象 tNow=CTime:GetCurrentTime(); /获取当前系统日期 CString sNow=tNow.Format(“%y.%m.%d“); / %y.%B.%d /格式化,并将时间值转换为字符串类型 m_DateEdit.SetSel(0,-1); /选择编辑框中的全部内容 m_DateEdit.ReplaceSel(sNow); /将编辑框替换为系统日期 else m_DateEdit.SetSel(0,-1); m_DateEdit.ReplaceSel(“ “); /编辑框显示为空 UpdateData(FALSE); /将控件的值更新屏幕 ,void CSELECTBOXDlg :OnTimeCheck() UpdateData(TRUE); /以当前的屏幕显示内容更新控件的变量 if(m_TimeCheck=TRUE) /若选中Time则在编辑框中显示时间 CTime tNow; /创建CTime的对象 tNow=CTime:GetCurrentTime(); /获取当前系统时间 CString sNow=tNow.Format(“%I:%M:%S”); / 24小时:%H:%M:%S m_TimeEdit.SetSel(0,-1); m_TimeEdit.ReplaceSel(sNow); /将编辑框替换为系统时间 else m_TimeEdit.SetSel(0,-1); m_TimeEdit.ReplaceSel(“); UpdateData(FALSE); ,函数Format的参数%I是时间的小时表示法(0112),%m是分的表示法(0059),%d是秒的表示法(0059),(3.2)为复选框IDC_TIME_CHECK添加代码,void CSELECTBOXDlg :OnEnableButton() GetDlgItem(IDC_DATE_CHECK)-EnableWindow(TRUE); /使复选框可选,函数返回指向对象的指针函数 GetDlgItem(IDC_TIME_CHECK)-EnableWindow(TRUE); m_DateEdit.EnableWindow(TRUE); /使编辑框可用 /也可表示成: GetDlgItem(IDC_DATE_EDIT)-EnableWindow(TRUE); m_TimeEdit.EnableWindow(TRUE); /也可表示成:GetDlgItem(IDC_TIME_EDIT)-EnableWindow(TRUE); ,CWnd类的成员函数return:A pointer to the given control or child window.,关联变量为BOOL型,关联变量为CEdit型,(3.3) 给Enable按钮添加代码,void CSELECTBOXDlg :OnDisableButton() /使复选框不可选 GetDlgItem(IDC_DATE_CHECK)-EnableWindow(FALSE); GetDlgItem(IDC_TIME_CHECK)-EnableWindow(FALSE); /使编辑框不可用 m_DateEdit.EnableWindow(FALSE); m_TimeEdit.EnableWindow(FALSE); ,(3.4) 为Disable按钮连接代码,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); ,基类CWnd的成员函数,(3.5) 为Show Again按钮添加代码,void CSELECTBOXDlg :OnHideButton() /使编辑框不可见 GetDlgItem(IDC_DATE_CHECK)-EnableWindow(SW_HIDE); GetDlgItem(IDC_TIME_CHECK)-EnableWindow(SW_HIDE); m_DateEdit.ShowWindow(SW_HIDE); /表示为:m_DateEdit.ShowWindow(SW_SHOW); m_TimeEdit.ShowWindow(SW_HIDE); /表示为: m_TimeEdit.ShowWindow(SW_SHOW); ,基类CWnd的成员函数,(3.6) 为Hide the Clock Setting按钮添加实现代码,void CSELECTBOXDlg :OnShowSexAgeBUTTON() char sEdit50; /声明字符串变量,用来存放显示在编辑框中的字符 int iSexRADIO; int iAgeRADIO; /表示选中按钮的状态 /单选按钮组的状态,返回被选按钮的ID iSexRADIO=GetCheckedRadioButton(IDC_Boy_RADIO,IDC_Girl_RADIO); if(iSexRADIO=IDC_Boy_RADIO) strcpy(sEdit, “The boys age is“); if(iSexRADIO=IDC_Girl_RADIO) strcpy(sEdit,“The girls age is“); /复制字符串到变量中 iAgeRADIO=GetCheckedRadioButton(IDC_Age1_RADIO,IDC_Age3_RADIO); if(iAgeRADIO=IDC_Age1_RADIO) strcat(sEdit,“ great than 20“); if(iAgeRADIO=IDC_Age2_RADIO) strcat(sEdit,“ between 15 and 20“); if(iAgeRADIO=IDC_Age3_RADIO) strcat(sEdit,“ less than 15“); m_ResultEdit.SetSel(0,-1); m_ResultEdit.ReplaceSel(sEdit); /选中并替换 ,第一个,最后一个,(3.7) 给Show_the_Sex_and_Age按钮添加代码,void CSELECTBOXDlg :OnShowComboButton() UpdateData(TRUE); char sCourseEdit30;char sRecordEdit15; /编辑框中显示course,record int iCourseRadio; /声明选中的课程 iCourseRadio=GetCheckedRadioButton(IDC_ENGLISH_RADIO,IDC_NATURE_RADIO); /单选按钮组的状态,返回被选按钮的ID if(iCourseRadio=IDC_ENGLISH_RADIO) strcpy(sCourseEdit,“English record is “); if(iCourseRadio=IDC_COMPUTER_RADIO) strcpy(sCourseEdit,“Computer record is “); if(iCourseRadio=IDC_NATURE_RADIO) strcpy(sCourseEdit,“Natural record is “); m_Record.GetWindowText(sRecordEdit,15); /获取列表框中选中的内容 strcat(sCourseEdit, “ “); /字符串连接空格 strcat(sCourseEdit,sRecordEdit); /字符串连接分数 m_ComboEdit=_T(sCourseEdit); UpdateData(FALSE); /显示更新 ,(3.8) 为Show_Combo按钮添加代码,类型为CEdit 时,可替换为 m_ComboEdit.SetSel(0,-1);m_ComboEdit.ReplaceSel(sCourseEdit);,void CSELECTBOXDlg :OnExitButton() OnOK(); ,(3.9) 给OnExitButton()方法添加代码,BOOL CSELECTBOXDlg :OnInitDialog() CDialog:OnInitDialog(); / TODO: Add extra initialization here /初始化选中的按钮 CheckRadioButton(IDC_Boy_RADIO,IDC_Girl_RADIO,IDC_Boy_RADIO); CheckRadioButton(IDC_Age1_RADIO,IDC_Age3_RADIO,IDC_Age2_RADIO); UpdateData(FALSE); /将控件的值更新屏幕 m_English=0; /变量m_English的类型为int,设置初始选中第一个单选框 m_Record.AddString(“85“); m_Record.AddString(“90“); m_Record.AddString(“95“); m_Record.SelectString(-1, “95“); /默认显示的初始值 UpdateData(FALSE); /将控件的值更新屏幕 return TRUE; ,第一个,最后一个,选中的按钮ID,添加列表框中的选项,4) 初始化单选按钮,10.4 对话框通用控件,大部分控件都是在对话框中使用的,无论是基于对话框的应用程序还是Doc/View结构的应用程序,控件通常是放在对话框中的。包括: 1. Picture控件 2. Spin控件 3. Progress控件 4. Slider控件 5. Date Time Picker控件 本节将以一个名为“Ctrl”的基于对话框的应用程序来介绍各种Windows通用控件的使用。,1. Picture控件的使用,(1)分隔线 将Picture控件拖放到对话框中 【Type】属性选择“Frame” 【Color】属性选择“Etched” 将控件拖到最细,此时Picture控件象一条分隔线,Picture控件的使用,(2) 图片 将【Type】属性设置为“Icon”或者“Bitmap” 设置【Image】属性为相应的资源ID,显示图标或位图。,在资源中导入一位图,命名为IDB_BITMAP_DOT,设置Picture控件【Type】为“Bitmap”,【Image】为“IDB_BITMAP_DOT”,2. Spin控件的使用,Spin按钮控件提供了一对箭头,用户通过点击箭头可以微调该控件所表示的数值。,Spin控件通常和tab order位于它之前的控件成对使用。通过CSpinButtonCtrl的GetBuddy方法可获得与之配对的控件,表示Spin控件的是CSpinButtonCtrl类,CSpinButtonCtrl类常用成员,在对话框中拖放一个Edit控件,设为只读,然后拖放一个Spin控件紧挨着刚才的Edit控件,两个控件的ID都使用默认值,设置Spin控件的【Allignment】属性为“Right”,选中【Auto buddy】属性,BOOL CEx9_9Dlg:OnInitDialog() / TODO: Add extra initialization here CSpinButtonCtrl* pSpin =(CSpinButtonCtrl*) GetDlgItem(IDC_SPIN1); pSpin-SetRange(0, 100); /设置Spin的范围是0100 pSpin-SetPos(50); /当前位置是50 pSpin-GetBuddy()-SetWindowText(“5.0“); /设置配对控件的显示值 return TRUE; ,在对话框中添加WM_VSCROLL消息(SPIN控件上下滚动消息)的响应:,void CEx9_9Dlg:OnVScroll() /若操作对象为SPIN控件 if (pScrollBar-GetDlgCtrlID() = IDC_SPIN1) CString strValue; /创建字符串对象 strValue.Format(“%3.1f“, (double) nPos / 10.0); /格式化输出内容 (CSpinButtonCtrl*)pScrollBar)-GetBuddy()-SetWindowText(strValue); /获取伙伴编辑框进行显示 CDialog:OnVScroll(nSBCode, nPos, pScrollBar); ,保证微调步长为0.1,3. Progress控件的使用,进度控件用来指示长时间操作的进展程度。包括从左到右使用系统高亮颜色显示渐进过程的矩形。 MFC中表示进度控制的是CProgressCtrl类 。,进度条有一个范围和当前位置。范围表示整个操作的持续时间,当前位置表示当前进行的位置,进度条根据当前位置来判断进行的百分比,并显示进度 。,添加一个Progress控件,保持默认ID,设置Smooth属性。在旁边添加一个按钮,设置ID为“IDC_BUTTON_START”,Caption为“开始”,在OnInitDialog中添加如下代码: CProgressCtrl* pProg =(CProgressCtrl*) GetDlgItem(IDC_PROGRESS1); /设置指向进度条的指针 pProg-SetRange(0, 100); /设置范围为0100 pProg-SetPos(50); /设置当前位置为50,为“开始”按钮添加点击事件实现代码: void CEx9_9Dlg:OnButtonStar() CProgressCtrl* pProg=(CProgressCtrl*)GetDlgItem(IDC_PROGRESS1); pProg-SetPos(0); /设置初始值为0 SetTimer(1000,100,NULL); /启动计时器,自动调用OnTimer()函数 /计时器1000,100毫秒为单位,在CCtrlDlg中添加对WM_TIMER消息的响应函数: void CEx9_9Dlg:OnTimer(UINT nIDEvent) if(nIDEvent = 1000) /判断计时器 CProgressCtrl* pProg = (CProgressCtrl*) GetDlgItem(IDC_PROGRESS1); pProg-SetPos(pProg-GetPos()+1); /前进一步 if(pProg-GetPos() = 100) /判断是否达到最大值 KillTimer(nIDEvent); /终止计时器 AfxMessageBox(“进行完毕“); CDialog:OnTimer(nIDEvent); ,每隔0.1秒,进度条前进一步,4. Slider控件的使用,滑块控件可使用户通过拖动滑块快速获得指定的数据。当用户滑动滑块时,控件将发送消息来指示变化。 滑块控件适用于选择一系列离散值或一段连续范围,对话框中增加一个Slider控件,设置Point属性为“Bottom/Right”; 然后在旁边添加一个Static控件,ID设置为IDC_STATIC_SLIDER。该控件用来显示滑块的当前位置。,在OnInitDialog函数中添加如下代码: CString strText1; /创建字符串对象 /获取当前操作的控件指针 CSliderCtrl* pSlide1 =(CSliderCtrl*) GetDlgItem(IDC_SLIDER1); pSlide1-SetRange(0, 100); /设置范围为0100 pSlide1-SetPos(50); /设置初始值 strText1.Format(“%d“, pSlide1-GetPos(); /格式化 SetDlgItemText(IDC_STATIC_SLIDER, strText1); /在静态文本
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 信息安全管理员安全意识强化知识考核试卷含答案
- 煤层气排采集输工安全综合知识考核试卷含答案
- 个人信息保护合规管理员安全文化考核试卷含答案
- 涂胶工班组管理知识考核试卷含答案
- 农机驾驶操作员持续改进测试考核试卷含答案
- 摩托车装调工安全管理水平考核试卷含答案
- 2026年航天推广环保治理合同
- 2026年广告承运外包服务协议
- 2026年工程运营工业互联网协议
- 2026年货架租赁合同
- 《建筑施工承插型盘扣式钢管脚手架 选用技术标准》
- 幼儿园大班语言《小汽车和小笛子》课件
- 浙江国企招聘2025宁波市水务环境集团股份有限公司招聘35人笔试参考题库附带答案详解
- 配电室电缆穿管施工方案
- 树立良好的班风学风课件
- 天然气管道穿越河流施工专项方案
- 合成孔径雷达(SAR)伪装目标特性剖析与伪装效果量化评估体系构建
- 装配式管廊技术应用与实践汇报
- DB5301∕T 102-2024 应用软件定制开发成本测算指南
- 2025年内江市中考地理试题(含答案解析)
- 2025护理分级新标准
评论
0/150
提交评论