MFC编程案例chapter016.pdf
《MFC编程案例chapter016.pdf》由会员分享,可在线阅读,更多相关《MFC编程案例chapter016.pdf(18页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、下载附录A 控件窗口风格使用M F C和Windows API创建控件窗口有多种方法:可以使用对话框编辑器增加一个控件到对话框模板中,对话框模板在对话框被创建时由 Windows API创建;或者可以使用 M F C控件类,如C B u t t o n类,自己动手创建控件窗口。若 M F C没有在类中捆绑一个通用控件,仍然可以使用C W n d类和通用控件窗口类名创建控件。每个控件装入时显示不同的可视特征,只要改变窗口风格便可访问这些特征。要想看到所有可用风格,唯一途径是用对话框编辑器作实验,即使对话框编辑器也不可能支持所有的窗口风格。本附录描述了可用的每个控件的重要窗口风格。尤其那些影响控件
2、外观的窗口风格将与相应的图一起列出来。A.1 Windows 3.1及以上版本提供的控件窗口A.1.1 按钮控件用W i n d o w s A PI创建按钮控件HWND CreateWindowEx(dwExStyle,BUTTON,Te x t ,WS_CHILD|WS_VISIBLE|dwStyle x,y,width,height,hWndParent,(HMENU)id,hInstance,NULL);用M F C创建按钮控件CButton m_button;/usually embedded in parent classm _ b u t t o n.C r e a t e(Te
3、xt,WS_VISIBLE|WS_CHILD|dwStyle,rect,pParentWnd,id);可视风格(见图A-1)其他风格B S _ D E F P U S H B U T TO N当当用户按下回车键,拥有这种风格的键被选中。然而,只有当其父窗口(如对话框)具有输入焦点时才会发生。在父窗口中,一次只能有一个按钮有该风格B S _ A U TO C H E C K B O X当当用户单击它时,自动地在被选中和不被选中之间改变状态B S _ A U TO 3 S TAT E当当用户单击它时,自动地在被选中、不被选中和不确定三种状态之间变化B S _ A U TO R A D I O B
4、U T TO N当自动取消选中单选按钮组中地其他按钮B S _ O W N E R D R AW当父窗口必须绘制该按钮B S _ I C O N当在按钮表面绘制一个图标,该图标必须在其他步骤中指定B S _ B I T M A P当在按钮表面绘制一个位图,该位图必须在其他步骤中指定图A-1 按钮控件风格第五部分附录说明注意组合框实际上是一个按钮控件,它被告知绘制一个框,并把它的名字放在左上角,然后,忽略任何输入。这种在同一控件中非近似特征的堆积,可能是由于当时只有七个通用控件而没有增添的余地。其他按钮效果,通过使用A.4节“普通窗口风格”的边框风格获得。A.1.2 静态文本控件使用 Windo
5、ws API创建静态文本控件(Static Control)HWND CreateWindowEx(dwExStyle,STAT I C ,Te x t ,WS_CHILD|WS_VISIBLE|dwStyle x,y,width,h e i g h t,hWndParent,(HMENU)id,hInstance,NULL);使用M F C创建静态文本控件CStatic m_static;/usually embedded inparent classm _ s t a t i c.C r e a t e(&Text,WS_VISIBLE|WS_CHILD|dwStyle,rect,pPar
6、entWnd,id);可视风格(见图A-2)其他风格S S _ O W N E R D R AW父窗口绘制控件S S _ N O T I F Y正常情况下,静态文本控件把任何鼠标单击直接传给父窗口该风格强迫控件自己处理这些消息S S _ I C O N把图标绘制在控件上,图标在另一步中设置S S _ B I T M A P把位图绘制在控件上,位图在另一步中设置S S _ E N H M E TA F I L E把一个加强的元文件绘制在控件上,该元文件在另一步中设置S S _ C E N T E R I M A G E若静态文本控件显示的是图标、位图或元文件,该风格强迫其位于控件中心说明若用户在
7、静态文本中某一字母前指定了&字符,该字符将显示一下划线。当用户按下该字母,Ta b次序紧随其后的控件将获得输入焦点。Ta b次序是对话资源中的控件实体的次序。拥有S S _ E T C H E D V E RT或S S _ E T C H E D H O R Z风格的静态文本控件,为用户绘制一条简单的蚀刻线。怎样使用对话框编辑器实现呢?应该选择哪个控件呢?似乎任何控件都不符合,其实,例6 9提供了一种方法。文本等同效果(文本字符看起来像蚀刻进窗口中)使用CDC:DrawState()和禁用选项可以获得。DrawState()用来画禁用菜单项。A.1.3 编辑控件用Windows API创建编辑
8、控件(Edit Control)306第五部分 附录下载图A-2 静态文本控件风格HWND CreateWindowEx(dwExStyle,EDIT,Te x t ,WS_CHILD|WS_VISIBLE|dwStyle x,y,width,height,hWndParent,(HMENU)id,hInstance,NULL);用M F C创建编辑控件CEdit m_edit;/usually embedded in parent classm _ e d i t.C r e a t e E x(WS_VISIBLE|WS_CHILD|dwStyle,rect,pParentWnd,id);
9、可视风格(见图A-3)图A-3 编辑控件风格其他风格E S _ A U TO V S C R O L L当新文本输入时,引起文本自动向左滚动E S _ A U TO H S C R O L L当新文本输入时,引起文本向上滚动。只有当控件拥有 E S _ M U LT I L I N E风格时才有效E S _ N O H I D E S E L即使控件失去输入焦点,使被选中的文本仍然处于被选中状态E S _ WA N T R E T U R N对于一个多行控件,允许回车键经过控件,而不是像单击父窗口中的缺省按钮一样说明这里显示的编辑控件有一个附加的边框,在默认情况下,编辑框窗口没有边框。编辑框中
10、的所有文本具有相同的字体(可以用SetFont()设置)。若想使某些文本加下划线或使某些文本显示黑体,应该用 Rich Edit Control。A.1.4 列表框控件用Windows API创建一个列表框控件(List BoxC o n t r o l)HWND CreateWindowEx(dwExStyle,LISTBOX,WS_CHILD|WS_VISIBLE|dwStyle x,y,width,height,hWndParent,(HMENU)id,hInstance,NULL);用M F C创建列表框控件CListBox m_listbox;/usually embedded in
11、 parentc l a s sm _ l i s t b o x.C r e a t e(WS_VISIBLE|WS_CHILD|dwStyle,rect,pParentWnd,id);附录A 控件窗口风格307下载图A-4 列表框控件风格可视风格(见图A-4)初始化控件重置列表框内容,用m_listbox.ResetContent();添加一个字符串,用m_listbox.AddString(ListBox1);当设置L B S _ M U LT I C O L U M N风格时,要设每列的宽度,用m _ l i s t b o x.S e t C o l u m n Width(60);
12、当设置L B S _ U S E TA B S TO P S时,要设置制表位,用int tabsNUM=10,20,30;m _ l i s t b o x.S e t Ta b S t o p s(N U M,t a b s);其他风格L B S _ N O T I F Y使使列表框控件处理鼠标单击事件,而不把它们传递到父窗口L B S _ S O RT使字符串按字母顺序排序L B S _ O W N E R D R AW F I X E D使父窗口必须绘制该控件,并且每项的垂直大小相同L B S _ O W N E R D R AW VA R I A B L E使父窗口必须绘制该控件,并且
13、每项的垂直大小可变L B S _ H A S S T R I N G S使对于自绘制的控件,该控件在内部维护字符串,以便还能设置或获得控件字符串L B S _ E X T E N D E D S E L使同L B S _ M U LT I P L E S E L一样,一次可以选择多项,但是用 L B S _ E X T EN D E D S E L,用户必须按下S h i f t和C o n t r o l键进行多项选择;用 L B S _ M U LT I P L E S E L,用户只需单击一个项说明W S _ H S C R O L L风格只有在设置 L B S _ M U LT I C
14、 O L U M N风格时才起作用,但这时W S _ V S C R O L L不起作用。通常,一个列表框重载你为它设置的大小,以便能避免控件底部部分地遮蔽列表的最后一行;要关掉该功能,使用L B S _ N O I N T E R G R A L H E I G H T风格。这里所显示的列表框有一个附加的边框;在默认设置下,列表框没有边框。A.1.5 滚动条用Windows API创建滚动条HWND CreateWindowEx(dwExStyle,SCROLLBAR,WS_CHILD|WS_VISIBLE|dwStyle x,y,width,height,hWndParent,(HMENU
15、)id,hInstance,NULL);用M F C创建滚动条CScrollBar m_scrollbar;/usually embedded in parent classm _ s c r o l l b a r.C r e a t e(WS_VISIBLE|WS_CHILD|dwStyle,rect,pParentWnd,id);可视风格(见图A-5)说明与Wi n d o w s在任何一个窗口的非客户区绘制滚动条不同,事实上,这些滚动条自身是308第五部分 附录下载图A-5 滚动条控件风格一些完整的子窗口。一个父窗口可以有它自己的滚动条和任意数量的滚动条控件窗口;但是,非客户区滚动条和
16、控件窗口滚动条都用 W M _ H S C R O L L和W M _ V S C R O L L窗口消息回传到父窗口;要在父窗口中区别它们,需要在消息的 l P a r a m中查看滚动条句柄,当为该消息添加一个处理函数时,M F C把该滚动条句柄封装到一个C S c r o l l B a r类中。当单独设置S B S _ H O R Z和S B S _ V E RT时,滚动条的宽度和高度可以是任意值;当单独设置S B S _ TO PA L I G N,S B S _ B O T TO M A L I G N等,滚动条设置一个标准宽度,这可以在图A-5中看见。创建具有S B S _ S
17、I Z E G R I P风格的滚动条控件,允许用户拖动控件所在的窗口改变其大小,而不管控件位于窗口的什么位置。A.1.6 组合框用Windows API创建组合框HWND CreateWindowEx(dwExStyle,COMBO-BOX,WS_CHILD|WS_VISIBLE|dwStyle x,y,width,height,hWndParent,(HMENU)id,hInstance,N U L L);用M F C创建组合框CComboBox m_combobox;/usuallyembedded in parent classm _ c o m b o b o x.C r e a t
18、 e(WS_VISIBLE|WS_CHILD|dwStyle,rect,pParentWnd,id);可视风格(见图A-6)初始化控件添加一个字符串到一个组合框,所用语句如下:m_combobox.AddString(Combo 1);其他风格:C B S _ O W N E R D R AW F I X E D父窗口绘制该控件,并且每项具有相同高度C B S _ O W N E R D R AW VA R I A B L E父窗口绘制该控件,但每项具有不同的高度C B S _ H A S S T R I N G S即使该控件是由父窗口绘制的,但它仍然为每个项保持一个字符串C B S _ A
19、U TO H S C R O L L如果编辑框有效,当输入文本超出窗口边界时,输入文本自动向左滚动C B S _ S O RT列表按字母顺序排列说明组合框实际上控制两个完全属于它自己的控件窗口:一个编辑框的编辑控件和一个列表框的C o m b o L B o x控件。因为一些窗口消息,如鼠标单击,只传递到这两个控件之一,而不进入组合框,因此,有时需要直接子分类它们,这只要通过搜索该组合框之下的子窗口即可。然而,如果使用下拉风格,列表框控件只有在下拉的情况下才可用。附录A 控件窗口风格309下载图A-6 组合框控件风格A.2 Windows 95/NT及以上版本提供的控件窗口A.2.1 多信息编
20、辑框用Windows API创建多信息编辑控件HWND CreateWindowEx(dwExStyle,RICHEDIT,WS_CHILD|WS_VISIBLE|dwStyle x,y,width,height,hWndParent,(HMENU)id,hInstance,NULL);用M F C创建多信息编辑框CRichEditCtrl m_richeditctrl;/usually embedded in/parent classm _ r i c h e d i t c t r l.C r e a t e(WS_VISIBLE|WS_CHILD|dwStyle,rect,pParent
21、Wnd,id);说明多信息编辑框使用大部分与编辑框相同的窗口风格;它们之间的主要不同在于多信息编辑框可以处理多信息文本格式文件,允许文本一行中有多种颜色、风格和字体大小。然而,要使用该功能,不能用 S e t Wi n d o w Text()或G e t Wi n d o w Text()输入文本到窗口中,而需要用成员函数 StreamIn()和StreamOut()。事实上,还是可以使用S e t Wi n d o w Text()和G e t Wi n d o w Text()但是,RT F格式用来改变文本格式的任何文本顺序将会变得可见。A.2.2 列表控件用Windows API创建列
22、表控件HWND CreateW i n d o w E x(d w E x S t y l e,S y s L i s t View32,WS_CHILD|WS_VISIBLE|dwStyle x,y,width,height,hWndParent,(HMENU)id,hInstance,N U L L);用M F C创建列表控件CListCtrl m_listctrl;/usually embeddedin parent classm _ l i s t c t r l.C r e a t e(WS_VISIBLE|WS_CHILD|dwStyle,rect,pParentWnd,id);可
23、视风格(见图A-7)初始化控件添加列到一个列表控件,用:m_listctrl.InsertColumn(0,Column 1,LV C F M T _ L E F T,w i d t h,0);m_listctrl.InsertColumn(1,Column 1,LV C F M T _ R I G H T,w i d t h,1);添加列表控件可用的图像,用:m_listctrl.SetImageList(&m_imageLarge,LV S I L _ N O R M A L);m_listctrl.SetImageList(&m_imageSmall,LV S I L _ S M A L
24、 L);m_listctrl.SetImageList(&m_imageState,LV S I L _ S TAT E);310第五部分 附录下载图A-7 列表控件风格添加新的一行,用:LV_ITEM lvi;lvi.mask=LVIF_TEXT|LV I F _ I M A G E;lvi.iItem=0;lvi.iSubItem=0;l v i.p s z Text=Item 1;lvi.iImage=1;int inx=m_listctrl.InsertItem(&lvi);添加一项到一列中,用:m _ l i s t c t r l.S e t I t e m Te x t(i n
25、x,1,Sub Item 1);改变一行的状态图像,用:m_listctrl.SetItemState(inx,INDEXTO S TAT E I M A G E M A S K(1),LV I S _ S TAT E I M A G E M A S K);要设置扩展风格,如LV S _ E X _ G R I D L I N E S,用:m _ l i s t c t r l.S e n d M e s s a g e(LV M _ S E T E X T E N D E D L I S T V I E W S T Y L E,0,LV S _ E X _ G R I D L I N E S
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- MFC 编程 案例 chapter016
限制150内