ImageVerifierCode 换一换
格式:DOCX , 页数:30 ,大小:32.23KB ,
资源ID:8627710      下载积分:12 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/8627710.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(第四章 窗口控件.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

第四章 窗口控件.docx

1、第四章 窗口控件第四章 窗口控件4.1 Button按钮窗口(控件)在MFC中使用CButton表示,CButton包含了三种样式的按钮,Push Button,Check Box,Radio Box。所以在利用CButton对象生成按钮窗口时需要指明按钮的风格。创建按钮:BOOL CButton:Create( LPCTSTR lpszCaption, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID );其中lpszCaption是按钮上显示的文字,dwStyle为按钮风格,除了Windows风格可以使用外(如WS_CH

2、ILD|WS_VISUBLE|WS_BORDER)还有按钮专用的一些风格。 BS_AUTOCHECKBOX 检查框,按钮的状态会自动改变 Same as a check box, except that a check mark appears in the check box when the user selects the box; the check mark disappears the next time the user selects the box. BS_AUTORADIOBUTTON 圆形选择按钮,按钮的状态会自动改变 Same as a radio button, ex

3、cept that when the user selects it, the button automatically highlights itself and removes the selection from any other radio buttons with the same style in the same group. BS_AUTO3STATE 允许按钮有三种状态即:选中,未选中,未定 Same as a three-state check box, except that the box changes its state when the user selects

4、 it. BS_CHECKBOX 检查框 Creates a small square that has text displayed to its right (unless this style is combined with the BS_LEFTTEXT style). BS_DEFPUSHBUTTON 默认普通按钮 Creates a button that has a heavy black border. The user can select this button by pressing the ENTER key. This style enables the user

5、to quickly select the most likely option (the default option). BS_LEFTTEXT 左对齐文字 When combined with a radio-button or check-box style, the text appears on the left side of the radio button or check box. BS_OWNERDRAW 自绘按钮 Creates an owner-drawn button. The framework calls the DrawItem member function

6、 when a visual aspect of the button has changed. This style must be set when using the CBitmapButton class. BS_PUSHBUTTON 普通按钮 Creates a pushbutton that posts a WM_COMMAND message to the owner window when the user selects the button. BS_RADIOBUTTON 圆形选择按钮 Creates a small circle that has text display

7、ed to its right (unless this style is combined with the BS_LEFTTEXT style). Radio buttons are usually used in groups of related but mutually exclusive choices. BS_3STATE 允许按钮有三种状态即:选中,未选中,未定 Same as a check box, except that the box can be dimmed as well as checked. The dimmed state typically is used

8、 to show that a check box has been disabled. rect为窗口所占据的矩形区域,pParentWnd为父窗口指针,nID为该窗口的ID值。 获取/改变按钮状态:对于检查按钮和圆形按钮可能有两种状态,选中和未选中,如果设置了BS_3STATE或BS_AUTO3STATE风格就可能出现第三种状态:未定,这时按钮显示灰色。通过调用int CButton:GetCheck( ) 得到当前是否被选中,返回0:未选中,1:选中,2:未定。调用void CButton:SetCheck( int nCheck );设置当前选中状态。处理按钮消息:要处理按钮消息需要在

9、父窗口中进行消息映射,映射宏为ON_BN_CLICKED( id, memberFxn )id为按钮的ID值,就是创建时指定的nID值。处理函数原型为afx_msg void memberFxn( );4.2 Static Box 静态文本控件的功能比较简单,可作为显示字符串,图标,位图用。创建一个窗口可以使用成员函数: BOOL CStatic:Create( LPCTSTR lpszText, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID = 0xffff ); 其中dwStyle将指明该窗口的风格,除了子窗口常用的

10、风格WS_CHILD,WS_VISIBLE外,你可以针对静态控件指明专门的风格。 SS_CENTER,SS_LEFT,SS_RIGHT 指明字符显示的对齐方式。 SS_GRAYRECT 显示一个灰色的矩形 SS_NOPREFIX 如果指明该风格,对于字符&将直接显示,否则&将作为转义符,&将不显示而在其后的字符将有下划线,如果需要直接显示&必须使用&表示。 SS_BITMAP 显示位图 SS_ICON 显示图标 SS_CENTERIMAGE 图象居中显示 控制显示的文本利用成员函数SetWindowText/GetWindowText用于设置/得到当前显示的文本。 控制显示的图标利用成员函数S

11、etIcon/GetIcon用于设置/得到当前显示的图标。 控制显示的位图利用成员函数SetBitmap/GetBitmap用于设置/得到当前显示的位图。下面一段代码演示如何创建一个显示位图的静态窗口并设置位图 CStatic* pstaDis=new CStatic; pstaDis-Create(,WS_CHILD|WS_VISIBLE|SS_BITMAP|SSCENTERIMAGE,CRect(0,0,40,40),pWnd,1); CBitmap bmpLoad; bmpLoad.LoadBitmap(IDB_TEST); pstaDis-SetBitmap(bmpLoad.Detac

12、h(); 4.3 Edit Box Edit窗口是用来接收用户输入最常用的一个控件。创建一个输入窗口可以使用成员函数: BOOL CEdit:Create( LPCTSTR lpszText, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID = 0xffff ); 其中dwStyle将指明该窗口的风格,除了子窗口常用的风格WS_CHILD,WS_VISIBLE外,你可以针对输入控件指明专门的风格。 ES_AUTOHSCROLL,ES_AUTOVSCROLL 指明输入文字超出显示范围时自动滚动。 ES_CENTER,ES_L

13、EFT,ES_RIGHT 指定对齐方式 ES_MULTILINE 是否允许多行输入 ES_PASSWORD 是否为密码输入框,如果指明该风格则输入的文字显示为* ES_READONLY 是否为只读 ES_UPPERCASE,ES_LOWERCASE 显示大写/小写字符 控制显示的文本利用成员函数SetWindowText/GetWindowText用于设置/得到当前显示的文本。 通过GetLimitText/SetLimitText可以得到/设置在输入框中输入的字符数量。 由于在输入时用户可能选择某一段文本,所以通过void CEdit:GetSel( int& nStartChar, int

14、& nEndChar )得到用户选择的字符范围,通过调用void CEdit:SetSel( int nStartChar, int nEndChar, BOOL bNoScroll = FALSE )可以设置当前选择的文本范围,如果指定nStartChar=0 nEndChar=-1则表示选中所有的文本。void ReplaceSel( LPCTSTR lpszNewText, BOOL bCanUndo = FALSE )可以将选中的文本替换为指定的文字。 此外输入框还有一些和剪贴板有关的功能,void Clear( );删除选中的文本,void Copy( );可将选中的文本送入剪贴板,

15、void Paste( );将剪贴板中内容插入到当前输入框中光标位置,void Cut( );相当于Copy和Clear结合使用。 最后介绍一下输入框几种常用的消息映射宏: ON_EN_CHANGE 输入框中文字更新后产生 ON_EN_ERRSPACE 输入框无法分配内存时产生 ON_EN_KILLFOCUS / ON_EN_SETFOCUS 在输入框失去/得到输入焦点时产生 使用以上几种消息映射的方法为定义原型如:afx_msg void memberFxn( );的函数,并且定义形式如ON_Notification( id, memberFxn )的消息映射。如果在对话框中使用输入框,Cl

16、ass Wizard会自动列出相关的消息,并能自动产生消息映射代码。4.4 Scroll Bar Scroll Bar一般不会单独使用,因为SpinCtrl可以取代滚动条的一部分作用,但是如果你需要自己生成派生窗口,滚动条还是会派上一些用场。创建一个滚动条可以使用成员函数: : BOOL CEdit:Create( LPCTSTR lpszText, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID = 0xffff ); 其中dwStyle将指明该窗口的风格,除了子窗口常用的风格WS_CHILD,WS_VISIBLE外,你

17、可以针对滚动条指明专门的风格。 SBS_VERT 风格将创建一个垂直的滚动条。 SBS_HORZ 风格将创建一个水平的滚动条。 在创建滚动条后需要调用void SetScrollRange( int nMinPos, int nMaxPos, BOOL bRedraw = TRUE )设置滚动范围, int GetScrollPos( )/int SetScrollPos( )用来得到和设置当前滚动条的位置。 void ShowScrollBar( BOOL bShow = TRUE );用来显示/隐藏滚动条。 BOOL EnableScrollBar( UINT nArrowFlags =

18、ESB_ENABLE_BOTH )用来设置滚动条上箭头是否为允许状态。nArrowFlags可取以下值: ESB_ENABLE_BOTH 两个箭头都为允许状态 ESB_DISABLE_LTUP 上/左箭头为禁止状态 ESB_DISABLE_RTDN 下/右箭头为禁止状态 ESB_DISABLE_BOTH 两个箭头都为禁止状态 如果需要在滚动条位置被改变时得到通知,需要在父窗口中定义对消息WM_VSCROLL/WM_HSCROLL的映射。方法为在父窗口类中重载 afx_msg void OnVScroll( UINT nSBCode, UINT nPos, CScrollBar* pScroll

19、Bar )/afx_msg void OnHScroll( UINT nSBCode, UINT nPos, CScrollBar* pScrollBar ) 所使用的消息映射宏为:ON_WM_VSCROLL( ),ON_WM_HSCROLL( ),在映射宏中不需要指明滚动条的ID,因为所有滚动条的滚动消息都由同样的函数处理。在OnHScroll/OnVScroll的第三个参数会指明当前滚动条的指针。第一个参数表示滚动条上发生的动作,可取以下值: SB_TOP/SB_BOTTOM 已滚动到顶/底部 SB_LINEUP/SB_LINEDOWN 向上/下滚动一行 SB_PAGEDOWN/SB_PA

20、GEUP 向上/下滚动一页 SB_THUMBPOSITION/SB_THUMBTRACK 滚动条拖动到某一位置,参数nPos指明当前位置(参数nPos在其它的情况下是无效的) SB_ENDSCROLL 滚动条拖动完成(用户松开鼠标)4.5 List Box/Check List Box ListBox窗口用来列出一系列的文本,每条文本占一行。创建一个列表窗口可以使用成员函数: BOOL CListBox:Create( LPCTSTR lpszText, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID = 0xffff )

21、; 其中dwStyle将指明该窗口的风格,除了子窗口常用的风格WS_CHILD,WS_VISIBLE外,你可以针对列表控件指明专门的风格。 LBS_MULTIPLESEL 指明列表框可以同时选择多行 LBS_EXTENDEDSEL 可以通过按下Shift/Ctrl键选择多行 LBS_SORT 所有的行按照字母顺序进行排序 在列表框生成后需要向其中加入或是删除行,可以利用: int AddString( LPCTSTR lpszItem )添加行, int DeleteString( UINT nIndex )删除指定行, int InsertString( int nIndex, LPCTST

22、R lpszItem )将行插入到指定位置。 void ResetContent( )可以删除列表框中所有行。 通过调用int GetCount( )得到当前列表框中行的数量。 如果需要得到/设置当前被选中的行,可以调用int GetCurSel( )/int SetCurSel(int iIndex)。如果你指明了选择多行的风格,你就需要先调用int GetSelCount( )得到被选中的行的数量,然后int GetSelItems( int nMaxItems, LPINT rgIndex )得到所有选中的行,参数rgIndex为存放被选中行的数组。通过调用int GetLBText(

23、int nIndex, LPTSTR lpszText )得到列表框内指定行的字符串。 此外通过调用int FindString( int nStartAfter, LPCTSTR lpszItem )可以在当前所有行中查找指定的字符传的位置,nStartAfter指明从那一行开始进行查找。 int SelectString( int nStartAfter, LPCTSTR lpszItem )可以选中包含指定字符串的行。 在MFC 4.2版本中添加了CCheckListBox类,该类是由CListBox派生并拥有CListBox的所有功能,不同的是可以在每行前加上一个检查框。必须注意的是在

24、创建时必须指明LBS_OWNERDRAWFIXED或LBS_OWNERDRAWVARIABLE风格。 通过void SetCheckStyle( UINT nStyle )/UINT GetCheckStyle( )可以设置/得到检查框的风格,关于检查框风格可以参考4.1 Button中介绍。通过void SetCheck( int nIndex, int nCheck )/int GetCheck( int nIndex )可以设置和得到某行的检查状态,关于检查框状态可以参考4.1 Button中介绍。 最后介绍一下列表框几种常用的消息映射宏: ON_LBN_DBLCLK 鼠标双击 ON_E

25、N_ERRSPACE 输入框无法分配内存时产生 ON_EN_KILLFOCUS / ON_EN_SETFOCUS 在输入框失去/得到输入焦点时产生 ON_LBN_SELCHANGE 选择的行发生改变 使用以上几种消息映射的方法为定义原型如:afx_msg void memberFxn( );的函数,并且定义形式如ON_Notification( id, memberFxn )的消息映射。如果在对话框中使用列表框,Class Wizard会自动列出相关的消息,并能自动产生消息映射代码。 4.6 Combo Box/Combo Box Ex组合窗口是由一个输入框和一个列表框组成。创建一个组合窗口可

26、以使用成员函数: BOOL CListBox:Create( LPCTSTR lpszText, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID = 0xffff ); 其中dwStyle将指明该窗口的风格,除了子窗口常用的风格WS_CHILD,WS_VISIBLE外,你可以针对列表控件指明专门的风格。 CBS_DROPDOWN 下拉式组合框 CBS_DROPDOWNLIST 下拉式组合框,但是输入框内不能进行输入 CBS_SIMPLE 输入框和列表框同时被显示 LBS_SORT 所有的行按照字母顺序进行排序 由于组合框内

27、包含了列表框,所以列表框的功能都能够使用,如可以利用: int AddString( LPCTSTR lpszItem )添加行, int DeleteString( UINT nIndex )删除指定行, int InsertString( int nIndex, LPCTSTR lpszItem )将行插入到指定位置。 void ResetContent( )可以删除列表框中所有行。 通过调用int GetCount( )得到当前列表框中行的数量。 如果需要得到/设置当前被选中的行的位置,可以调用int GetCurSel( )/int SetCurSel(int iIndex)。通过调用

28、int GetLBText( int nIndex, LPTSTR lpszText )得到列表框内指定行的字符串。 此外通过调用int FindString( int nStartAfter, LPCTSTR lpszItem )可以在当前所有行中查找指定的字符传的位置,nStartAfter指明从那一行开始进行查找。 int SelectString( int nStartAfter, LPCTSTR lpszItem )可以选中包含指定字符串的行。 此外输入框的功能都能够使用,如可以利用: DWORD GetEditSel( ) /BOOL SetEditSel( int nStartC

29、har, int nEndChar )得到或设置输入框中被选中的字符位置。 BOOL LimitText( int nMaxChars )设置输入框中可输入的最大字符数。 输入框的剪贴板功能Copy,Clear,Cut,Paste动可以使用。 最后介绍一下列表框几种常用的消息映射宏: ON_CBN_DBLCLK 鼠标双击 ON_CBN_DROPDOWN 列表框被弹出 ON_CBN_KILLFOCUS / ON_CBN_SETFOCUS 在输入框失去/得到输入焦点时产生 ON_CBN_SELCHANGE 列表框中选择的行发生改变 ON_CBN_EDITUPDATE 输入框中内容被更新 使用以上几

30、种消息映射的方法为定义原型如:afx_msg void memberFxn( );的函数,并且定义形式如ON_Notification( id, memberFxn )的消息映射。如果在对话框中使用组合框,Class Wizard会自动列出相关的消息,并能自动产生消息映射代码。 在MFC 4.2中对组合框进行了增强,你可以在组合框中使用ImageList,有一个新的类CComboBoxEx(由CComboBox派生)来实现这一功能。在CComboBoxEx类中添加了一些新的成员函数来实现新的功能:首先你需要调用 CImageList* SetImageList( CImageList* pIm

31、ageList );来设置ImageList,然后调用 int InsertItem( const COMBOBOXEXITEM* pCBItem );来添加行,其中COMBOBOXEXITEM定义如下: typedef struct UINT mask; int iItem; LPTSTR pszText; int cchTextMax; int iImage; int iSelectedImage; int iOverlay; int iIndent; LPARAM lParam; 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