计算机二级C语言学习第9章.ppt
《计算机二级C语言学习第9章.ppt》由会员分享,可在线阅读,更多相关《计算机二级C语言学习第9章.ppt(164页珍藏版)》请在三一办公上搜索。
1、1,第9章 Windows 标准控件在可视化编程中的应用,2,控件是Windows 图形用户界面的主要组成部分之一,用户通过操作控件对象完成与应用程序之间的交互。控件的使用集中体现了Windows 系统面向对象的特点,3,9.1概述,控件工具栏,控件接受的消息主要有单击、双击和字符输入等,打开对话框编辑器就会出现控件工具栏(231页图),4,5,9.2 按钮控件及其应用,按钮控件,普通按钮圆按钮复选框按钮组框按钮自绘按钮,6,按钮控件消息:ON_BN_CLICKEDON_BN_DBLCLICKEDON_COMMAND,两个类似,按钮是最常见的控件之一,复选框,单选按钮,下压式按钮,分组框,常用
2、于只有两种完全相反状态的情况下,适用于同一组属性相同的数据中选一个数据,适用于消息的发送,没有太多的操作只是在窗口中划分区域范围,7,9.2.1 按钮控件的创建过程,CButton类的控件可以用对话框资源模板来创建,可以通过CButton类的成员函数Create函数来创建,该函数的声明为:BOOL Create(LPCTSTR lpszCaption,/指定了按钮显示的正文 DWORD dwStyle,/按钮的风格(202页表9-3)const RECT&rect,/按钮的位置和大小 CWnd*pParentWnd,/指向父窗口,UINT nID/按钮的ID),8,9,GetCheck()Se
3、tCheck()GetBitmap()SetBitmap()GetButtonStyle()SetButtonStyle()GetCursor()SetCursor()GetIcon()SetIcon()GetState()SetState(),CButton类的成员函数,这些函数(202页表9-4)是类的成员函数,所以调用的语句应该是对象.函数(参数)Set开头的有参数Get开头的无参数,10,CButton类是CWnd类的派生类,在知道按钮ID的前提下,还可使用与按钮有关的CWnd成员函数来设置或查询按钮状态,当然调用的语句也应该是 对象.函数(参数),CheckDlgButtonChec
4、kRadioButtonGetCheckedRadioButtonIsDlgButtonCheckedGetWindowTexGetWindowTextLengthSetWindowText,11,(1)CheckDlgButton(int nIDButton,UNIT nCheck)该函数用来设置按纽的选择状态。其中:nIDButton是按纽的ID。nCheck取值0表示按纽未被选择,1表示按纽被选择,2表示按纽处于不确定状态。(2)CheckRadioButton(int nIDFirstButton,int nIDLastButton,int nIDCheckButton)该函数用来选择
5、组中的一个单选按纽。其中:nIDFirstButton指定按纽组中第一个按纽的ID。nIDLastButton指定按纽组中最后一个按纽的ID。int nIDCheckButton指定要选择的按纽的ID,12,(3)GetCheckedRadioButton(int nIDFirstButton,int nIDLastButton)该函数用来获得一组单选按纽中被选中按纽的ID。其中:nIDFirstButton指定按纽组中第一个按纽的ID。nIDLastButton指定按纽组中最后一个按纽的ID。(4)IsDlgButtonChecked(int nIDButton)该函数返回复选框或单选按纽的
6、选择状态。返回0表示按纽未被选择,1表示按纽被选择,2表示按纽处于不确定状态(仅用于复选框)。,13,(5)GetWindowTex获得正文GetWindowTextLength获得正文长度SetWindowText设置正文例如 m_btn2是一个按钮对象m_btn2.SetWindowText(“按钮已被按下!”);,14,MFC还提供了一个CBitmapButton的类,允许用户以图标的方式显示按钮,它是在CButtong下派生的,MFC调用方法DrawItem()在按钮上绘制位图,LoadBitmaps()方法为一个CBitmapButton对象附上位图,自定义按钮,15,9.2.2 按
7、钮控件示例,16,控件在可视化编程中的应用主要步骤:1、创建基于对话框项目 2、设计界面3、添加成员变量4、添加消息响应代码前两步也叫做应用程序的可视化编程部分后两步也叫做应用程序的代码编程部分,17,1、创建基于对话框项目(1)使用AppWizard创建“MFC AppWizard(exe)”类型项目。设项目名为MY(2)选择项目类型时选择“Dialog based”类型的应用程序,资源语言选择中文,否则界面上的中文无法正确显示。(3)点击Finish按钮,VC在工作台中显示可以进行可视化编辑的IDD_ MY _DIALOG对话框,同时,出现控件工具栏窗口,(或者在ResourceView选
8、项卡中打开Dialog资源组,然后双击IDD_ MY _DIALOG)。然后将对话框上默认的控件(一个Exit按纽和Cancel按纽)删除干净。,18,2、设计界面(1)在控件工具栏上击某控件(选一个)(2)在对话框中相应位置击一下或拖出来一个控件,把鼠标停在编辑框控件上,即可显示该控件的类型,控件工具栏提供了VC中所有可建立的控件类型,19,Group属性,(3)在新控件上右击,快捷菜单中选属性,就可以设置各控件的属性:Caption属性、Group属性和 Auto属性,20,对于radio和check类型的按钮,如果设置了Auto风格,则开发者不需要响应按钮的点击消息,按钮会自动响应的。如
9、果没有设置Auto风格,则开发者需要响应按钮的点击消息,并自行设置按钮的状态。对于radio类型的按钮,每个设置Group风格的按钮和接下来没有设置Group风格的按钮为一组。下一个设置了Group风格的按钮为新一组的开始,即每组的第一个按钮设置Group风格。要设置ID_BUTTON2按钮为默认按钮,就是要设置ID_BUTTON2的tab order为所有控件中的第一个。在资源编辑器中选择菜单Layout|Tab Order,对话框编辑画面如图所示。此时按顺序点击控件,就会更改控件的tab顺序(不是位置顺序,而是响应顺序)。,21,3、添加成员变量连接变量就是给对象起一个变量名,以便调用成员
10、函数。哪些对象需要连接变量呢?(1)非自动的radio和check类型的按钮一定要连接变量(2)要调用成员函数对其属性进行修改的命令按钮一定要连接变量(3)自动的radio按钮和check按钮一般不连接变量例如,我们给非自动的check类型的按钮IDC_CHECK1连接了变量m_chk1,在程序的代码中可以有语句 if(m_chk1.GetCheck()0)m_chk1.SetCheck(0);else m_chk1.SetCheck(1);与控件连接的变量是本对话框类中的成员变量,同时也是对象,是对应控件类的对象。,22,添加成员变量要使用类向导,View-ClassWizard选项,23,
11、4、添加消息响应代码:ClassWizard选Message Maps,24,void CMy9_1Dlg:OnButton1()m_btn1.SetWindowText(“你已按下了按钮!”);void CMy9_1Dlg:OnButton2()m_btn2.SetWindowText(“按钮已被按下!”);void CMy9_1Dlg:OnCheck1()if(m_chk1.GetCheck()0)m_chk1.SetCheck(0);else m_chk1.SetCheck(1);void CMy9_1Dlg:OnRadio1()m_rad1.SetCheck(1);,25,9.3 滚动
12、条控件,滚动条是一个交互式的、高度可视化的控件它包括一个滑块、滚动条的两端的按钮等。,滚动条控件与属于窗口的滚动条是不一样的,处于窗口的滚动条是由该窗口创建、管理和释放的,滚动条控件是由用户创建、管理和释放的,26,9.3.1 滚动条类的结构及其方法,滚动条可以通过Create函数来创建,也可以用对话框资源模板来创建,27,9.3.2 创建与初始化滚动条类,28,在设置滚动条控件时,要通过如下方法设置其范围CScrollBar:SetScrollRange()例如,设置滚动范围为-100到100的垂直滚动条pMyScroll-SetScrollRange(SB_VERT,-100,100);设
13、置滚动条范围的语句一般放在OnInitDialog()函数中,在对话框程序初始化时就设置滚动条范围,通过SetScrollPos()设置滚动块当前位置例如,滚动快的位置在-100到100的中间,即为0的位置pMyScroller-SetScrollPos(0);,29,滚动条类编程实例,30,(1)应用程序的可视化编程部分,31,(2)应用程序的代码编程部分,(a)给滚动条连接变量,ID变量名类别 类型IDC_SCROLLBARm_ScrollbarControlCScrollbarIDC_EDITlm_EditControlCEdit,32,BOOL CMy9_2Dlg:OnInitDial
14、og()CDialog:OnInitDialog();/TODO:Add extra initialization herem_Scrollbar.SetScrollRange(0,20);m_Scrollbar.SetScrollPos(10);char sPos10;itoa(m_Scrollbar.GetScrollPos(),sPos,10);m_Edit.SetSel(0,-1);m_Edit.ReplaceSel(sPos);UpdateData(FALSE);return TRUE;,10进制数,(b)初始化滚动条,33,(3)给滚动条消息添加代码 在Class Wizard中的
15、Object IDs列表框中选控件的ID值,在Message列表框中选WM_VSCROLL选项,此即为垂直滚动条的消息,为此消息加上一个成员函数OnVScroll(),在该函数中对滚动条不同的动作(209页表9-7)做出不同的响应。在一个对话框中,不论有几个垂直滚动条,只添加一个成员函数OnVScroll(),不论有几个水平滚动条,只添加一个成员函数OnHScroll()。,OnVScroll(UNIT nSBCode,UNIT nPos,CScrollBar*pScrollBar);,34,(3)给滚动条消息添加代码 void CMy9_2Dlg:OnVScroll()/TODO:Add y
16、our message handler code herechar sPos10;int iNowPos;switch(nSBCode)if(pScrollBar=,35,case SB_LINEDOWN:/单击滚动条向下的箭头iNowPos=m_Scrollbar.GetScrollPos();iNowPos=iNowPos+1;if(iNowPos20)iNowPos=20;m_Scrollbar.SetScrollPos(iNowPos);itoa(m_Scrollbar.GetScrollPos(),sPos,10);m_Edit.SetSel(0,-1);m_Edit.Replace
17、Sel(sPos);break;,36,case SB_LINEUP:/单击滚动条向上的箭头iNowPos=m_Scrollbar.GetScrollPos();iNowPos=iNowPos-1;if(iNowPos0)iNowPos=0;m_Scrollbar.SetScrollPos(iNowPos);itoa(m_Scrollbar.GetScrollPos(),sPos,10);m_Edit.SetSel(0,-1);m_Edit.ReplaceSel(sPos);break;,37,case SB_PAGEDOWN:/单击箭头与滚块之间的区域iNowPos=m_Scrollbar.
18、GetScrollPos();iNowPos=iNowPos+3;if(iNowPos20)iNowPos=20;m_Scrollbar.SetScrollPos(iNowPos);itoa(m_Scrollbar.GetScrollPos(),sPos,10);m_Edit.SetSel(0,-1);m_Edit.ReplaceSel(sPos);break;,38,case SB_PAGEUP:/单击箭头与滚块之间的区域iNowPos=m_Scrollbar.GetScrollPos();iNowPos=iNowPos-3;if(iNowPos0)iNowPos=0;m_Scrollbar
19、.SetScrollPos(iNowPos);itoa(m_Scrollbar.GetScrollPos(),sPos,10);m_Edit.SetSel(0,-1);m_Edit.ReplaceSel(sPos);break;CDialog:OnVScroll(nSBCode,nPos,pScrollBar);,39,(4)给Exit按钮连接代码 void CMy9_2Dlg:OnExitButton()OnOK();/对话框类的成员函数(5)给Up按钮添代码 void CMy9_2Dlg:OnUpButton()m_Scrollbar.SetScrollPos(0);m_Edit.SetS
20、el(0,-1);m_Edit.ReplaceSel(0);,40,(6)给 Down按钮添加代码void CMy9_2Dlg:OnDownButton()m_Scrollbar.SetScrollPos(20);m_Edit.SetSel(0,-1);m_Edit.ReplaceSel(20);(7)给Reset按钮添加代码void CMy9_2Dlg:OnResetButton()m_Scrollbar.SetScrollPos(10);m_Edit.SetSel(0,-1);m_Edit.ReplaceSel(10);,41,在应用程序中,编辑框只是用于显示滚动块的位置,不需要进行编辑,
21、因此必须将其属性改为只读,42,9.4 静态控件,43,9.4.1 静态控件的特点,一般情况下静态控件不发送消息。实际应用中,需要静态文本能够象超文本那样响应用户的输入,向应用程序发送控件消息。,要在创建静态控件时加入SS_NOTIFY样式,该样式允许静态控件向其父窗口发送WM_COMMAND消息,该消息的字参数的低字节中包含静态控件的ID,高字节中包含通知码(217页表9-10),44,9.4.2 静态控件应用举例,【例9-3】本例通过演示位图静态控件的使用方法,说明静态控件消息的强制生成与处理过程,当单击位图时,就报告该位图的尺寸。,45,假设已经建立了一个静态控件,并连接了变量m_bmp
22、,那么在静态控件上显示位图 的方法有3步:1)m_bmp.ModifyStyle(0,SS_BITMAP);/设置控件的风格为SS_BITMAP,否则图片无法显示2)HBITMAP hBmp=LoadBitmap(AfxGetInstanceHandle(),”bmpd”);/从磁盘文件载入位图,文件名为bmpd 或HBITMAP hBmp=LoadBitmap(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_BITMAP1);/载入资源名称为IDB_BITMAP1位图3)m_bmp.SetBitmap(hBmp);/在对象m_bmp上显示出位图句柄为hB
23、mp的位图代码放在OnInitDailog函数中,46,主要步骤如下:创建基于对话框的应用程序导入(加入到工程中)一张BMP格式图片。假设位图资源名称为IDB_BITMAP1向对话框上放上一个static控件,其ID为IDC_STATIC_BMP,并设置控件为nofity风格,并添加CStatic类型成员m_bmp,无此风格,静态控件无法响应鼠标消息,47,(4)在OnInitDailog函数中添加如下代码,设置控件为位图风格,并设置位图 BOOL CMy9_3Dlg:OnInitDialog()/TODO:Add extra initialization herem_bmp.ModifySt
24、yle(0,SS_BITMAP);HBITMAP hBmp=LoadBitmap(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_BITMAP1);m_bmp.SetBitmap(hBmp);return TRUE;也可以写成HBITMAP hBmp=LoadBitmap(AfxGetInstanceHandle(),”bmpd”);,48,(5)响应鼠标单击静态控件的消息。为static控件添加BN_CLICKED消息的响应 void CMy9_3Dlg:OnStaticBmp()/TODO:Add your control notification h
25、andler code hereBITMAP bmp;GetObject(m_bmp.GetBitmap(),sizeof(BITMAP),/在消息框中显示字符串msg,49,9.5 列表框控件,列表框经常用在对话框里,如用列表框选择文件名、目录等。列表框有一个预定义的键盘接口,用户可以用键盘上的箭头和PageUp或PageDown键在列表框中进行数据的选择,或通过适当的样式设置,允许与Shift或Ctrl键组合使用。,列表框常应用于从众多数据中选某一项,50,9.5.1 列表框控件的类结构,MFC中CListBox类的层次结构,51,9.5.2 列表框类的方法,52,(1)通用方法,通用方法
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 二级 语言 学习
链接地址:https://www.31ppt.com/p-6342252.html