欢迎来到三一文库! | 帮助中心 三一文库31doc.com 一个上传文档投稿赚钱的网站
三一文库
全部分类
  • 研究报告>
  • 工作总结>
  • 合同范本>
  • 心得体会>
  • 工作报告>
  • 党团相关>
  • 幼儿/小学教育>
  • 高等教育>
  • 经济/贸易/财会>
  • 建筑/环境>
  • 金融/证券>
  • 医学/心理学>
  • ImageVerifierCode 换一换
    首页 三一文库 > 资源分类 > PPT文档下载
     

    Windows标准控件在可视化编程中的应用.ppt

    • 资源ID:3486386       资源大小:1.51MB        全文页数:132页
    • 资源格式: PPT        下载积分:10
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录   微博登录  
    二维码
    微信扫一扫登录
    下载资源需要10
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    Windows标准控件在可视化编程中的应用.ppt

    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()、SetWindowPos()、SetWindowText()等函数等窗口管理函数来移动、显示或隐藏控件、改变控件的位置、尺寸以及其它操作,4,系统预定义的窗口类,2.使用可视化工具在基于对话框的应用程序中添加控件,5,9.1.2 为控件添加消息映射,消息映射:对控件进行操作,从而引发各种事件,在应用程序中添加控件的消息响应的方法,并将之绑定的机制。 如:ON_BN_CLICKED(IDC_BUTTON1, OnBnClickedButton1),6,标明了消息的类型,控件的ID,处理消息的函数,在对话框对应的头文件中申明处理事件的函数; 如:afx_msg void OnBnClickedButton1();,消息映射形式: 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; 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和控件变量绑定的一种技术,其数据交换通过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类”,然后,单击“添加”按钮,16,2、指定派生类的基类,输入新类的名称,3、增加类的成员,扩展控件类的功能; 4、为控件定义变量,在变量类型中输入自定 义的控件类,17,9.2 按钮控件及其应用,按钮控件,普通按钮 圆按钮 复选框按钮 组框按钮 自绘按钮,18,9.2.1 按钮控件的创建过程,CButton类的成员函数Create负责创建按钮控件,该函数的声明为: BOOL Create ( LPCTSTR lpszCaption, /指定了按钮显示的正文 DWORD dwStyle, /按钮的风格 const RECT& rect, /按钮的位置和大小 CWnd* pParentWnd, /指向父窗口, UINT nID /按钮的ID ),19,按钮控件消息: ON_BN_CLICKED ON_BN_DBLCLICKED ON_COMMAND,两个 类似,按钮是最常见的控件之一,复选框,单选按钮,下压式按钮,分组框,常用于只有两种 完全相反状态 的情况下,适用于同一组属性相 同的数据中选一个数据,适用于消息的发送,没有太多的操作 只是在窗口中划 分区域范围,20,GetCheck( ) SetCheck( ) GetBitmap() SetBitmap() GetButtonStyle() SetButtonStyle() GetCursor() SetCursor() GetIcon() SetIcon() GetState() SetState(),CButton类的成员函数,在知道按钮ID的前提下,还可使用与按钮有关的CWnd成员函数来设置或查询按钮状态,CheckDlgButton CheckRadioButton GetCheckedRadioButton Is DlgButtonChecked GetWindowTex GetWindowTextLength SetWindowText,21,MFC还提供了一个CBitmapButton的类,允许用户以图标的方式显示按钮,它是在CButton下派生的,MFC调用方法DrawItem()在按钮上绘制位图,LoadBitmaps()方法为一个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.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 滚动条控件,滚动条是一个交互式的、高度可视化的控件它包括一个滑块、滚动条的两端的按钮等。,滚动条控件与属于窗口的滚动条是不一样的,处于窗口的滚动条是由该窗口创建、管理和释放的,滚动条控件是由用户创建、管理和释放的,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 :向左 / 右滚动一页 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-SetScrollPos(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); /将与控件绑定的变量内容显示到屏幕上 ,函数_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.SetScrollPos(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,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_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;,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:OnBnClickedBtnExit() 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 Cch07_2Dlg:OnBnClickedBtnReset() m_scrollbar.SetScrollPos(10); ChangeDisplayInfo(m_scrollbar.GetScrollPos(); ,46,在应用程序中,编辑框只是有于显示滚动块的位置,不需要进行编辑,因此必须将其属性改为只读,47,9.4 静态控件,48,9.4.1 静态控件的特点,一般情况下静态控件不发送消息。 实际应用中,需要静态文本能够象超文本那样响应用户的输入,向应用程序发送控件消息。,要在创建静态控件时加入SS_NOTIFY样式,该样式允许静态控件向其父窗口发送WM_COMMAND消息,该消息的字参数的低字节中包含静态控件的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) 在OnInitDailog函数中添加如下代码,设置控件为位图风格,并设置位图 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消息的响应 void 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 列表框控件的类结构,MFC中CListBox类的层次结构,55,56,消息映像项使用下面的基本格式: ON_Message(Control ID,ClassMethod),所有者类声明中的方法原型 afx_msg void ClassMethod();,发送消息的列表框 控件的子窗口标识,处理消息的父 类方法的名字,57,9.5.2 列表框类的方法,58,(1) 通用方法,通用方法用来获得和设置列表框数据的值和属性,所有的CListBox列表框都有这些方法.,59,(2) 单项选择特定方法,列表框的默认模式是单选项模式;所有的通用方法均适用于单选项列表框,60,方法 说明 GetAnchorIndex() 获得多项选择列表框中当前定位项的下标 GetCaretIndex() 获得多项选择列表框中具有光标矩形的项的下标 GetSelCount() 获得多项选择列表框中当前所选的项的数目 GetSelItems() 将所有当前被选列表框项下标放入一整型数组缓冲区 SelItemRange() 切换多选择列表框项范围的选择状态 SetAnchorIndex() 在多项选择列表框中扩充选择设置开始(定位)项 SetCaretIndex() 在多项选择列表框中指定下标项设置光标矩形 SetSel() 在多项选择列表框中切换项目的选择状态,(3) 多项选择特定方法,多选项列表框扩展了 标准单项选择列表框 的能力,可以解决在 一个列表框中选择多 项带来的复杂性,特定多项选择列表 框的CListBox类方法,61,(4) 字符串指定的方法,方法 说明 AddString() 在列表框中加入一个字符串 DeleteString() 从列表框中删除一个字符串 Dir() 从当前目录加文件名放入列表框 FindString() 在列表框中搜索一字符串 FindStringExact() 在列表框中搜索第一个与指定搜索字符串匹配的字符串 InsertString() 在列表框指定下标处插入一字符串 ResetContent() 清除列表框中的所有项 SelectString() 在单选列表框中搜索并选择一字符串,CListBox指定列表 框中字符串的方法,62,(5) 虚拟方法,CListBox类还声明了几个虚拟方法,你可以从CListBox类中派生一些类替换到你的类中。,方法 说明 CharToItem() 可以替换此方法来为自绘列表框(没有字符串)处理WM-CHAR CompareItem() 由MFC调用以得到排序的自绘列表框中的新项的位置 DeleteItem() 当用户从自绘列表框中删除一项时MFC调用此方法 DrawItem() 当确定自绘列表框项必须重绘时MFC调用此方法 MeasureItem() 当一自绘列表框被创建时MFC调用此方法来决定列表框的维数 VKeyToItem() 用户可替换此方法,来处理具有LBS_WANTKEYBOARDINPUT样式 的列表框的WM_KEYDOWN,63,创建和初始化CListBox对象,用C+关键字new和构造函数为CListBox对象分配一个实例: CListBox:CListBox(),(2) 初始化CListBox对象并赋于它一个Windows列表框,通过方法CListBox:Create()设置列表框的参数和样式,64,例如,下面代码分配一个CListBox对象并返回指向该对象的指针: CListBox *pMyListBox=new CListBox(); 指针pMyListBox用CListBox:Create()方法进行初始化 该方法声明如下: BOOL Create ( DWORD dwStyle, / 列表框控件的窗口样式 const Recy& rect, / 指明控件的大小和位置 CWnd* pParentWnd, / 指向控件所有者的指针 UINT nID / 控件标识 ),65,9.5.3 列表框和应用程序之间消息传递,66,1. 列表框向应用程序发送消息 当用户与列表框交互时,列表框向应用程序发出WM_COMMAND消息。该消息字参数的高字节为标识列表框动作的消息通知码(如LBN_DBLCLK标识用户双击);低字节为控件标识值。 LBN_SELCHANGE: 列表框中的用户选择已发生改变 LBN_DBCLK: 双击 LBN_SELCANCLE: 列表框中的选择被取消 LBN_SETFOCUS: 列表框收到输入焦点 LBN_KILLFOCUS: 列表框失去输入焦点,67,2.应用程序向列表框发送消息 应用程序对列表框的操作通过调用函数SendMessage或SendDlgItemMessage向其发送各种消息完成。,68,9.5.4 列表框应用举例,【例7-4】创建一个单选列表框,并在该列表框中列出当前目录的文件,双击后删除该项,69,主要步骤如下: (1)在对话框上放置一个List Box(IDC_LIST_DIR)控件和一个Static(IDC_STATIC_DIR )控件。List Box控件用于显示文件名称,Static控件用于显示当前显示的文件所在的目录 (2)为List Box控件添加CListBox类型成员变量m_list,70,(3)在OnInitDialog函数中添加初始化列表框内容的代码 BOOL CMy9_4Dlg:OnInitDialog() CDialog:OnInitDialog(); / TODO: Add extra initialization here DWORD cchCurDir = MAX_PATH; LPTSTR lpszCurDir; CHAR tchBufferMAX_PATH; lpszCurDir = tchBuffer; GetCurrentDirectory(cchCurDir, lpszCurDir); DlgDirList(lpszCurDir, IDC_LIST_DIR, IDC_STATIC_DIR, 0); return TRUE; ,获得当前目录,设置列表框显示条目为当前目录下所有文件名,71,(4)为了实现双击条目删除的功能,需要响应列表框的LBN_DBLCLK消息 void CMy9_4Dlg:OnDblclkListDir() / TODO: Add your control notification handler code here int i = m_list.GetCurSel(); CString str; m_list.GetText(i, str); m_list.DeleteString(i); CString msg = L“Item “+str+L“ deleted!“; AfxMessageBox(msg); ,72,9.6 编辑框控件,编辑框控件看起来是个非常简单的矩形窗口,但它具有许多功能,编辑框控件可以自带滚动条,显示多行文本。,CEdit是CWnd类直接派生来的,这就意味着它具有CWnd的所有功能,编辑框控件,单行编辑框控件,多行编辑框控件,73,74,75,9.6.2 编辑框与应用程序间的消息传递,编辑框通过向其父窗口发关WM_COMMAND消息通知应用程序用户的交互信息 应用程序对编辑框的操作通过调用函数SendMessage或SendDlgItemMessage,76,9.6.3 编辑类编程实例,单击Showl,则在Edit1编辑框中显示“This is the first EditBox.” 单击Clear1,则Edit1编辑框中的内容被清除; 单击Show2,则在Edit2编辑框中显示“This is the second EditBox!” 单击Clear2,则Edit2编辑框中的内容被清除; 单击Transfer,则把Edit1编辑框的内容复制到Edit2的编辑框中去 单击Undo,则取消上一次操作 若单击Exit,则退出程序的运行,77,具体的编程过程,生成了工程文件和 工程工作区文件后 在EditBox的工作区 中选择ResourceView,78,(1)创建资源:在ResourceView选项卡中打开Dialog资源组,然后双击IDD_EDITBOX_DIALOG。 VC在工作台中显示可以进行可视化编辑的IDD_EDITBOX_DIALOG对话框,把鼠标停在编辑框 控件上,即可显示 该控件的类型,控件工具窗提供 了VC中所有可建 立的控件类型,79,(2)设置控件ID,80,(3) 应用程序的代码编程部分,void Cch09_5Dlg:OnBnClickedBtnExit() OnOK(); void Cch09_5Dlg:OnBnClickedBtnTran() m_edit1.SetSel(0,-1); /选中m_editl编辑框所有内容 m_edit1.Copy(); /将m_Editl编辑框中所选的内容拷贝到剪贴板上 m_edit2.SetSel(0,-1); m_edit2.ReplaceSel(L“); m_edit2.Paste(); /将剪贴板中的内容粘贴到m_edit2编辑框中 ,81,void Cch09_5Dlg:OnBnClickedBtnUndo() m_edit1.Undo(); /取消m_edit1编辑框中上一次操作 m_edit2.Undo(); /取消m_edit2编辑框中上一次操作 void Cch09_5Dlg:OnBnClickedBtnShow1() m_edit1.SetSel(0,-1); / 选中编辑框中的全部内容 m_edit1.ReplaceSel(L“This is the first EditBox.“); void Cch09_5Dlg:OnBnClickedBtnClear1() m_edit1.SetSel(0,-1); m_edit1.ReplaceSel(L“); /用空字符串代替所选中的文本,即把所选的文本删除掉 ,82,83,【例7-6】编辑框控件的“乘法器”示例程序,使用者在“乘数”或者“被乘数”编辑框输入数字的时候,程序可以随时计算乘法的结果,主要步骤如下: 1.创建基于对话框的项目文件ch09_6,按上图为对话框添加控件,84,2. 为对话框控件添加变量并设置控件的属性,3、添加各个控件的消息代码函数,86,4、编写各个控件的消息处理代码 BOOL void ch09_6Dlg:OnEnChangeNum1() UpdateData(TRUE); switch(m_operator) case 0: m_result=m_num1+m_num2; break; case 1: m_result=m_num1-m_num2; break; case 2: m_result=m_num1*m_num2; break; case 3: m_result=m_num1/m_num2; UpdateData(FALSE); ,87,void Cch09_6Dlg:OnBnClickedAdd() OnEnChangeNum1(); void Cch09_6Dlg:OnBnClickedSub() OnEnChangeNum1(); void Cch09_6Dlg:OnBnClickedMul() OnEnChangeNum1(); void Cch09_6Dlg:OnBnClickedDiv() OnEnChangeNum1(); void Cch09_6Dlg:OnEnChangeNum2() OnEnChangeNum1(); void Cch09_6Dlg:OnBnClickedReset() m_result=m_num1=m_num2=m_operator=0; UpdateData(FALSE);,88,9.7 组合框控件,89,9.9.1 组合框(CComboBox)类的结构及组合框的特点,组合框是两种预定义窗口的组合形式,是编辑框与列表框的组合。组合框可以使用输入,也可以选择。,90,9.9.2 组合框与应用程序间消息传递,1、组合框通过向其父窗口发关WM_COMMAND消息通知应用程序用户的交互信息。该消息字参数(wParam)的低字节为控件标识,高字节为标识组合框动作的消息通知码。,91,2、应用程序对组合框的操作也通过使用函数SendMessage或SendDlgItemMessage向组合框发送消息进行。,CCombox类的常用成员函数,93,9.9.3 组合框控件应用举例,【例7-7】本例创建组合框控件,当单击向下按钮时,显示可选文件的名字。当选中某一项时,显示该项的名称,94,主要步骤如下: 1.创建基于对话框的MFC应用程序,项目为ch09_7。 2.将一个Combo Box控件放到对话框上。取消Sort风格。 3.为该控件添加CComboBox类型的变量m_cb。 3.初始化对话框时,加入选择内容: BOOL Cch09_7Dlg:OnInitDialog() CDialog:OnInitDialog(); m_cb.AddString(L“Monday“); m_cb.AddString(L“Tuesday“); m_cb.AddString(L“Wednesday“); m_cb.AddString(L“Thursday“); m_cb.AddString(L“Friday“); m_cb.AddString(L“Saturday“); m_cb.AddString(L“Sunday“); return TRUE;,95,当用户选择的内容发生改变的时候,会产生CBN_SELCHANGE消息。为控件添加该消息的响应函数: void Cch09_7Dlg:OnCbnSelchangeCombo1() CString msg; m_cb.GetLBText(m_cb.GetCurSel(), msg); AfxMessageBox(msg); ,96,9.8 对话框通用控件,大部分控件都是在对话框中使用的,无论是基于对话框的应用程序还是Doc/View结构的应用程序,控件通常是放在对话框中的。本节将以一个名为“Ex9_9”的基于对话框的应用程序来介绍各种Windows通用控件的使用。,97,9.8.1 Picture控件的使用,(1)分隔线 将Picture控件拖放到对话框上,【Type】属性选择“Frame”,【Color】属性选择“Etched”,将控件拖到最细,这时,Picture控件看起来的效果就跟一条分隔线一样了,98,(2) 图片 将【Type】属性设置为“Icon”或者“Bitmap”的时候,可以设置【Image】属性为相应的资源ID,来显示图标或位图。我们在资源中导入一位图,,命名为IDB_BITMAP_DOT,设置Picture控件【Type】为“Bitmap”,【Image】为“IDB_BITMAP_DOT”,99,Spin控件的使用,Spin按钮控件提供了一对箭头,用户通过点击箭头可以微调该控件所表示的数值。,表示Spin控件的是CSpinButtonCtrl类,Spin控件通常和tab order位于它之前的控件成对使用。通过CSpinButtonCtrl的GetBuddy方法可获得与之配对的控件,100,SpinButtonCtrl类常用成员,101,向对话框拖放一个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); pSpin-SetPos(50); pSpin-GetBuddy()-SetWindowText(L“5.0“); return TRUE; ,设置Spin的范围是0100,当前位置是50,同时设置它的配对控件的显示值,102,在对话框中添加WM_VSCROLL消息的响应: void CEx9_9Dlg:OnVScroll() if (pScrollBar-GetDlgCtrlID() = IDC_SPIN1) CString strValue; strValue.Format(L“%3.1f“, (double) nPos / 10.0); (CSpinButtonCtrl*)pScrollBar)-GetBuddy()-SetWindowText(strValue); CDialog:OnVScroll(nSBCode, nPos, pScrollBar); ,103,9.8.3 Progress控件的使用,进度控件是一个用来指示长时间操作的进展程度的控件。MFC中表示进度控制的是CProgressCtrl类,进度条有一个范围和当前位置。范围表示整个操作的持续时间,当前位置表示当前进行到的位置,进度条根据当前位置来判断进行的百分比,来显示进度,104,添加一个Progress控件,保持默认ID,设置Smooth属性。在旁边添加一个按钮,设置ID为“IDC_BUTTON_START”,Caption为“开始”,在OnInitDialog中添加如下代码: CProgressCtrl* pProg =(CProgressCtrl*) GetDlgItem(IDC_PROGRESS1); pProg-SetRange(0, 100); pProg-SetPos(50);,为“开始”按钮添加点击事件实现代码: void CEx9_9Dlg:OnButtonStar() CProgressCtrl* pProg=(CProgressCtrl*)GetDlgItem(IDC_PROGRESS1); pProg-SetPos(0); SetTimer(1000,100,NULL); ,105,在CCtrlDlg中添加对WM_TIMER消息的响应函数: void CEx9_9Dlg:OnTimer(UINT nIDEvent) if(nIDEvent = 1000) CProgressCt

    注意事项

    本文(Windows标准控件在可视化编程中的应用.ppt)为本站会员(本田雅阁)主动上传,三一文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    经营许可证编号:宁ICP备18001539号-1

    三一文库
    收起
    展开