计算机二级C语言学习第9章.ppt_第1页
计算机二级C语言学习第9章.ppt_第2页
计算机二级C语言学习第9章.ppt_第3页
计算机二级C语言学习第9章.ppt_第4页
计算机二级C语言学习第9章.ppt_第5页
已阅读5页,还剩159页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1 第9章Windows标准控件在可视化编程中的应用 2 控件是Windows图形用户界面的主要组成部分之一 用户通过操作控件对象完成与应用程序之间的交互 控件的使用集中体现了Windows系统面向对象的特点 3 9 1概述 控件工具栏 控件接受的消息主要有单击 双击和字符输入等 打开对话框编辑器就会出现控件工具栏 231页图 4 5 9 2按钮控件及其应用 按钮控件 普通按钮圆按钮复选框按钮组框按钮自绘按钮 6 按钮控件消息 ON BN CLICKEDON BN DBLCLICKEDON COMMAND 两个类似 按钮是最常见的控件之一 复选框 单选按钮 下压式按钮 分组框 常用于只有两种完全相反状态的情况下 适用于同一组属性相同的数据中选一个数据 适用于消息的发送 没有太多的操作只是在窗口中划分区域范围 7 9 2 1按钮控件的创建过程 CButton类的控件可以用对话框资源模板来创建 可以通过CButton类的成员函数Create函数来创建 该函数的声明为 BOOLCreate LPCTSTRlpszCaption 指定了按钮显示的正文DWORDdwStyle 按钮的风格 202页表9 3 constRECT rect 按钮的位置和大小CWnd pParentWnd 指向父窗口 UINTnID 按钮的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成员函数来设置或查询按钮状态 当然调用的语句也应该是对象 函数 参数 CheckDlgButtonCheckRadioButtonGetCheckedRadioButtonIsDlgButtonCheckedGetWindowTexGetWindowTextLengthSetWindowText 11 1 CheckDlgButton intnIDButton UNITnCheck 该函数用来设置按纽的选择状态 其中 nIDButton是按纽的ID nCheck取值0表示按纽未被选择 1表示按纽被选择 2表示按纽处于不确定状态 2 CheckRadioButton intnIDFirstButton intnIDLastButton intnIDCheckButton 该函数用来选择组中的一个单选按纽 其中 nIDFirstButton指定按纽组中第一个按纽的ID nIDLastButton指定按纽组中最后一个按纽的ID intnIDCheckButton指定要选择的按纽的ID 12 3 GetCheckedRadioButton intnIDFirstButton intnIDLastButton 该函数用来获得一组单选按纽中被选中按纽的ID 其中 nIDFirstButton指定按纽组中第一个按纽的ID nIDLastButton指定按纽组中最后一个按纽的ID 4 IsDlgButtonChecked intnIDButton 该函数返回复选框或单选按纽的选择状态 返回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按钮控件示例 16 控件在可视化编程中的应用主要步骤 1 创建基于对话框项目2 设计界面3 添加成员变量4 添加消息响应代码前两步也叫做应用程序的可视化编程部分后两步也叫做应用程序的代码编程部分 17 1 创建基于对话框项目 1 使用AppWizard创建 MFCAppWizard exe 类型项目 设项目名为MY 2 选择项目类型时选择 Dialogbased 类型的应用程序 资源语言选择中文 否则界面上的中文无法正确显示 3 点击Finish按钮 VC在工作台中显示可以进行可视化编辑的IDD MY DIALOG对话框 同时 出现控件工具栏窗口 或者在ResourceView选项卡中打开Dialog资源组 然后双击IDD MY DIALOG 然后将对话框上默认的控件 一个Exit按纽和Cancel按纽 删除干净 18 2 设计界面 1 在控件工具栏上击某控件 选一个 2 在对话框中相应位置击一下或拖出来一个控件 把鼠标停在编辑框控件上 即可显示该控件的类型 控件工具栏提供了VC中所有可建立的控件类型 19 Group属性 3 在新控件上右击 快捷菜单中选属性 就可以设置各控件的属性 Caption属性 Group属性和Auto属性 20 对于radio和check类型的按钮 如果设置了Auto风格 则开发者不需要响应按钮的点击消息 按钮会自动响应的 如果没有设置Auto风格 则开发者需要响应按钮的点击消息 并自行设置按钮的状态 对于radio类型的按钮 每个设置Group风格的按钮和接下来没有设置Group风格的按钮为一组 下一个设置了Group风格的按钮为新一组的开始 即每组的第一个按钮设置Group风格 要设置ID BUTTON2按钮为默认按钮 就是要设置ID BUTTON2的taborder为所有控件中的第一个 在资源编辑器中选择菜单Layout TabOrder 对话框编辑画面如图所示 此时按顺序点击控件 就会更改控件的tab顺序 不是位置顺序 而是响应顺序 21 3 添加成员变量连接变量就是给对象起一个变量名 以便调用成员函数 哪些对象需要连接变量呢 1 非自动的radio和check类型的按钮一定要连接变量 2 要调用成员函数对其属性进行修改的命令按钮一定要连接变量 3 自动的radio按钮和check按钮一般不连接变量例如 我们给非自动的check类型的按钮IDC CHECK1连接了变量m chk1 在程序的代码中可以有语句if m chk1 GetCheck 0 m chk1 SetCheck 0 elsem chk1 SetCheck 1 与控件连接的变量是本对话框类中的成员变量 同时也是对象 是对应控件类的对象 22 添加成员变量要使用类向导 View ClassWizard选项 23 4 添加消息响应代码 ClassWizard选MessageMaps 24 voidCMy9 1Dlg OnButton1 m btn1 SetWindowText 你已按下了按钮 voidCMy9 1Dlg OnButton2 m btn2 SetWindowText 按钮已被按下 voidCMy9 1Dlg OnCheck1 if m chk1 GetCheck 0 m chk1 SetCheck 0 elsem chk1 SetCheck 1 voidCMy9 1Dlg OnRadio1 m rad1 SetCheck 1 25 9 3滚动条控件 滚动条是一个交互式的 高度可视化的控件它包括一个滑块 滚动条的两端的按钮等 滚动条控件与属于窗口的滚动条是不一样的 处于窗口的滚动条是由该窗口创建 管理和释放的 滚动条控件是由用户创建 管理和释放的 26 9 3 1滚动条类的结构及其方法 滚动条可以通过Create函数来创建 也可以用对话框资源模板来创建 27 9 3 2创建与初始化滚动条类 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 应用程序的代码编程部分 a 给滚动条连接变量 ID变量名类别类型IDC SCROLLBARm ScrollbarControlCScrollbarIDC EDITlm EditControlCEdit 32 BOOLCMy9 2Dlg OnInitDialog CDialog OnInitDialog TODO Addextrainitializationherem Scrollbar SetScrollRange 0 20 m Scrollbar SetScrollPos 10 charsPos 10 itoa m Scrollbar GetScrollPos sPos 10 m Edit SetSel 0 1 m Edit ReplaceSel sPos UpdateData FALSE returnTRUE 10进制数 b 初始化滚动条 33 3 给滚动条消息添加代码在ClassWizard中的ObjectIDs列表框中选控件的ID值 在Message列表框中选WM VSCROLL选项 此即为垂直滚动条的消息 为此消息加上一个成员函数OnVScroll 在该函数中对滚动条不同的动作 209页表9 7 做出不同的响应 在一个对话框中 不论有几个垂直滚动条 只添加一个成员函数OnVScroll 不论有几个水平滚动条 只添加一个成员函数OnHScroll OnVScroll UNITnSBCode UNITnPos CScrollBar pScrollBar 34 3 给滚动条消息添加代码voidCMy9 2Dlg OnVScroll TODO AddyourmessagehandlercodeherecharsPos 10 intiNowPos switch nSBCode if pScrollBar 35 caseSB LINEDOWN 单击滚动条向下的箭头iNowPos m Scrollbar GetScrollPos iNowPos iNowPos 1 if iNowPos 20 iNowPos 20 m Scrollbar SetScrollPos iNowPos itoa m Scrollbar GetScrollPos sPos 10 m Edit SetSel 0 1 m Edit ReplaceSel sPos break 36 caseSB LINEUP 单击滚动条向上的箭头iNowPos m Scrollbar GetScrollPos iNowPos iNowPos 1 if iNowPos 0 iNowPos 0 m Scrollbar SetScrollPos iNowPos itoa m Scrollbar GetScrollPos sPos 10 m Edit SetSel 0 1 m Edit ReplaceSel sPos break 37 caseSB PAGEDOWN 单击箭头与滚块之间的区域iNowPos m Scrollbar GetScrollPos iNowPos iNowPos 3 if iNowPos 20 iNowPos 20 m Scrollbar SetScrollPos iNowPos itoa m Scrollbar GetScrollPos sPos 10 m Edit SetSel 0 1 m Edit ReplaceSel sPos break 38 caseSB PAGEUP 单击箭头与滚块之间的区域iNowPos m Scrollbar GetScrollPos iNowPos iNowPos 3 if iNowPos 0 iNowPos 0 m Scrollbar 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按钮连接代码voidCMy9 2Dlg OnExitButton OnOK 对话框类的成员函数 5 给Up按钮添代码voidCMy9 2Dlg OnUpButton m Scrollbar SetScrollPos 0 m Edit SetSel 0 1 m Edit ReplaceSel 0 40 6 给Down按钮添加代码voidCMy9 2Dlg OnDownButton m Scrollbar SetScrollPos 20 m Edit SetSel 0 1 m Edit ReplaceSel 20 7 给Reset按钮添加代码voidCMy9 2Dlg OnResetButton m Scrollbar SetScrollPos 10 m Edit SetSel 0 1 m Edit ReplaceSel 10 41 在应用程序中 编辑框只是用于显示滚动块的位置 不需要进行编辑 因此必须将其属性改为只读 42 9 4静态控件 43 9 4 1静态控件的特点 一般情况下静态控件不发送消息 实际应用中 需要静态文本能够象超文本那样响应用户的输入 向应用程序发送控件消息 要在创建静态控件时加入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 设置控件的风格为SS BITMAP 否则图片无法显示2 HBITMAPhBmp LoadBitmap AfxGetInstanceHandle bmpd 从磁盘文件载入位图 文件名为bmpd或HBITMAPhBmp LoadBitmap AfxGetInstanceHandle MAKEINTRESOURCE IDB BITMAP1 载入资源名称为IDB BITMAP1位图3 m bmp SetBitmap hBmp 在对象m bmp上显示出位图句柄为hBmp的位图代码放在OnInitDailog函数中 46 主要步骤如下 创建基于对话框的应用程序导入 加入到工程中 一张BMP格式图片 假设位图资源名称为IDB BITMAP1向对话框上放上一个static控件 其ID为IDC STATIC BMP 并设置控件为nofity风格 并添加CStatic类型成员m bmp 无此风格 静态控件无法响应鼠标消息 47 4 在OnInitDailog函数中添加如下代码 设置控件为位图风格 并设置位图BOOLCMy9 3Dlg OnInitDialog TODO Addextrainitializationherem bmp ModifyStyle 0 SS BITMAP HBITMAPhBmp LoadBitmap AfxGetInstanceHandle MAKEINTRESOURCE IDB BITMAP1 m bmp SetBitmap hBmp returnTRUE 也可以写成HBITMAPhBmp LoadBitmap AfxGetInstanceHandle bmpd 48 5 响应鼠标单击静态控件的消息 为static控件添加BN CLICKED消息的响应voidCMy9 3Dlg OnStaticBmp TODO AddyourcontrolnotificationhandlercodehereBITMAPbmp 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 通用方法 通用方法用来获得和设置列表框数据的值和属性 所有的CListBox列表框都有这些方法 包括单选列表框 多选列表框和自绘列表框等 53 2 单项选择特定方法 列表框的默认模式是单选项模式 所有的通用方法均适用于单选项列表框 例如inti m list GetCurSel 取得当前选项的下标 54 方法说明GetAnchorIndex 获得多项选择列表框中当前定位项的下标GetCaretIndex 获得多项选择列表框中具有光标矩形的项的下标GetSelCount 获得多项选择列表框中当前所选的项的数目GetSelItems 将所有当前被选列表框项下标放入一整型数组缓冲区SelItemRange 切换多选择列表框项范围的选择状态SetAnchorIndex 在多项选择列表框中扩充选择设置开始 定位 项SetCaretIndex 在多项选择列表框中指定下标项设置光标矩形SetSel 在多项选择列表框中切换项目的选择状态 3 多项选择特定方法 多选项列表框扩展了标准单项选择列表框的能力 可以解决在一个列表框中选择多项带来的复杂性 特定多项选择列表框的CListBox类方法 55 4 字符串指定的方法 方法说明AddString 在列表框中加入一个字符串DeleteString 从列表框中删除一个字符串Dir 从当前目录加文件名放入列表框FindString 在列表框中搜索一字符串FindStringExact 在列表框中搜索第一个与指定搜索字符串匹配的字符串InsertString 在列表框指定下标处插入一字符串ResetContent 清除列表框中的所有项SelectString 在单选列表框中搜索并选择一字符串例如m list DeleteString i 删除下标为i的字符串 对列表框中字符串操作的方法 56 5 虚拟方法 CLstBox类还声明了几个虚拟方法 你可以从CListBox类中派生一些类替换到你的类中 方法说明CharToItem 可以替换此方法来为自绘列表框 没有字符串 处理WM CHARCompareItem 由MFC调用以得到排序的自绘列表框中的新项的位置DeleteItem 当用户从自绘列表框中删除一项时MFC调用此方法DrawItem 当确定自绘列表框项必须重绘时MFC调用此方法MeasureItem 当一自绘列表框被创建时MFC调用此方法来决定列表框的维数VKeyToItem 用户可替换此方法 来处理具有LBS WANTKEYBOARDINPUT样式的列表框的WM KEYDOWN 能被替换的CListBox类的虚拟方法 57 创建和初始化CListBox对象 用C 关键字new和构造函数为CListBox对象分配一个实例 CListBox CListBox 2 初始化CListBox对象并赋于它一个Windows列表框 通过方法CListBox Create 设置列表框的参数和样式 58 例如 下面代码分配一个CListBox对象并返回指向该对象的指针 ClistBox pMyListBox newCListBox 指针pMyListBox用CListBox Create 方法进行初始化该方法声明如下 BOOLCreate DWORDdwStyle 列表框控件的窗口样式constRecy rect 指明控件的大小和位置CWnd pParentWnd 指向控件所有者的指针UINTnID 控件标识 59 9 5 3列表框和应用程序之间消息传递 60 1 列表框向应用程序发送消息当用户与列表框交互时 列表框向应用程序发出WM COMMAND消息 该消息字参数的高字节为标识列表框动作的消息通知码 如LBN DBLCLK标识用户双击 低字节为控件标识值 LBN SELCHANGE 列表框中的用户选择已发生改变LBN DBCLK 双击LBN SELCANCLE 列表框中的选择被取消LBN SETFOCUS 列表框收到输入焦点LBN KILLFOCUS 列表框失去输入焦点 61 2 应用程序向列表框发送消息应用程序对列表框的操作通过调用函数SendMessage 150页 或SendDlgItemMessage向其发送各种消息完成 62 9 5 4列表框应用举例 例9 4 创建一个单选列表框 并在该列表框中列出当前目录的文件 双击后删除该项 63 主要步骤如下 1 在对话框上放置一个ListBox IDC LIST DIR 控件和一个Static IDC STATIC DIR 控件 ListBox控件用于显示文件名称 Static控件用于显示当前显示的文件所在的目录 2 为ListBox控件添加CListBox类型成员变量 m list 64 3 在OnInitDialog函数中添加初始化列表框内容的代码BOOLCMy9 4Dlg OnInitDialog CDialog OnInitDialog TODO AddextrainitializationhereDWORDcchCurDir MAX PATH LPTSTRlpszCurDir CHARtchBuffer MAX PATH lpszCurDir tchBuffer GetCurrentDirectory cchCurDir lpszCurDir DlgDirList lpszCurDir IDC LIST DIR IDC STATIC DIR 0 returnTRUE 获得当前目录放在lpszCurDir 设置列表框显示条目为当前目录下所有文件名 65 4 为了实现双击条目删除的功能 需要响应列表框的LBN DBLCLK消息voidCMy9 4Dlg OnDblclkListDir TODO Addyourcontrolnotificationhandlercodehereinti m list GetCurSel 取得当前选项的下标CStringstr m list GetText i str 表9 13 把下标为i的字符串给strm list DeleteString i 表9 15 删除下标为i的字符串CStringmsg Item str deleted AfxMessageBox msg 在消息框中显示字符串msg 66 9 6编辑框控件 编辑框控件看起来是个非常简单的矩形窗口 但它具有许多功能 编辑框控件可以自带滚动条 显示多行文本 CEdit是CWnd类直接派生来的 这就意味着它具有CWnd的所有功能 编辑框控件 单行编辑框控件 多行编辑框控件 67 9 6 1编辑框类常用方法 68 69 9 6 2编辑框与应用程序间的消息传递 编辑框通过向其父窗口发关WM COMMAND消息通知应用程序用户的交互信息应用程序对编辑框的操作通过调用函数SendMessage或SendDlgItemMessage 70 9 6 3编辑类编程实例 单击Showl 则在Edit1编辑框中显示 ThisisthefirstEditBox 单击Clear1 则Edit1编辑框中的内容被清除 单击Show2 则在Edit2编辑框中显示 ThisisthesecondEditBox 单击Clear2 则Edit2编辑框中的内容被清除 单击Transfer 则把Edit1编辑框的内容复制到Edit2的编辑框中去单击Undo 则取消上一次操作若单击Exit 则退出程序的运行 71 具体的编程过程 生成了工程文件和工程工作区文件后在EditBox的工作区中选择ResourceView 72 1 创建资源 在ResourceView选项卡中打开Dialog资源组 然后双击IDD EDITBOX DIALOG VC在工作台中显示可以进行可视化编辑的IDD EDITBOX DIALOG对话框 把鼠标停在编辑框控件上 即可显示该控件的类型 控件工具窗提供了VC中所有可建立的控件类型 73 2 设置控件ID 将鼠标移到Edit1控键上 单击鼠标右键 选择Properties命令 在窗口中输入控件的ID标识值 IDC EDIT1 用同样的方法设置其它各个对象的属性 74 3 应用程序的代码编程部分 给编辑框连接变量1 CEDIT型 需要调用CEDIT类的方法时用2 int类型 在编辑框中要放整数时用3 CString类型 在编辑框中要放字符串时用 75 给编辑框连接变量 假设连接的变量名为aa 分3种情况 1 需要调用CEDIT类的方法时要给编辑框连接CEDIT类型的变量 比如要改变编辑框显示的内容 代码为 aa SetSel 0 1 aa ReplaceSel ABC 2 在编辑框中要放整数时连接int类型的变量 比如计算器程序中 代码为 m1 aa 或aa 3 3 在编辑框中要输入或输出字符串时连接CString类型的变量 比如需要输入学生的姓名等 输入之后 把姓名放到数据库或数组中 不需要调用CEDIT类的成员函数 此时就连接CString类型变量 例1 CStrings1 if aa s1 aa AfxMessageBox s1 76 例2 在一个编辑框中仅需要显示一个字符串 不对其修改 可以连接CString类型的变量 代码如下 chars 10 Strcopy s abc aa T s T将字符串转成串类 本句相当于aa T abc 或者CStringcs cs Format ageis d 12 aa cs 连接的变量为int类型和CString类型时 一般先用UpdateData TRUE 从窗口中读入和各控件连接的变量 然后对变量进行修改 最后用UpdateData FALSE 刷新屏幕 综合本题可知 在一个编辑框中需要调用CEDIT类的方法时 连接CEDIT类的变量 77 b 设置成员变量名为m Edit1 类别为Control 变量类型为CEdit 注意 不要将m Edit1设为CString类型 因为只有设为CEdit类型 才能够调用CEdit类中的一些成员函数 如Copy Paste等 这样才能完成本应用程序中对Transfer按钮要求复制内容的操作的响应 78 用同样的方法给编辑框EDIT2等其它对象连接各自的变量 增加变量之后MFCClassWizard窗口将变为下图所示 79 若此时运行该程序 在Edit文本框中不能进行多行输入 只能单行输入文本 而且按回车键终止应用程序 同时 文本框中也没有水平和垂直滚动条 下面 我们来完善应用程序中编辑框的特性 使之能够进行多行文本的输入 80 c 修改编辑框的特性 如果不选这项 在编辑框中按回车键 就会终止程序如果选这项 按回车键就可以进行下一行的输入 多行 81 4 添加代码 voidCMy9 5Dlg OnShow1Button m Edit1 SetSel 0 1 选中编辑框IDC EDIT1中的全部内容m Edit1 ReplaceSel ThisisthefirstEditBox 程序中SetSel 函数是CEdit类中的成员函数 因为m Edit1是属于CEdit类的对象 故可以调用该类所有的成员函数 ReplaceSel 函数也是CEdit类中成员函数 a 给Showl按钮连接代码 82 2 给Clear1按钮连接代码 voidCMy9 5Dlg OnClear1Button m Edit1 SetSel 0 1 选中IDC EDIT1中的内容m Edit1 ReplaceSel 用空串代替所选文本 即把所选的文本删除 83 voidCMy9 5Dlg OnShow2Button m Edit2 SetSel 0 1 m Edit2 ReplaceSel ThisisthesecondEditBox voidCMy9 5Dlg OnClear2Button m Edit2 SetSel 0 1 m Edit2 ReplaceSel 3 给Show2和Clear2按钮连接代码 84 4 给按钮IDC Transfer BUTTON连接代码 voidCMy9 5Dlg OnTransferButton m Edit1 SetSel 0 1 m Edit1 Copy m Edit2 SetSel 0 1 m Edit2 ReplaceSel m Edit2 Paste 85 5 给Undo按钮连接代码 voidCMy9 5Dlg OnUndoButton m Edit1 Undo m Edit2 Undo 6 给Exit按钮连接代码 voidCMy9 5Dlg OnExitButton OnOK 86 例9 6 乘法器 示例程序 使用者在 乘数 或者 被乘数 编辑框中输入数字的时候 程序可以随时计算乘法的结果 IDTypeMemberRead onlyNumberIDC EDIT MUL1intm A IDC EDIT MUL2intm B IDC EDIT RESULTCStringm Result 87 初始化结果编辑框BOOLCMy9 6Dlg OnInitDialog CDialog OnInitDialog TODO AddextrainitializationhereUpdateData TRUE 从窗口中读入和各控件连接的变量的值inti m A m B m Result Format d i UpdateData FALSE 刷新屏幕returnTRUE 88 2 当编辑框中的内容发生改变时 会产生EN CHANGE消息 需要为乘数与被乘数两个编辑框响应该消息voidCMy9 6Dlg OnChangeEditMul1 UpdateData TRUE inti m A m B m Result Format d i UpdateData FALSE voidCMy9 6Dlg OnChangeEditMul2 UpdateData TRUE inti m A m B m Result Format d i UpdateData FALSE 89 3 响应Reset按钮的消息voidCMy9 6Dlg OnReset m A 0 m B 0 inti m A m B m Result Format d i UpdateData FALSE 90 一个控件可以根据需要连接多种类型的变量 一个编辑框连接2个变量的例子 判断合法用户voidCExamDlg OnOK TODO AddextravalidationhereUpdateData true 更新控件值变量if m user IsEmpty 检查用户名不能为空 AfxMessageBox 用户名不能为空 请输入 m EditUser SetFocus 焦点返回用户名输入框 elseif m pwd IsEmpty 检查密码不能为空 AfxMessageBox 密码不能为空 请输入 m EditPwd SetFocus 焦点返回密码输入框 91 else 检查密码长度必须为6位 intlen m EditPwd LineLength 取得密码长度if len 6 AfxMessageBox 密码必须为6位 请重新输入 m EditPwd SetFocus else 核对用户名和密码是否合法if m user userlist 92 9 7组合框控件 93 9 7 1组合框 CComboBox 类的结构及组合框的特点 组合框是两种预定义窗口的组合形式 在Windows编程中使用单一控件往往不能完全满足于用户交互的需要 最常见的组合框例子是对话框及与其相联系的静态文本和编辑框 94 9 7 2组合框与应用程序间消息传递 组合框通过向其父窗口发关WM COMMAND消息通知应用程序用户的交互信息 应用程序对组合框的操作也通过使用函数SendMessage或SendDlgItemMessage向组合框发送消息进行 对组合框的操作实际上是对组合框中各成员的操作 95 9 7 3组合框控件应用举例 例9 7 本例创建组合框控件 当单击向下按钮时 显示可选文件的名字 当选中某一项时 显示该项的名称 96 组合框分3种普通组合框 显示一个编辑控件和一个列表框 下拉式组合框 隐藏列表框 直到用户打开它 下拉列表框 直到用户打开时才显示列表框 用户只能从列表框中选择选项 不允许用户输入 在组合框控件上选择DropList风格 单击三角按纽 出现一个虚框 虚框的大小决定程序运行时下拉列表框的大小 用鼠标拖动中间的小方框 可以调整虚框的大小 对于普通组合框 当用户选择的内容发生改变的时候 会产生CBN SELECTCHANGE消息 对于下拉列表框 当用户选择的内容发生改变的时候 会产生CBN SELENDOK消息 本例中是普通组合框 97 1 组合框一般连接ComboBox类型的变量2 给组合框装载选项 可以在OnInitDialog 函数中使用m xx AddString 85 的方法来装载选项 还可以打开组合框的属性表 右击控件 选Properties 选Data标签 输入组合框的选项 添加第一个选项后 按Ctrl Enter换行输入第二个选项 如果同时使用这两种方法装载选项 选中Sort属性 插入的内容将按照字母顺序排序 否则 从Data标签添加的选项排在前面 3 设置初值 在OnInitDialog 函数中使用m xx SelectString 1 95 选中 95 那个选项或m xx SetCurSel 0 选中下标为0的那个选项4 单击组合框中某选项时 会自动把选项内容在编辑框中显示出来 98 5 如果希望在消息框中显示组合框中当前选项 代码如下 charst 15 m xx GetWindowText st 15 获得组合框m xx的正文 长度是15 并放到变量st中AfxMessageBox st 6 如果希望根据组合框中当前选项做出不同处理 要给组合框添加CBN SELENDOK消息响应函数 代码如下 inti i m xx GetCurSel 得到组合框的下标if i 0 elseif i 1 99 将一个ComboBox控件放到对话框上 取消Sort风格 否则插入的内容将按照字母顺序排序 而不是插入的顺序排序 添加CComboBox类型的变量m cbBOOLCMy9 7Dlg OnInitDialog 初始化对话框 CDialog OnInitDialog TODO Addextrainitializationherem cb AddString Monday m cb AddString Tuesday m cb AddString Wednesday m cb AddString Thursday m cb AddString Friday m cb AddString Saturday m cb AddString Sunday returnTRUE 100 当用户选择的内容发生改变的时候 会产生CBN SELCHANGE消息 为控件添加该消息的响应函数 voidCMy9 7Dlg OnSelchangeCombo CStringmsg m cb GetLBText m cb GetCurSel msg 将组合框中下标为给定值的这一项的名称给msgAfxMessageBox msg 101 例9 8 本程序为几种控件的综合应用 102 控件在可视化编程中的应用主要步骤 1 创建基于对话框项目2 设计界面3 添加成员变量4 添加消息响应代码添加成员变量的目的 1 为了在消息响应函数代码中调用某个控件类的成员函数 此时 要连接control类型的变量 类上的变量叫对象 使用格式 对象 成员函数2 为了在消息响应函数代码中使用用户的选择或用户输入的值 此时 要连接value类型的变量 103 几种常用控件总结一 命令按纽一般不连变量 但是要对其单击消息添加对话框类的成员函数 并编写代码 二 复选框可以不连接变量 也可以连接BOOL型变量 还可以连接Cbutton型变量 在程序中需要根据复选框是否选中做出不同的处理 代码编写如下 104 1 连接BOOL型变量 当用户选中复选框 相连接的变量自动为TRUE 此时代码为if aa TRUE else 2 连接Cbutton型变量 此时代码为if m check Getcheck else 3 不连接变量 此时代码为if IsDlgButtonChenked IDC check else 本例中 2个复选框选中时 不对自己操作 而是对编辑框操作 连接BOOL型变量 105 几种常用控件总结三 Auto风格的单选按纽会自动响应单击消息 在所选项的前面加点 同时去掉同组中其它单选按纽前面加点 所以 Auto风格的单选按纽可以不连接变量 也可以连接int型变量 还可以连接Cbutton型变量 一般要在某个控件的某个消息响应函数代码中根据单选按纽当前的选项做出不同反映 代码编写如下 1 连接Cbutton型变量 每个单选按纽都要连变量 此时代码为if m check Getcheck else 106 2 不连接变量 此时在某个控件的某个消息响应函数代码为例1 if IsDlgButtonChecked IDC FEMALE str 女 elsestr 男 例2 intiSexRADIO 性别单选按纽组的选中项的ID值iSexRADIO GetCheckedRadioButton IDC Boy RADIO IDC Girl RADIO if iSexRADIO IDC Boy RADIO 这是Cwnd类的成员函数 为什么前面不加对象名 107 3 单选按纽也可以连接int型的变量 每一组单选按纽中只有第一个按纽可以赋予变量名 其它的单选按纽不能获得变量名 变量的值为所选选项的下标 例如 设置选中第2项 代码为 m xx 1 UpdateData FALSE 一般要在OnInitDialog 函数中设置单选按纽的初值 代码为 CheckRadioButton IDC Boy RADIO IDC Girl RADIO IDC Boy RADIO 设置Girl选中或m xx 0 因为单选按纽连接int型变量m xx 否则不能这样设置初值 108 在设计的过程中 同一组单选按钮必须一个接一个地放进对话框中 中间不能插入其它的控件 对于成组的单选按钮 只在每组的第一个按钮的属性中选中Group设置 在SexSelecting组中只有Boy单选按钮选中Group属性 在AgeRange组中只有 20 单选按钮选中Group属性 109 VisualC 按照放入对话框中的先后顺序 给每个控件赋一个ID值 所以控件的ID值是连续的 Group属性的控件之间的控件为一组 如果ID值不连续 只能删掉 然后重新加入到对话框中 可以从resource h的资源头文件中得到ID值 defineIDC SHOW BUTTON1006 defineIDC HIDE BUTTON1007 defineIDC Boy RADIO1008 defineIDC Girl RADIO1009 defineIDC Age1 RADIO1010 defineIDC Age2 RADIO1011 defineIDC Age3 RADIO1012 defineIDC Show Sex Age BUTTON1013 defineIDC Result EDIT1014 110 几种常用控件总结四 给编辑框连接变量分3种情况 需要调用CEDIT类的方法时要给编辑框连接CEDIT类型的变量 在编辑框中要放整数时连接int类型的变量 在编辑框中要输入或输出字符串时连接CString类型的变量 代码编写如下 1 用于字符串输入1 CEDIT类 charstr 10 m edit GetwindowText str 10 10为字节数2 CString类 UpdateData TRUE AfxMessageBox cs 111 几种常用控件总结2 用于字符串输出1 CEDIT类 m edit SetSel 0 1 m edit ReplaceSel ABC 2 CString类 给cs赋值然后UpdateData FALSE chars 10 Strcopy s abc cs T s 相当于cs T abc 或者CStringcstr cstr Format ageis d 12 cs cstr UpdateData FALSE 3用于计算器程序中 连接int类型的变量 代码为 UpdateData TRUE i UpdateData FALSE 112 本例中 在4个编辑框中仅需要显示一个字符串 不对其修改 连接CString类型或CEDIT类的变量都行 我们给最后一个编辑框连接CString类型变量 另3个连接CEDIT类的变量 为了与其它区别 与控件连接的变量名一律为m xxx 看245页表9 31 一个控件可以根据需要连接多种类型的变量 113 几种常用控件总结五 组合框一般连接ComboBox类型的变量 当用户选择的内容发生改变的时候 会产生CBN SELCHANGE消息 为该消息的添加响应函数 代码如下 CStringmsg m cb GetLBText m cb GetCurSel msg 将组合框中下标为给定值的这一项的名称给msgAfxMessageBox msg 114 几种常用控件总结六 滚动条一般连接Cscroll类型的变量 为OnVscroll 或OnHscroll 函数写代码七 列表框一般连接ClistBox类型的变量 响应函数的代码如下 CStringmsg m list GetText m list GetCurSel msg 将列表框中下标为给定值的这一项的名称给msgAfxMessageBox msg 115 在为相关控件连接变量和方法后 开始编程 1 给复选框IDC DATE CHECK添加代码OnDateCheck 方法的实现代码如下 voidCMy9 8Dlg OnDataCheck UpdateData TRUE

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论