hATEmATH的网上田园

喂马 劈柴 做一个幸福的人
<2008年10月>
2829301234
567891011
12131415161718
19202122232425
2627282930311
2345678
公告
  • ◇ 欢迎来到这里的每一位朋友。

    ◇ 无需注册即可评论或留言。

    ◇ 文章无"转载(ZT)"字样均为原创。

    ◇ "随笔分类"中包含我的所有随笔

留言簿(13)

随笔分类

随笔档案

文章分类

文章档案

相册

工具网站

搜索

最新评论

阅读排行榜

评论排行榜

 
VC知识库BLOG   首页  新随笔  联系  聚合  登录 
  随笔-125 文章-20 评论-449 Trackbacks-0

如何在ReBar中子类化通用控件
HateMath2005@163.com

(本文讲述在ReBar中子类化ComboBox的方法,适合初级读者)

引子:

有时,为了整个界面风格和谐,我们需要工具条上的控件呈现新的视觉风格.比如你的界面总体是平面风格(Flat)的,此时弄个标准风格的ComboBox在上面当然觉得不和谐.此时,我们可以通过子类化的方法来改变控件的外观,使之满足我们的要求.

    下图给出了ComboBox子类化以后的视觉外观.显然,这种平面风格的ComboBox和整体界面的风格和谐统一,融为一体.

 

实现步骤如下
:

首先加入ComboBox控件

1.       打开VC6.0,新建SDI文档,在Step4How do you like your toolbars to look? 选项中选择Internet Exporer Rebars.然后点击 Finish .

 

2.       在资源视图中查看对话框资源,你会发现其中多出了个IDIDR_MAINFRAME的对话框模板.把上面的标签控件删掉,添加一个ComboBox.

 

3.       编译运行.我们可以发现工具条上已经显示出我们刚才放置的ComboBox.

 

下面我们接着要做的是将它子类化,改变其风格为平面状.

 

4.       向工程中添加CXTFlatComboBox类(鸣谢support@codejock.com),这个类网上可以找到。附加例子中也有。罗嗦一下,加入类的方法是:菜单Project -> Add to project -> Files,然后选择XTFlatComboBox.cppXTFlatComboBox.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)  编辑 收藏
Comments
  • # 说明一下:
    HateMath
    Posted @ 2005-08-02 21:10
    是否将这篇文章显示在kbase 的blog首页,我有些犹豫。这种入门级的文章放在这实在是班门弄斧。
    不过话说回来了,如果不放上来,能看到文章的初学者就很少了,那我当初认认真真写这篇文章的意义又何在呢?
    所以我决定把它放上来,呵呵。
  • # re: 如何在ReBar工具条中子类化通用控件
    vckbase
    Posted @ 2005-08-03 08:24
    无论内容与编辑都很好,应该放上来。
  • # 请教一下
    hengai
    Posted @ 2005-08-03 23:53
    那个图片中的Codelib2005是什么?是不是管理代码的?要Money的吗?想下载来用用看。我自己也做了一个。
  • # re: 如何在ReBar工具条中子类化通用控件
    HateMath
    Posted @ 2005-08-04 09:20
    呵呵,那个东东是Free的.下载地址:
    http://blog.vckbase.com/Files/HateMath/CodeLib2005.rar

    说明:
    1.这个东东从功能架构到使用方法都是为我个人定制的,别人用可能不习惯.
    2.此版本正在测试中,想看看你的那个,学习学习.给个链接?
  • # to HateMath
    hengai
    Posted @ 2005-08-04 11:17
    是你自己做的?我也很久没有更新了。昨天在网上找了一下,好像是使用.Net编译的。
    我的,什么时候有时间整理一下,然后贴出来。自己也是写得一团糟,不想继续写了
  • # re: 如何在ReBar工具条中子类化通用控件
    henry
    Posted @ 2005-09-21 15:34
    1、分类可以增加一个目录树。
    2、用户可以把指定的文章增加重要性的级别。

    3、如果对于文章非常多的时候,比如10w条,列表怎么显示?希望能够看到的源码
  • # re: 如何在ReBar工具条中子类化通用控件
    HateMath
    Posted @ 2005-09-22 10:45
    感谢henry 的宝贵建议。相关答复如下:
    1.TreeView会占用界面空间,我正在考虑在ComboBox的下拉框内添加一个目录树以便更直观的显示其层次结构。

    2.有道理,我设计的“浏览次数排序”也是出于这个目的,不过你的办法确实更好一些。

    3.这只是个个人级别的代码管理工具,我认为没有必要考虑100K条记录的情况。

    另外,第一次贴出的程序有很多小BUG,我最近对程序更新了一下,对这些小BUG做了修正,并且美化了界面。
  • # re: 如何在ReBar工具条中子类化通用控件
    henry
    Posted @ 2005-09-22 19:26
    好等待你的新版本

    1、不过还是不知道你对于大数据量的显示是咋实现的,可以考虑虚列表;
    2、打开指定的记录时,对话框是不是可以最大化?
    3、编辑器能不能语法着色呢?
  • # re: 如何在ReBar工具条中子类化通用控件
    HateMath的网上田园
    Posted @ 2005-09-23 10:39
    回复:
    1.大数据量的情况我现在不做考虑(主要是现在变懒了.... ^_^)

    2.有道理,我在下一个版本中增加最大化的功能,或者将要显示的代码放到主窗口的静态切分视图里面。

    3.此功能已经实现。

    谢谢你的支持。
    这是2.0版的地址(2.0版本仍有一个BUG,但是我现在没时间改进了)

    http://blog.vckbase.com/Files/HateMath/CodeLib2005Ver2.0.rar
  • # re: 如何在ReBar工具条中子类化通用控件
    henry
    Posted @ 2005-09-23 14:19
    哦,还准备更新吗?

    1、语法着色是用户自己可以定义显示颜色和样式,设置选中的文字字体、颜色,如果能够插入图片更好,呵呵

    2、能不能加入附件呢?

    3、...还有很多,算了,能把上面说的做到已经不错了。我也很懒,很长时间没有动手了,:-)
标题  
姓名  
主页
验证码 *
内容   
  登录  使用高级评论  Top
[使用Ctrl+Enter键可以直接提交]