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