Windows标准控件在可视化编程中的应用.ppt
《Windows标准控件在可视化编程中的应用.ppt》由会员分享,可在线阅读,更多相关《Windows标准控件在可视化编程中的应用.ppt(132页珍藏版)》请在三一文库上搜索。
1、1,第9章 Windows 标准控件在可视化编程中的应用,2,控件是Windows 图形用户界面的主要组成部分之一,用户通过操作控件对象完成与应用程序之间的交互。控件的使用集中体现了Windows 系统面向对象的特点,3,9.1概述,9.1.1 在程序界面中增加控件方法,1.使用类的成员函数完成控件的增加,使用控件类定义一个实例对象,Cbutton mybtn;,调用该类的Create()函数创建相应的控件,Mybtn.Create( DWORD dwStyle, const RECT,使用ShowWindow ()函数显示该控件,ShowWindow (),调用MoveWindow()、Se
2、tWindowPos()、SetWindowText()等函数等窗口管理函数来移动、显示或隐藏控件、改变控件的位置、尺寸以及其它操作,4,系统预定义的窗口类,2.使用可视化工具在基于对话框的应用程序中添加控件,5,9.1.2 为控件添加消息映射,消息映射:对控件进行操作,从而引发各种事件,在应用程序中添加控件的消息响应的方法,并将之绑定的机制。 如:ON_BN_CLICKED(IDC_BUTTON1, OnBnClickedButton1),6,标明了消息的类型,控件的ID,处理消息的函数,在对话框对应的头文件中申明处理事件的函数; 如:afx_msg void OnBnClickedButt
3、on1();,消息映射形式: BEGIN_MESSAGE_MAP ON_BN_CLICKED(IDC_BUTTON1,OnBnClickedButton1) END_MESSAGE_MAP,7,8,9,控件及其相应的通知代码,10,为控件的事件添加消息映射,11,为处理消息的成员函数添加代码 void Cch07_1_2Dlg:OnBnClickedExit() OnOK();,9.1.3 在应用程序中使用控件,1.使用GetDlgItem函数根据控件ID来获取控件的地址。 GetDlgItem函数的原型为: virtual CWnd* GetDlgItem( int nID ) const;
4、 CEdit *pEdit; /定义一个指向CEdit控件指针 pEdit=(C Edit *)GetDlgItem(IDD_EDIT1); /获取ID为IDD_EDIT1编辑框的指针 pEdit-SetSel(2,5); /使用控件指针,12,2、为控件定义标识符 如果控件使用频繁,可为控件指定一个标识符。控件类型有两种:一种是控件类型,这样定义的控件标识符就是控件类的实例对象,可以用标识符访问类的所有成员;另一种是将控件定义为一个C+数据类型,如将编辑框定义为CString类型。,13,14,控件定义为value类型的刷新问题: 刷新操作都是通过DDX技术来完成,DDX是将控件ID和控件变
5、量绑定的一种技术,其数据交换通过DoDataExchange()函数: Void DoDataExchange(CDataExchange* pDX) CDialog:DoDataExchange(pDX); DDX_Control(pDX, IDC_EDIT1, m_edit); DDX_Text(pDX, IDC_EDIT2, m_name);,UpdateData(true),UpdateData(false),9.1.4 自定义控件类,控件类可以被继承的类,派生出新的控件类,就可以扩展控件类的功能。 操作步骤: 1、在项目上单击快捷菜单,选择“添加-类”,进入类向导,选择“MFC类”,
6、然后,单击“添加”按钮,16,2、指定派生类的基类,输入新类的名称,3、增加类的成员,扩展控件类的功能; 4、为控件定义变量,在变量类型中输入自定 义的控件类,17,9.2 按钮控件及其应用,按钮控件,普通按钮 圆按钮 复选框按钮 组框按钮 自绘按钮,18,9.2.1 按钮控件的创建过程,CButton类的成员函数Create负责创建按钮控件,该函数的声明为: BOOL Create ( LPCTSTR lpszCaption, /指定了按钮显示的正文 DWORD dwStyle, /按钮的风格 const RECT& rect, /按钮的位置和大小 CWnd* pParentWnd, /指向
7、父窗口, UINT nID /按钮的ID ),19,按钮控件消息: ON_BN_CLICKED ON_BN_DBLCLICKED ON_COMMAND,两个 类似,按钮是最常见的控件之一,复选框,单选按钮,下压式按钮,分组框,常用于只有两种 完全相反状态 的情况下,适用于同一组属性相 同的数据中选一个数据,适用于消息的发送,没有太多的操作 只是在窗口中划 分区域范围,20,GetCheck( ) SetCheck( ) GetBitmap() SetBitmap() GetButtonStyle() SetButtonStyle() GetCursor() SetCursor() GetIco
8、n() SetIcon() GetState() SetState(),CButton类的成员函数,在知道按钮ID的前提下,还可使用与按钮有关的CWnd成员函数来设置或查询按钮状态,CheckDlgButton CheckRadioButton GetCheckedRadioButton Is DlgButtonChecked GetWindowTex GetWindowTextLength SetWindowText,21,MFC还提供了一个CBitmapButton的类,允许用户以图标的方式显示按钮,它是在CButton下派生的,MFC调用方法DrawItem()在按钮上绘制位图,Load
9、Bitmaps()方法为一个CBitmapButton对象附上位图,最多可以有4个位图,自定义按钮,22,9.2.2 按钮控件示例,23,主要步骤: 创建基于对话框项目 设置按钮的属性,24,添加成员变量,添加消息响应函数,25,void Cch07_1Dlg:OnBnClickedButton1() m_btn1.SetWindowText(L“你已按下了按钮!“); void Cch07_1Dlg:OnBnClickedButton2() m_btn2.SetWindowText(L“按钮已被按下!“); void Cch07_1Dlg:OnBnClickedRadio3() m_rad3
10、.SetCheck(1); m_rad4.SetCheck(0); ,26,void Cch07_1Dlg:OnBnClickedRadio4() m_rad3.SetCheck(0); m_rad4.SetCheck(1); void Cch07_1Dlg:OnBnClickedCheck2() if(m_chk2.GetCheck() m_chk2.SetCheck(0); else m_chk2.SetCheck(1); ,27,9.3 滚动条控件,滚动条是一个交互式的、高度可视化的控件它包括一个滑块、滚动条的两端的按钮等。,滚动条控件与属于窗口的滚动条是不一样的,处于窗口的滚动条是由该
11、窗口创建、管理和释放的,滚动条控件是由用户创建、管理和释放的,28,9.3.1 滚动条类的结构及其方法,滚动条可以通过通知代码来创建,也可以用对话框资源模板来创建,29,常用滚动条动作标识及其说明 SB_TOP / SB_BOTTOM :滚动到滚动条最顶 / 底端 SB_LINEUP / SB_LINEDOWN:向上 / 下滚动一行 SB_LEFT / SB_RIGHT:滚动到左 / 右边 SB_LINELEFT / SB_LINERIGHT:向左 / 右滚动一行 SB_PAGEUP / SB_PAGEDOWN :向上 / 下滚动一页 SB_PAGELEFT / SB_PAGERIGHT :向
12、左 / 右滚动一页 SB_THUMBPOSITION:滚动框移动到新位置 SB_THUMBTRACK:滚动框被拖动 SB_ENDSCROLL:滚动到最终位置,30,9.3.2 创建与初始化滚动条类,31,在设置滚动条控件时,要通过如下方法设置其范围 CScrollBar:SetScrollRange() 例如,设置滚动范围为-100到100的垂直滚动条 pMyScroll-SetScrollRange(SB_VERT,-100,100);,通过SetScrollPos()设置滚动块当前位置 例如,滚动快的位置在-100到100的中间,即为0的位置 pMyScroller-SetScrollPo
13、s(0);,32,9.3.3滚动条类编程实例,33,(1) 应用程序的可视化编程部分,34,(2) 应用程序的代码编程部分,在Cch07_2Dlg类中加入一个成员函数ChangeDisplayInfo(int pos),用于将数值型参数pos显示到编辑框控件中,void Cch07_2Dlg:ChangeDisplayInfo(int pos) TCHAR sPos10; _itow(pos,sPos,10); m_dispinfo.SetSel(0,-1); m_dispinfo.ReplaceSel(sPos); UpdateData(FALSE); /将与控件绑定的变量内容显示到屏幕上
14、,函数_itow(pos,sPos,10)是将数值pos按十进制形式转化到字符串sPos中,SetSel()和ReplaceSel()是CEdit类的成员函数,SetSel(0,-1)表示选中编辑框中的所有内容,ReplaceSel(sPos)表示用sPos的值去替换编辑框中的内容。,37,BOOL Cch07_2Dlg:OnInitDialog() CDialog:OnInitDialog(); SetIcon(m_hIcon, TRUE); SetIcon(m_hIcon, FALSE); m_scrollbar.SetScrollRange(0,20); m_scrollbar.SetS
15、crollPos(10); ChangeDisplayInfo(m_scrollbar.GetScrollPos(); return TRUE; ,(b) 初始化滚动条,在Cch07_2Dlg的属性框中选择“消息”选项卡,选择“WM_VSCROLL”消息,单击右侧的向下的箭头按钮,然后添加一个成员函数OnVScroll,39,(3) 给滚动条消息添加代码 void Cch07_2Dlg:OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) int iNowPos; switch(nSBCode) if(pScrollBar=,40
16、,case SB_LINEDOWN: iNowPos=m_scrollbar.GetScrollPos(); iNowPos=iNowPos+1; if(iNowPos20) iNowPos=20; m_scrollbar.SetScrollPos(iNowPos); ChangeDisplayInfo(m_scrollbar. GetScrollPos(); break;,41,case SB_LINEUP: /单击滚动条向上的箭头 iNowPos=m_scrollbar.GetScrollPos(); iNowPos=iNowPos-1; if(iNowPos0) iNowPos=0; m
17、_scrollbar.SetScrollPos(iNowPos); ChangeDisplayInfo(m_scrollbar. GetScrollPos(); break;,42,case SB_PAGEDOWN: /单击滚动条下面的箭头与滚动块之间的区域 iNowPos=m_scrollbar.GetScrollPos(); iNowPos=iNowPos+3; if(iNowPos20) iNowPos=20; m_scrollbar.SetScrollPos(iNowPos); ChangeDisplayInfo(m_scrollbar. GetScrollPos(); break;,
18、43,case SB_PAGEUP: /单击滚动条上面的箭头与滚动块之间的区域 iNowPos=m_scrollbar.GetScrollPos(); iNowPos=iNowPos-3; if(iNowPos0) iNowPos=0; m_scrollbar.SetScrollPos(iNowPos); ChangeDisplayInfo(m_scrollbar. GetScrollPos(); break; CDialog:OnVScroll(nSBCode, nPos, pScrollBar);,44,(4) 给Exit按钮连接代码 void Cch07_2Dlg:OnBnClicked
19、BtnExit() OnOK(); (5) 给Up按钮添代码 void Cch07_2Dlg:OnBnClickedBtnTop() m_scrollbar.SetScrollPos(0); ChangeDisplayInfo(m_scrollbar.GetScrollPos(); ,45,(6) 给 Down按钮添加代码 void Cch07_2Dlg:OnBnClickedBtnBottom() m_scrollbar.SetScrollPos(20); ChangeDisplayInfo(m_scrollbar.GetScrollPos(); (7) 给Reset按钮添加代码 void
20、Cch07_2Dlg:OnBnClickedBtnReset() m_scrollbar.SetScrollPos(10); ChangeDisplayInfo(m_scrollbar.GetScrollPos(); ,46,在应用程序中,编辑框只是有于显示滚动块的位置,不需要进行编辑,因此必须将其属性改为只读,47,9.4 静态控件,48,9.4.1 静态控件的特点,一般情况下静态控件不发送消息。 实际应用中,需要静态文本能够象超文本那样响应用户的输入,向应用程序发送控件消息。,要在创建静态控件时加入SS_NOTIFY样式,该样式允许静态控件向其父窗口发送WM_COMMAND消息,该消息的字
21、参数的低字节中包含静态控件的ID,高字节中包含通知码,49,9.4.2 静态控件应用举例,【例7-3】本例通过演示位图静态控件的使用方法,说明静态控件消息的强制生成与处理过程,当单击位图时,就报告该位图的尺寸。,50,主要步骤如下: 创建基于对话框的MFC应用程序ch09_3。 向资源中导入一张图片,假设位图资源名称为IDB_BITMAP1。 向对话框上放上一个static控件,其ID为IDC_STATIC_BMP,并设置控件为nofity风格 为该控件添加CStatic类型成员m_bmp。 在OnInitDailog函数中添加如下代码,设置控件为位图风格,并设置位图。,51,(4) 在OnI
22、nitDailog函数中添加如下代码,设置控件为位图风格,并设置位图 BOOL CMy9_3Dlg:OnInitDialog() / TODO: Add extra initialization here m_bmp.ModifyStyle(0,SS_BITMAP); HBITMAP hBmp=LoadBitmap(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDB_BITMAP1); m_bmp.SetBitmap(hBmp); return TRUE; ,52,(5) 响应鼠标单击静态控件的消息。为static控件添加STN_CLICKED消息的响应 v
23、oid CMy9_3Dlg:OnStaticBmp() / TODO: Add your control notification handler code here BITMAP bmp; GetObject(m_bmp.GetBitmap(),sizeof(BITMAP), ,53,9.5 列表框控件,列表框经常用在对话框里,如用列表框选择文件名、目录等。列表框有一个预定义的键盘接口,用户可以用键盘上的箭头和PageUp或PageDown键在列表框中进行数据的选择,或通过适当的样式设置,允许与Shift或Ctrl键组合使用。,列表框常应用于从众多数据中选某一项,54,9.5.1 列表框控件
24、的类结构,MFC中CListBox类的层次结构,55,56,消息映像项使用下面的基本格式: ON_Message(Control ID,ClassMethod),所有者类声明中的方法原型 afx_msg void ClassMethod();,发送消息的列表框 控件的子窗口标识,处理消息的父 类方法的名字,57,9.5.2 列表框类的方法,58,(1) 通用方法,通用方法用来获得和设置列表框数据的值和属性,所有的CListBox列表框都有这些方法.,59,(2) 单项选择特定方法,列表框的默认模式是单选项模式;所有的通用方法均适用于单选项列表框,60,方法 说明 GetAnchorIndex(
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Windows 标准 控件 可视化 编程 中的 应用
链接地址:https://www.31doc.com/p-3486386.html