第一种方法: 直接修改MFC库的源文件, 将CWnd改成你需要的, 那么它继承的所有类都会有相应的特性, 这种方法不可取, 因为修改了MFC.
第二种方法: 从CWnd扩展CWndExt类, 程序中所有从CWnd继承来的类均要改成CWndExt.
比如将:
    class MyClass : public CWnd
改成:
    class MyClass : public CWndExt

解决方案 »

  1.   

    多谢,不过还有点疑问想请教
    请问,有没有办法让CDialog、CView类也继承CWndExt类的新特性呢?
    我不太想动MFC的源码。在DELPHI和C++Build中,所有对话框和窗口
    都是从TForm派生,而VC中分成了视图窗口和对话框,我要采用统一的
    新风格,在DELPHI和C++Build中可以扩展TForm类,但在VC中,我想
    不至于重写CView和CDialog才能共同继承CWndExt类吧?
      

  2.   

    你肯定不是用CView和CDialog, 一般程序都是它的派生类...
    你如果希望都用CWndExt的特性, 为什么不直接继承CWndExt呢???
      

  3.   

      是这样的,我要做一个应用程序,里面有对话框,有视窗,我希望所有这些窗体都具有统一的风格,像NeoPlanet一样,而且支持插件,动态更新界面。这样在C++Build里只要扩展TForm类就可以,但在MFC中,视图是从CView中派生,对话框是从CDialog中派生。还有一些控件直接从CWnd中派生。所以我要扩展CWnd类,是这些都有一个统一的风格。我实在不想重新构建整个窗体控件体系,那样太累。
      

  4.   

    MFC实现你这样的功能确实有点困难...
    因为CView和CDialog有很多的不同, 没有办法统一...
    为什么不用Delphi呢???
      

  5.   

    不管怎么说还是谢谢你,
    我是给公司做程序,身不由己嘛
    谢你啦,
    我想顺便问问知道SubClass是怎么一回事吗?
      

  6.   

    每一类窗口都有一个相关的窗口过程——处理窗口消息的函数,我们自己写的窗口类的窗口过程自然可以由我们自己完全控制,但对于Windows系统中预定义的那些窗口类,如EDIT、LISTBOX、COMBOBOX、TABCONTROL之类,Windows已给它们分配的相关的窗口过程,也就是说它们对消息的处理已确定了,即它们对鼠标、键盘的响应,显示外观等等已定义好了,但有时又不想采用预定义的风格,我们想重新定义它们的行为,比如我们想把EDIT框画成圆的,或让LISTBOX每行显示不同的颜色或字体,可我们无法更改Windows内部的代码,于是Windows为我们早已留下一个条途径,这就是子类化。
    子类化就是你自己写一个消息处理函数,然后用它替换掉某一个窗口类中原来的窗口过程,这样你就可以随心所欲地控制窗口的行为了。子类化的实现方法并不难,你可以参考有关SDK手册就行。