第四章 窗口控件.docx

上传人:b****5 文档编号:8627710 上传时间:2023-02-01 格式:DOCX 页数:30 大小:32.23KB
下载 相关 举报
第四章 窗口控件.docx_第1页
第1页 / 共30页
第四章 窗口控件.docx_第2页
第2页 / 共30页
第四章 窗口控件.docx_第3页
第3页 / 共30页
第四章 窗口控件.docx_第4页
第4页 / 共30页
第四章 窗口控件.docx_第5页
第5页 / 共30页
点击查看更多>>
下载资源
资源描述

第四章 窗口控件.docx

《第四章 窗口控件.docx》由会员分享,可在线阅读,更多相关《第四章 窗口控件.docx(30页珍藏版)》请在冰豆网上搜索。

第四章 窗口控件.docx

第四章窗口控件

第四章窗口控件

4.1Button

按钮窗口(控件)在MFC中使用CButton表示,CButton包含了三种样式的按钮,PushButton,CheckBox,RadioBox。

所以在利用CButton对象生成按钮窗口时需要指明按钮的风格。

创建按钮:

BOOLCButton:

:

Create(LPCTSTRlpszCaption,DWORDdwStyle,constRECT&rect,CWnd*pParentWnd,UINTnID);其中lpszCaption是按钮上显示的文字,dwStyle为按钮风格,除了Windows风格可以使用外(如WS_CHILD|WS_VISUBLE|WS_BORDER)还有按钮专用的一些风格。

●BS_AUTOCHECKBOX检查框,按钮的状态会自动改变Sameasacheckbox,exceptthatacheckmarkappearsinthecheckboxwhentheuserselectsthebox;thecheckmarkdisappearsthenexttimetheuserselectsthebox.

 

●BS_AUTORADIOBUTTON圆形选择按钮,按钮的状态会自动改变Sameasaradiobutton,exceptthatwhentheuserselectsit,thebuttonautomaticallyhighlightsitselfandremovestheselectionfromanyotherradiobuttonswiththesamestyleinthesamegroup.

 

●BS_AUTO3STATE允许按钮有三种状态即:

选中,未选中,未定Sameasathree-statecheckbox,exceptthattheboxchangesitsstatewhentheuserselectsit.

 

●BS_CHECKBOX检查框Createsasmallsquarethathastextdisplayedtoitsright(unlessthisstyleiscombinedwiththeBS_LEFTTEXTstyle).

 

●BS_DEFPUSHBUTTON默认普通按钮Createsabuttonthathasaheavyblackborder.TheusercanselectthisbuttonbypressingtheENTERkey.Thisstyleenablestheusertoquicklyselectthemostlikelyoption(thedefaultoption).

 

●BS_LEFTTEXT左对齐文字Whencombinedwitharadio-buttonorcheck-boxstyle,thetextappearsontheleftsideoftheradiobuttonorcheckbox.

 

●BS_OWNERDRAW自绘按钮Createsanowner-drawnbutton.TheframeworkcallstheDrawItemmemberfunctionwhenavisualaspectofthebuttonhaschanged.ThisstylemustbesetwhenusingtheCBitmapButtonclass.

 

●BS_PUSHBUTTON普通按钮CreatesapushbuttonthatpostsaWM_COMMANDmessagetotheownerwindowwhentheuserselectsthebutton.

 

●BS_RADIOBUTTON圆形选择按钮Createsasmallcirclethathastextdisplayedtoitsright(unlessthisstyleiscombinedwiththeBS_LEFTTEXTstyle).Radiobuttonsareusuallyusedingroupsofrelatedbutmutuallyexclusivechoices.

 

●BS_3STATE允许按钮有三种状态即:

选中,未选中,未定Sameasacheckbox,exceptthattheboxcanbedimmedaswellaschecked.Thedimmedstatetypicallyisusedtoshowthatacheckboxhasbeendisabled.

rect为窗口所占据的矩形区域,pParentWnd为父窗口指针,nID为该窗口的ID值。

获取/改变按钮状态:

对于检查按钮和圆形按钮可能有两种状态,选中和未选中,如果设置了BS_3STATE或BS_AUTO3STATE风格就可能出现第三种状态:

未定,这时按钮显示灰色。

通过调用intCButton:

:

GetCheck()得到当前是否被选中,返回0:

未选中,1:

选中,2:

未定。

调用voidCButton:

:

SetCheck(intnCheck);设置当前选中状态。

处理按钮消息:

要处理按钮消息需要在父窗口中进行消息映射,映射宏为ON_BN_CLICKED(id,memberFxn)id为按钮的ID值,就是创建时指定的nID值。

处理函数原型为afx_msgvoidmemberFxn();

4.2StaticBox

静态文本控件的功能比较简单,可作为显示字符串,图标,位图用。

创建一个窗口可以使用成员函数:

BOOLCStatic:

:

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

其中dwStyle将指明该窗口的风格,除了子窗口常用的风格WS_CHILD,WS_VISIBLE外,你可以针对静态控件指明专门的风格。

●SS_CENTER,SS_LEFT,SS_RIGHT指明字符显示的对齐方式。

●SS_GRAYRECT显示一个灰色的矩形

●SS_NOPREFIX如果指明该风格,对于字符&将直接显示,否则&将作为转义符,&将不显示而在其后的字符将有下划线,如果需要直接显示&必须使用&&表示。

●SS_BITMAP显示位图

●SS_ICON显示图标

●SS_CENTERIMAGE图象居中显示

控制显示的文本利用成员函数SetWindowText/GetWindowText用于设置/得到当前显示的文本。

控制显示的图标利用成员函数SetIcon/GetIcon用于设置/得到当前显示的图标。

控制显示的位图利用成员函数SetBitmap/GetBitmap用于设置/得到当前显示的位图。

下面一段代码演示如何创建一个显示位图的静态窗口并设置位图

CStatic*pstaDis=newCStatic;

pstaDis->Create("",WS_CHILD|WS_VISIBLE|SS_BITMAP|SSCENTERIMAGE,CRect(0,0,40,40),pWnd,1);

CBitmapbmpLoad;

bmpLoad.LoadBitmap(IDB_TEST);

pstaDis->SetBitmap(bmpLoad.Detach());

4.3EditBox

Edit窗口是用来接收用户输入最常用的一个控件。

创建一个输入窗口可以使用成员函数:

BOOLCEdit:

:

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

其中dwStyle将指明该窗口的风格,除了子窗口常用的风格WS_CHILD,WS_VISIBLE外,你可以针对输入控件指明专门的风格。

●ES_AUTOHSCROLL,ES_AUTOVSCROLL指明输入文字超出显示范围时自动滚动。

●ES_CENTER,ES_LEFT,ES_RIGHT指定对齐方式

●ES_MULTILINE是否允许多行输入

●ES_PASSWORD是否为密码输入框,如果指明该风格则输入的文字显示为*

●ES_READONLY是否为只读

●ES_UPPERCASE,ES_LOWERCASE显示大写/小写字符

控制显示的文本利用成员函数SetWindowText/GetWindowText用于设置/得到当前显示的文本。

通过GetLimitText/SetLimitText可以得到/设置在输入框中输入的字符数量。

由于在输入时用户可能选择某一段文本,所以通过voidCEdit:

:

GetSel(int&nStartChar,int&nEndChar)得到用户选择的字符范围,通过调用voidCEdit:

:

SetSel(intnStartChar,intnEndChar,BOOLbNoScroll=FALSE)可以设置当前选择的文本范围,如果指定nStartChar=0nEndChar=-1则表示选中所有的文本。

voidReplaceSel(LPCTSTRlpszNewText,BOOLbCanUndo=FALSE)可以将选中的文本替换为指定的文字。

此外输入框还有一些和剪贴板有关的功能,voidClear();删除选中的文本,voidCopy();可将选中的文本送入剪贴板,voidPaste();将剪贴板中内容插入到当前输入框中光标位置,voidCut();相当于Copy和Clear结合使用。

最后介绍一下输入框几种常用的消息映射宏:

●ON_EN_CHANGE输入框中文字更新后产生

●ON_EN_ERRSPACE输入框无法分配内存时产生

●ON_EN_KILLFOCUS/ON_EN_SETFOCUS在输入框失去/得到输入焦点时产生

使用以上几种消息映射的方法为定义原型如:

afx_msgvoidmemberFxn();的函数,并且定义形式如ON_Notification(id,memberFxn)的消息映射。

如果在对话框中使用输入框,ClassWizard会自动列出相关的消息,并能自动产生消息映射代码。

4.4ScrollBar

ScrollBar一般不会单独使用,因为SpinCtrl可以取代滚动条的一部分作用,但是如果你需要自己生成派生窗口,滚动条还是会派上一些用场。

创建一个滚动条可以使用成员函数:

BOOLCEdit:

:

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

其中dwStyle将指明该窗口的风格,除了子窗口常用的风格WS_CHILD,WS_VISIBLE外,你可以针对滚动条指明专门的风格。

●SBS_VERT风格将创建一个垂直的滚动条。

●SBS_HORZ风格将创建一个水平的滚动条。

在创建滚动条后需要调用voidSetScrollRange(intnMinPos,intnMaxPos,BOOLbRedraw=TRUE)设置滚动范围,

intGetScrollPos()/intSetScrollPos()用来得到和设置当前滚动条的位置。

voidShowScrollBar(BOOLbShow=TRUE);用来显示/隐藏滚动条。

BOOLEnableScrollBar(UINTnArrowFlags=ESB_ENABLE_BOTH)用来设置滚动条上箭头是否为允许状态。

nArrowFlags可取以下值:

●ESB_ENABLE_BOTH两个箭头都为允许状态

●ESB_DISABLE_LTUP上/左箭头为禁止状态

●ESB_DISABLE_RTDN下/右箭头为禁止状态

●ESB_DISABLE_BOTH两个箭头都为禁止状态

如果需要在滚动条位置被改变时得到通知,需要在父窗口中定义对消息WM_VSCROLL/WM_HSCROLL的映射。

方法为在父窗口类中重载

afx_msgvoidOnVScroll(UINTnSBCode,UINTnPos,CScrollBar*pScrollBar)/afx_msgvoidOnHScroll(UINTnSBCode,UINTnPos,CScrollBar*pScrollBar)

所使用的消息映射宏为:

ON_WM_VSCROLL(),ON_WM_HSCROLL(),在映射宏中不需要指明滚动条的ID,因为所有滚动条的滚动消息都由同样的函数处理。

在OnHScroll/OnVScroll的第三个参数会指明当前滚动条的指针。

第一个参数表示滚动条上发生的动作,可取以下值:

●SB_TOP/SB_BOTTOM已滚动到顶/底部

●SB_LINEUP/SB_LINEDOWN向上/下滚动一行

●SB_PAGEDOWN/SB_PAGEUP向上/下滚动一页

●SB_THUMBPOSITION/SB_THUMBTRACK滚动条拖动到某一位置,参数nPos指明当前位置(参数nPos在其它的情况下是无效的)

●SB_ENDSCROLL滚动条拖动完成(用户松开鼠标)

4.5ListBox/CheckListBox

ListBox窗口用来列出一系列的文本,每条文本占一行。

创建一个列表窗口可以使用成员函数:

BOOLCListBox:

:

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

其中dwStyle将指明该窗口的风格,除了子窗口常用的风格WS_CHILD,WS_VISIBLE外,你可以针对列表控件指明专门的风格。

●LBS_MULTIPLESEL指明列表框可以同时选择多行

●LBS_EXTENDEDSEL可以通过按下Shift/Ctrl键选择多行

●LBS_SORT所有的行按照字母顺序进行排序

在列表框生成后需要向其中加入或是删除行,可以利用:

intAddString(LPCTSTRlpszItem)添加行,

intDeleteString(UINTnIndex)删除指定行,

intInsertString(intnIndex,LPCTSTRlpszItem)将行插入到指定位置。

voidResetContent()可以删除列表框中所有行。

通过调用intGetCount()得到当前列表框中行的数量。

如果需要得到/设置当前被选中的行,可以调用intGetCurSel()/intSetCurSel(intiIndex)。

如果你指明了选择多行的风格,你就需要先调用intGetSelCount()得到被选中的行的数量,然后intGetSelItems(intnMaxItems,LPINTrgIndex)得到所有选中的行,参数rgIndex为存放被选中行的数组。

通过调用intGetLBText(intnIndex,LPTSTRlpszText)得到列表框内指定行的字符串。

此外通过调用intFindString(intnStartAfter,LPCTSTRlpszItem)可以在当前所有行中查找指定的字符传的位置,nStartAfter指明从那一行开始进行查找。

intSelectString(intnStartAfter,LPCTSTRlpszItem)可以选中包含指定字符串的行。

在MFC4.2版本中添加了CCheckListBox类,该类是由CListBox派生并拥有CListBox的所有功能,不同的是可以在每行前加上一个检查框。

必须注意的是在创建时必须指明LBS_OWNERDRAWFIXED或LBS_OWNERDRAWVARIABLE风格。

通过voidSetCheckStyle(UINTnStyle)/UINTGetCheckStyle()可以设置/得到检查框的风格,关于检查框风格可以参考4.1Button中介绍。

通过voidSetCheck(intnIndex,intnCheck)/intGetCheck(intnIndex)可以设置和得到某行的检查状态,关于检查框状态可以参考4.1Button中介绍。

最后介绍一下列表框几种常用的消息映射宏:

●ON_LBN_DBLCLK鼠标双击

●ON_EN_ERRSPACE输入框无法分配内存时产生

●ON_EN_KILLFOCUS/ON_EN_SETFOCUS在输入框失去/得到输入焦点时产生

●ON_LBN_SELCHANGE选择的行发生改变

使用以上几种消息映射的方法为定义原型如:

afx_msgvoidmemberFxn();的函数,并且定义形式如ON_Notification(id,memberFxn)的消息映射。

如果在对话框中使用列表框,ClassWizard会自动列出相关的消息,并能自动产生消息映射代码。

4.6ComboBox/ComboBoxEx

组合窗口是由一个输入框和一个列表框组成。

创建一个组合窗口可以使用成员函数:

BOOLCListBox:

:

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

其中dwStyle将指明该窗口的风格,除了子窗口常用的风格WS_CHILD,WS_VISIBLE外,你可以针对列表控件指明专门的风格。

●CBS_DROPDOWN下拉式组合框

●CBS_DROPDOWNLIST下拉式组合框,但是输入框内不能进行输入

●CBS_SIMPLE输入框和列表框同时被显示

●LBS_SORT所有的行按照字母顺序进行排序

由于组合框内包含了列表框,所以列表框的功能都能够使用,如可以利用:

intAddString(LPCTSTRlpszItem)添加行,

intDeleteString(UINTnIndex)删除指定行,

intInsertString(intnIndex,LPCTSTRlpszItem)将行插入到指定位置。

voidResetContent()可以删除列表框中所有行。

通过调用intGetCount()得到当前列表框中行的数量。

如果需要得到/设置当前被选中的行的位置,可以调用intGetCurSel()/intSetCurSel(intiIndex)。

通过调用intGetLBText(intnIndex,LPTSTRlpszText)得到列表框内指定行的字符串。

此外通过调用intFindString(intnStartAfter,LPCTSTRlpszItem)可以在当前所有行中查找指定的字符传的位置,nStartAfter指明从那一行开始进行查找。

intSelectString(intnStartAfter,LPCTSTRlpszItem)可以选中包含指定字符串的行。

此外输入框的功能都能够使用,如可以利用:

DWORDGetEditSel()/BOOLSetEditSel(intnStartChar,intnEndChar)得到或设置输入框中被选中的字符位置。

BOOLLimitText(intnMaxChars)设置输入框中可输入的最大字符数。

输入框的剪贴板功能Copy,Clear,Cut,Paste动可以使用。

最后介绍一下列表框几种常用的消息映射宏:

●ON_CBN_DBLCLK鼠标双击

●ON_CBN_DROPDOWN列表框被弹出

●ON_CBN_KILLFOCUS/ON_CBN_SETFOCUS在输入框失去/得到输入焦点时产生

●ON_CBN_SELCHANGE列表框中选择的行发生改变

●ON_CBN_EDITUPDATE输入框中内容被更新

使用以上几种消息映射的方法为定义原型如:

afx_msgvoidmemberFxn();的函数,并且定义形式如ON_Notification(id,memberFxn)的消息映射。

如果在对话框中使用组合框,ClassWizard会自动列出相关的消息,并能自动产生消息映射代码。

在MFC4.2中对组合框进行了增强,你可以在组合框中使用ImageList,有一个新的类CComboBoxEx(由CComboBox派生)来实现这一功能。

在CComboBoxEx类中添加了一些新的成员函数来实现新的功能:

首先你需要调用

CImageList*SetImageList(CImageList*pImageList);来设置ImageList,然后调用

intInsertItem(constCOMBOBOXEXITEM*pCBItem);来添加行,其中COMBOBOXEXITEM定义如下:

typedefstruct

{

UINTmask;

intiItem;

LPTSTRpszText;

intcchTextMax;

intiImage;

intiSelectedImage;

intiOverlay;

intiIndent;

LPARAMlParam;

}COMBOBOXEXITEM,*PCOMBOBOXEXITEM;

你需要设置mask=CBEIF_IMAGE|CBEIF_TEXT,并设置iItem为插入位置,设置pszText为显示字符串,设置iImage为显示的图标索引。

下面的代码演示了如何进行插入:

/*m_cbeWnd为已经创建的CComboBox对象

m_list为CImageList对象IDB_IMG为16*(16*4)的位图,每个图

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

当前位置:首页 > 初中教育

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

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