如何在ReBar中子类化通用控件
HateMath2005@163.com
(本文讲述在ReBar中子类化ComboBox的方法,适合初级读者)
引子:
有时,为了整个界面风格和谐,我们需要工具条上的控件呈现新的视觉风格.比如你的界面总体是平面风格(Flat)的,此时弄个标准风格的ComboBox在上面当然觉得不和谐.此时,我们可以通过子类化的方法来改变控件的外观,使之满足我们的要求.
下图给出了ComboBox子类化以后的视觉外观.显然,这种平面风格的ComboBox和整体界面的风格和谐统一,融为一体.

实现步骤如下:
首先加入ComboBox控件
1. 打开VC6.0,新建SDI文档,在Step4的How do you like your toolbars to look? 选项中选择Internet Exporer Rebars.然后点击 Finish .
2. 在资源视图中查看对话框资源,你会发现其中多出了个ID为IDR_MAINFRAME的对话框模板.把上面的标签控件删掉,添加一个ComboBox.
3. 编译运行.我们可以发现工具条上已经显示出我们刚才放置的ComboBox了.
下面我们接着要做的是将它子类化,改变其风格为平面状.
4. 向工程中添加CXTFlatComboBox类(鸣谢support@codejock.com),这个类网上可以找到。附加例子中也有。罗嗦一下,加入类的方法是:菜单Project -> Add to project -> Files,然后选择XTFlatComboBox.cpp和XTFlatComboBox.h这两个文件。
5. 在MainFrm.h中声明变量CXTFlatComboBox m_cmb; 当然,别忘了同时在MainFrm.h中加入头文件 #include "XTFlatComboBox.h"
事情到此为止已经接近成功了.下面我们只需要添加一些代码,不多,一句而已.
6. 在int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)函数的
return 0;前面加入这样一句:
//子类化工具条上的combobox
m_cmb.SubclassDlgItem(IDC_COMBO1,&m_wndDlgBar);
编译运行.怎么样?平面风格的ComboBox感觉就是不一样吧? :P
友情提示:
用同样的方法,我们可以子类化EditBox, ListBox….等等.
后记:
1. 本文附带实例代码。在Win2000 + VC6下通过。
2. 关于子类化的方式,最终我选择了用SubclassDlgItem。其实我曾尝试过把IDR_MAINFRAME关联一个由CDialog派生的类,然后像在对话框中一样,通过关联成员变量的方法进行子类化,但是没有成功。至今不知何故,望高手告知。
posted on 2005-08-02 21:09 HateMath的网上田园 阅读(3265)
评论(10) 编辑 收藏