传统控件.docx

上传人:b****7 文档编号:9330992 上传时间:2023-02-04 格式:DOCX 页数:59 大小:40.90KB
下载 相关 举报
传统控件.docx_第1页
第1页 / 共59页
传统控件.docx_第2页
第2页 / 共59页
传统控件.docx_第3页
第3页 / 共59页
传统控件.docx_第4页
第4页 / 共59页
传统控件.docx_第5页
第5页 / 共59页
点击查看更多>>
下载资源
资源描述

传统控件.docx

《传统控件.docx》由会员分享,可在线阅读,更多相关《传统控件.docx(59页珍藏版)》请在冰豆网上搜索。

传统控件.docx

传统控件

传统控件

  在上一课的表5.1已经列出了Windows的传统控件及其对应的控件类。

在这些控件中,读者应该重点掌握命令按钮、选择框、单选按钮、编辑框、列表框和组合框。

 

 .1.1传统控件的控件通知消息 

  控件通过向父窗口发送控件通知消息来表明发生了某种事件.例如,当用户在按钮上单击鼠标时,按钮控件会向父窗口发送BN_CLICKED消息.传统控件的通知消息实际上是通过WM_COMMAND消息发给父窗口的(滚动条除外),在该消息的wParam中含有通知消息码(如BN_CLICKED)和控件的ID,在lParam中则包含了控件的句柄. 

  利用ClassWizard可以很容易地为控件通知消息加入消息映射和消息处理函数,这在上一章中已经演示过了.传统控件的消息映射宏是ON_XXXX,其中XXXX表示通知消息码,如BN_CLICKED.ON_XXXX消息映射如下所示,该宏有两个参数,一个是控件的ID,一个是消息处理函数名. 

 ON_XXXX(nID,memberFxn) 

 消息处理函数的声明应该有如下形式:

 

 afx_msgvoidmemberFxn(); 

 例如,某按钮的BN_CLICKED消息的消息映射及其处理函数的声明如下所示 

 ON_BN_CLICKED(IDC_ADD,OnAdd) 

 afx_msgvoidOnAdd(); 

  有时,为了处理方便,需要把多个ID连续的控件发出的相同消息映射到同一个处理函数上.这就要用到ON_CONTROL_RANGE宏.ON_CONTROL_RANGE消息映射宏的第一个参数是控件消息码,第二和第三个参数分别指明了一组连续的控件ID中的头一个和最后一个ID,最后一个参数是消息处理函数名。

例如,要处理一组单选按钮发出的BN_CLICKED消息,相应的消息映射如下所示:

 

ON_CONTROL_RANGE(BN_CLICKED,IDC_FIRST,IDC_LAST,OnRadioClicked) 

 函数OnRadioClicked的声明如下,该函数比上面的OnAdd多了一个参数nID以说明发送通知消息的控件ID. 

 afx_msgvoidOnRadioClicked(UINTnID); 

 ClassWizard不支持ON_CONTROL_RANGE宏,所以需要手工建立消息映射和消息处理函数. 

 提示:

事实上,在使用ClassWizard时只要运用一个小小的技巧,就可以把不同控件的通知消息映射到同一个处理函数上,也可以把一个控件的不同通知消息映射到同一个处理函数上.这个技巧就是在用ClassWizard创建消息处理函数时,指定相同的函数名即可.此方法的优点在于控件的ID不必是连续的,缺点是处理函数没有nID参数,因而不能确定是哪一个控件发送的消息. 

 6.1.2静态控件 

  静态控件包括静态正文(StaticText)和图片控件(Picture)。

静态正文控件用来显示正文。

图片控件可以显示位图、图标、方框和图元文件,在图片控件中显示图片的好处是不必操心图片的重绘问题。

静态控件不能接收用户的输入。

在上一章中,读者已经用过静态正文和组框控件。

图片控件的例子可以在AppWizard创建的IDD_ABOUTBOX对话框模板中找到,在该模板中有一个图片控件用来显示图标。

 

  静态控件的主要起说明和装饰作用。

MFC的CStatic类封装了静态控件。

CStatic类的成员函数Create负责创建静态控件,该函数的声明为 

 

 BOOLCreate(LPCTSTRlpszText,DWORDdwStyle,constRECT&rect,CWnd*pParentWnd,UINTnID=0xffff); 

  参数lpszText指定了控件显示的正文。

dwStyle指定了静态控件的风格,表6.1显示了静态控件的各种风格,dwStyle可将这些风格组合起来。

rect是一个对RECT或CRect结构的引用,用来说明控件的位置和尺寸。

pParentWnd指向父窗口,该参数不能为NULL。

nID则说明了控件的ID。

如果创建成功,该函数返回TRUE,否则返回FALSE. 

 表6.1静态控件的风格 

 控件风格 

 含义 

 SS_BLACKFRAME 

 指定一个具有与窗口边界同色的框(缺省为黑色)。

 

 SS_BLACKRECT 

 指定一个具有与窗口边界同色的实矩形(缺省为黑色)。

 

 SS_CENTER 

 使显示的正文居中对齐,正文可以回绕。

 

 SS_GRAYFRAME 

 指定一个具有与屏幕背景同色的边框。

 

 SS_GRAYRECT 

 指定一个具有与屏幕背景同色的实矩形。

 

 SS_ICON 

 使控件显示一个在资源中定义的图标,图标的名字有Create函数的lpszText参数指定。

 

 SS_LEFT 

 左对齐正文,正文能回绕。

 

 SS_LEFTNOWORDWRAP 

 左对齐正文,正文不能回绕。

 

 SS_NOPREFIX 

 使静态正文串中的&不是一个热键提示符。

 

 SS_NOTIFY 

 使控件能向父窗口发送鼠标事件消息。

 

 SS_RIGHT 

 右对齐正文,可以回绕。

 

 SS_SIMPLE 

 使静态正文在运行时不能被改变并使正文显示在单行中。

 

 SS_USERITEM 

 指定一个用户定义项。

 

 SS_WHITEFRAME 

 指定一个具有与窗口背景同色的框(缺省为白色)。

 

 SS_WHITERECT 

 指定一个具有与窗口背景同色的实心矩形(缺省为白色)。

 

  除了上表中的风格外,一般还要为控件指定WS_CHILD和WS_VISIBLE窗口风格。

一个典型的静态正文控件的风格为WS_CHILD|WS_VISIBLE|SS_LEFT。

 

  对于用对话框模板编辑器创建的静态控件,可以在控件的属性对话框中指定表6.1中列出的控件风格。

例如,可以在静态正文控件的属性对话框中选择Simple,这相当于指定了SS_SIMPLE风格。

 

  Cstatic类主要的成员函数在表6.2中列出。

可以利用CWnd类的成员函数GetWindowText,SetWindowText和GetWindowTextLength等函数来查询和设置静态控件中显示的正文. 

 表6.2CStatic类的主要成员函数 

 函数声明 

 用途 

 HBITMAPSetBitmap(HBITMAPhBitmap); 

 指定要显示的位图。

 

 HBITMAPGetBitmap()const; 

 获取由SetBitmap指定的位图。

 

 HICONSetIcon(HICONhIcon); 

 指定要显示的图标。

 

 HICONGetIcon()const; 

 获取由SetIcon指定的图标。

 

 HCURSORSetCursor(HCURSORhCursor); 

 指定要显示的光标图片。

 

 HCURSORGetCursor(); 

 获取由SetCursor指定的光标。

 

 HENHMETAFILESetEnhMetaFile(HENHMETAFILEhMetaFile); 

 指定要显示的增强图元文件。

 

 HENHMETAFILEGetEnhMetaFile()const; 

 获取由SetEnhMetaFile指定的图元文件。

 

  静态控件较简单,故这里就不举例说明了。

 

 6.1.3按钮控件 

  按钮是指可以响应鼠标点击的小矩形子窗口。

按钮控件包括命令按钮(Pushbutton)、检查框(CheckBox)、单选按钮(RadioButton)、组框(GroupBox)和自绘式按钮(Owner-drawButton)。

命令按钮的作用是对用户的鼠标单击作出反应并触发相应的事件,在按钮中既可以显示正文,也可以显示位图。

选择框控件可作为一种选择标记,可以有选中、不选中和不确定三种状态。

单选按钮控件一般都是成组出现的,具有互斥的性质,即同组单选按钮中只能有一个是被选中的。

组框用来将相关的一些控件聚成一组.自绘式按钮是指由程序而不是系统负责重绘的按钮。

 

  按钮主要是指命令按钮、选择框和单选按钮。

后二者实际上是一种特殊的按钮,它们有选择和未选择状态。

当一个选择框处于选择状态时,在小方框内会出现一个“√”,当单选按钮处于选择状态时,会在圆圈中显示一个黑色实心圆。

此外,检查框还有一种不确定状态,这时检查框呈灰色显示,不能接受用户的输入,以表明控件是无效的或无意义的。

 

  按钮控件会向父窗口发出如表6.3所示的控件通知消息。

 

 表6.3按钮控件的通知消息 

 消息 

 含义 

 BN_CLICKED 

 用户在按钮上单击了鼠标。

 

 BN_DOUBLECLICKED 

 用户在按钮上双击了鼠标。

 

 FC的CButton类封装了按钮控件。

CButton类的成员函数Create负责创建按钮控件,该函数的声明为 

 

 BOOLCreate(LPCTSTRlpszCaption,DWORDdwStyle,constRECT&rect,CWnd*pParentWnd,UINTnID); 

  参数lpszCaption指定了按钮显示的正文。

dwStyle指定了按钮的风格,如表6.4所示,dwStyle可以是这些风格的组合。

rect说明了按钮的位置和尺寸。

pParentWnd指向父窗口,该参数不能为NULL。

nID是按钮的ID。

如果创建成功,该函数返回TRUE,否则返回FALSE. 

   

 表6.4按钮的风格 

 控件风格 

 含义 

 BS_AUTOCHECKBOX 

 同BS_CHECKBOX,不过单击鼠标时按钮会自动反转。

 

 BS_AUTORADIOBUTTON 

 同BS_RADIOBUTTON,不过单击鼠标时按钮会自动反转。

 

 BS_AUTO3STATE 

 同BS_3STATE,不过单击按钮时会改变状态。

 

 BS_CHECKBOX 

 指定在矩形按钮右侧带有标题的选择框。

 

 BS_DEFPUSHBUTTON 

 指定缺省的命令按钮,这种按钮的周围有一个黑框,用户可以按回车键来快速选择该按钮。

 

 BS_GROUPBOX 

 指定一个组框。

 

 BS_LEFTTEXT 

 使控件的标题显示在按钮的左边。

 

 BS_OWNERDRAW 

 指定一个自绘式按钮。

 

 BS_PUSHBUTTON 

 指定一个命令按钮。

 

 BS_RADIOBUTTON 

 指定一个单选按钮,在圆按钮的右边显示正文。

 

 BS_3STATE 

 同BS_CHECKBOX,不过控件有三种状态:

选择、未选择和变灰。

 

 

  除了上表中的风格外,一般还要为控件指定WS_CHILD、WS_VISIBLE和WS_TABSTOP窗口风格,WS_TABSTOP使控件具有Tabstop属性。

创建一个普通按钮应指定的风格为WS_CHILD|WS_VISIBLE|WS_TABSTOP。

创建一个普通检查框应指定风格WS_CHILD|WS_VISIBLE|WS_TABSTOP|BS_AUTOCHECKBOX。

创建组中第一个单选按钮应指定风格WS_CHILD|WS_VISIBLE|WS_TABSTOP|WS_GROUP|BS_AUTORADIOBUTTON,组中其它单选按钮应指定风格则不应该包括WS_TABSTOP和WS_GROUP。

 

  对于用对话框模板编辑器创建的按钮控件,可以在控件的属性对话框中指定表6.4中列出的控件风格。

例如,在命令按钮的属性对话框中选择Defaultbutton,相当于指定了BS_DEFPUSHBUTTON。

 

  CButton类的主要的成员函数有:

 

  UINTGetState()const;

该函数返回按钮控件的各种状态。

可以用下列屏蔽值与函数的返回值相与,以获得各种信息。

 

  0x0003。

用来获取检查框或单选按钮的状态。

0表示未选中,1表示被选中,2表示不确定状态(仅用于检查框)。

 

  0x0004。

用来判断按钮是否是高亮度显示的。

非零值意味着按钮是高亮度显示的。

当用户点击了按钮并按主鼠标左键时,按钮会呈高亮度显示。

 

  0x0008。

非零值表示按钮拥有输入焦点。

 

  voidSetState(BOOLbHighlight);

当参数bHeightlight值为TRUE时,该函数将按钮设置为高亮度状态,否则,去除按钮的高亮度状态。

 

  intGetCheck()const;

返回检查框或单选按钮的选择状态。

返回值0表示按钮未被选择,1表示按钮被选择,2表示按钮处于不确定状态(仅用于检查框)。

 

  voidSetCheck(intnCheck);

设置检查框或单选按钮的选择状态。

参数nCheck值的含义与GetCheck返回值相同。

 

  UINTGetButtonStyle()const;

获得按钮控件的BS_XXXX风格。

 

  voidSetButtonStyle(UINTnStyle,BOOLbRedraw=TRUE);

设置按钮的风格。

参数nStyle指定了按钮的风格。

bRedraw为TRUE则重绘按钮,否则就不重绘。

 

  HBITMAPSetBitmap(HBITMAPhBitmap);

设置按钮显示的位图。

参数hBitmap指定了位图的句柄。

该函数还会返回按钮原来的位图。

 

  HBITMAPGetBitmap()const;

返回以前用SetBitmap设置的按钮位图。

 

  HICONSetIcon(HICONhIcon);

设置按钮显示的图标。

参数hIcon指定了图标的句柄。

该函数还会返回按钮原来的图标。

 

  HICONGetIcon()const;

返回以前用SetIcon设置的按钮图标。

 

  HCURSORSetCursor(HCURSORhCursor);

设置按钮显示的光标图。

参数hCursor指定了光标的句柄。

该函数还会返回按钮原来的光标。

 

  HCURSORGetCursor();

返回以前用GetCursor设置的光标。

 

  另外,可以使用下列的一些与按钮控件有关的CWnd成员函数来设置或查询按钮的状态。

用这些函数的好处在于不必构建按钮控件对象,只要知道按钮的ID,就可以直接设置或查询按钮。

 

  voidCheckDlgButton(intnIDButton,UINTnCheck);

用来设置按钮的选择状态。

参数nIDButton指定了按钮的ID。

nCheck的值0表示按钮未被选择,1表示按钮被选择,2表示按钮处于不确定状态。

 

  voidCheckRadioButton(intnIDFirstButton,intnIDLastButton,intnIDCheckButton);

用来选择组中的一个单选按钮。

参数nIDFirstButton指定了组中第一个按钮的ID,nIDLastButton指定了组中最后一个按钮的ID,nIDCheckButton指定了要选择的按钮的ID。

 

  intGetCheckedRadioButton(intnIDFirstButton,intnIDLastButton);

该函数用来获得一组单选按钮中被选中按钮的ID。

参数nIDFirstButton说明了组中第一个按钮的ID,nIDLastButton说明了组中最后一个按钮的ID。

 

  UINTIsDlgButtonChecked(intnIDButton)const;

返回检查框或单选按钮的选择状态。

返回值0表示按钮未被选择,1表示按钮被选择,2表示按钮处于不确定状态(仅用于检查框)。

 

  可以调用CWnd成员函数GetWindowText,GetWindowTextLength和SetWindowText来查询或设置按钮中显示的正文. 

  MFC还提供了CButton的派生类CBitmapButton。

利用该类可以创建一个拥有四幅位图的命令按钮,按钮在不同状态时会显示不同的位图,这样可以使界面显得生动活泼。

如果读者对CBitmapButton感兴趣,可以参看VC5.0随盘提供的MFC例子CTRLTEST。

 

  在上一章的Register例子中已演示了各种按钮控件的使用,故这里就不再举例了。

 

   

 6.1.4编辑框控件 

  编辑框(EditBox)控件实际上是一个简易的正文编辑器,用户可以在编辑框中输入并编辑正文。

编辑框既可以是单行的,也可以是多行的,多行编辑框是从零开始编行号的.在一个多行编辑框中,除了最后一行外,每一行的结尾处都有一对回车换行符(用"\r\n"表示).这对回车换行符是正文换行的标志,在屏幕上是不可见的. 

  编辑框控件会向父窗口发出如表6.5所示的控件通知消息。

 

   表6.5 

 消息 

 含义 

 EN_CHANGE 

 编辑框的内容被用户改变了。

与EN_UPDATE不同,该消息是在编辑框显示的正文被刷新后才发出的。

 

 EN_ERRSPACE 

 编辑框控件无法申请足够的动态内存来满足需要。

 

 EN_HSCROLL 

 用户在水平滚动条上单击鼠标。

 

 EN_KILLFOCUS 

 编辑框失去输入焦点。

 

 EN_MAXTEXT 

 输入的字符超过了规定的最大字符数。

在没有ES_AUTOHSCROLL或ES_AUTOVSCROLL的编辑框中,当正文超出了编辑框的边框时也会发出该消息。

 

 EN_SETFOCUS 

 编辑框获得输入焦点。

 

 EN_UPDATE 

 在编辑框准备显示改变了的正文时发送该消息。

 

 EN_VSCROLL 

 用户在垂直滚动条上单击鼠标。

 

 

   

  MFC的CEdit类封装了编辑框控件。

CEdit类的成员函数Create负责创建按钮控件,该函数的声明为 

 

 BOOLCreate(DWORDdwStyle,constRECT&rect,CWnd*pParentWnd,UINTnID); 

  参数dwStyle指定了编辑框控件风格,如表6.6所示,dwStyle可以是这些风格的组合。

rect指定了编辑框的位置和尺寸。

pParentWnd指定了父窗口,不能为NULL。

编辑框的ID由nID指定。

如果创建成功,该函数返回TRUE,否则返回FALSE. 

   表6.6编辑框控件的风格 

 控件风格 

 含义 

 ES_AUTOHSCROLL 

 当用户在行尾键入一个字符时,正文将自动向右滚动10个字符,当用户按回车键时,正文总是滚向左边。

 

 ES_AUTOVSCROLL 

 当用户在最后一个可见行按回车键时,正文向上滚动一页。

 

 ES_CENTER 

 在多行编辑框中使正文居中。

 

 ES_LEFT 

 左对齐正文。

 

 ES_LOWERCASE 

 把用户输入的字母统统转换成小写字母。

 

 ES_MULTILINE 

 指定一个多行编辑器。

若多行编辑器不指定ES_AUTOHSCROLL风格,则会自动换行,若不指定ES_AUTOVSCROLL,则多行编辑器会在窗口中正文装满时发出警告声响。

 

 ES_NOHIDESEL 

 缺省时,当编辑框失去输入焦点后会隐藏所选的正文,当获得输入焦点时又显示出来。

设置该风格可禁止这种缺省行为。

 

 ES_OEMCONVERT 

 使编辑框中的正文可以在ANSI字符集和OEM字符集之间相互转换。

这在编辑框中包含文件名时是很有用的。

 

 ES_PASSWORD 

 使所有键入的字符都用“*”来显示。

 

 ES_RIGHT 

 右对齐正文。

 

 ES_UPPERCASE 

 把用户输入的字母统统转换成大写字母。

 

 ES_READONLY 

 将编辑框设置成只读的。

 

 ES_WANTRETURN 

 使多行编辑器接收回车键输入并换行。

如果不指定该风格,按回车键会选择缺省的命令按钮,这往往会导致对话框的关闭。

 

 

  除了上表中的风格外,一般还要为控件指定WS_CHILD、WS_VISIBLE、WS_TABSTOP和WS_BORDER窗口风格,WS_BORDER使控件带边框。

创建一个普通的单行编辑框应指定风格为WS_CHILD|WS_VISIBLE|WS_TABSTOP|WS_BORDER|ES_LEFT|ES_AUTOHSCROLL,这将创建一个带边框、左对齐正文、可水平滚动的单行编辑器。

要创建一个普通多行编辑框,还要附加ES_MULTILINE|ES_WANTRETURN|ES_AUTOVSCROLL|WS_HSCROLL|WS_VSCROLL风格,这将创建一个可水平和垂直滚动的,带有水平和垂直滚动条的多行编辑器。

 

  对于用对话框模板编辑器创建的编辑框控件,可以在控件的属性对话框中指定表6.6中列出的控件风格。

例如,在属性对话框中选择Multi-line项,相当与指定了ES_MULTILINE风格。

 

  编辑框支持剪贴板操作。

CEdit类提供了一些与剪贴板有关的成员函数,如表6.7所示。

 

   表6.7与剪切板有关的CEdit成员函数 

 函数声明 

 用途 

 voidClear() 

 清除编辑框中被选择的正文。

 

 voidCopy() 

 把在编辑框中选择的正文拷贝到剪贴板中。

 

 voidCut() 

 清除编辑框中被选择的正文并把这些正文拷贝到剪贴板中。

 

 voidPaste() 

 将剪贴板中的正文插入到编辑框的当前插入符处。

 

 BOOLUndo() 

 撤消上一次键入。

对于单行编辑框,该函数总返回TRUE,对于多行编辑框,返回TRUE表明操作成功,否则返回FALSE。

 

  可以用下列CEdit或CWnd类的成员函数来查询编辑框。

在学习下面的函数时,读者会经常遇到术语字符索引.字符的字符索引是指从编辑框的开头字符开始的字符编号,它是从零开始编号的.也就是说,字符索引实际上是指当把整个编辑正文看作一个字符串数组时,该字符所在的数组元素的下标. 

   

  intGetWindowText(LPTSTRlpszStringBuf,intnMaxCount)const;

voidGe

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > IT计算机 > 电脑基础知识

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1