vc中什么叫subclass?

maskii 2003-08-22 05:47:58
最近在网上经常看到有人说subclass, 请各位办忙解释一下!
谢谢!
...全文
102 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Paris_Luo 2003-10-14
  • 打赏
  • 举报
回复
子类化
Darlinton 2003-10-14
  • 打赏
  • 举报
回复
subclass就是拿你自己写的窗口过程替换指定窗口原来的窗口过程
subclass就是拿你自己写的窗口过程替换指定窗口原来的窗口过程
subclass就是拿你自己写的窗口过程替换指定窗口原来的窗口过程
subclass就是拿你自己写的窗口过程替换指定窗口原来的窗口过程
subclass就是拿你自己写的窗口过程替换指定窗口原来的窗口过程
subclass就是拿你自己写的窗口过程替换指定窗口原来的窗口过程
subclass就是拿你自己写的窗口过程替换指定窗口原来的窗口过程
subclass就是拿你自己写的窗口过程替换指定窗口原来的窗口过程
subclass就是拿你自己写的窗口过程替换指定窗口原来的窗口过程
ringphone 2003-10-14
  • 打赏
  • 举报
回复
subclass说白了就是拿你自己写的窗口过程替换指定窗口原来的窗口过程。
icr_mio 2003-10-14
  • 打赏
  • 举报
回复
上面是从MSDN的SetWindowLong函数中复制出来的:)
icr_mio 2003-10-14
  • 打赏
  • 举报
回复
Calling SetWindowLong with the GWL_WNDPROC index creates a subclass of the window class used to create the window. An application can subclass a system class, but should not subclass a window class created by another process. The SetWindowLong function creates the window subclass by changing the window procedure associated with a particular window class, causing the system to call the new window procedure instead of the previous one. An application must pass any messages not processed by the new window procedure to the previous window procedure by calling CallWindowProc. This allows the application to create a chain of window procedures.

syh_17 2003-10-14
  • 打赏
  • 举报
回复
子类化
Visual C++ 6.0的集成开发环境对项目文件的管理功能比前几个版本有了很大的增强,但是对打开文档窗口的管理和普通的MDI编辑软件一样,只能通过窗口菜单切换,使用起来很不方便。2001年的时候我在网上见到了一款名为“WndTab”的VC插件,它提供了一个集成在编辑窗口的table标签栏,每个打开的文档对应一个标签栏的按钮,通过鼠标点击按钮可以在文件之间快速切换,大大方便了代码查看和编辑,除此之外,这个插件还提供了C++程序文件和头文件互相切换功能(注:2003年的时候“Wndtab”插件还在开发,功能更多,还支持二次插件开发,但同时不稳定的毛病加重了,且占用资源太多,内存太少使用起来很困难)。这个插件一下子就征服了我(sorry,那个时候我不知道VA),通过对“WndTab”的使用,我也发现了很多问题,比如,文件切换只能在同一个目录进行,当程序文件和头文件分别放在不同的目录时就不能切换。还有一个很大的问题就是“WndTab”提供了很多并不实用(仅仅是本人的看法,如有雷同,实属荣幸)而且繁琐、容易出错的功能,比如对标签栏的重组和编号功能,这个功能在频繁地打开和关闭文件时经常令VC的IDE崩溃。好在 “WndTab”的作者公开了源代码,于是我就开始研究“WndTab”的代码,于是便有了借鉴“WndTab”的成功经验,开发一个功能更实用且简单、稳定的插件的想法,于是“TabBars”便在2002年诞生了。 “TabBars”插件借鉴了“WndTab”插件的框架,大刀阔斧地去掉了标签栏重组和编号功能,简化了table标签栏的界面布局,使用Button 风格的自画table控件,重新设计了工具栏图标,界面更加美观。持此之外,TabBars还添加了很多实用的功能,比如自动保存文件,C++程序文件和头文件互相切换支持多目录搜索功能,注释选定的代码块,从注释的代码块恢复代码,为函数添加格式化函数声明,注释代码时自动添加操作者信息,自动保存编译过程,自动保存文件等等,所有的功能都支持快捷键。“TabBars”坚持开源品质,2002年发布的同时也发布了源代码,当时在网上引起了很大的反响,很多朋友提出了宝贵意见,修改bug,于是便有了很多个版本,我一直根据朋友的意见修改并维护着一个自己的版本,并通过http://www.winmsg.com/cn/orbit.htm发布,随后由于工作的原因有一段时间不能接触网络,新版本“TabBars”的发布也受到了影响,但是对“TabBars”的改进一直没有停止。2003 年,我和Codeproject上的.dan.g.联系,征得他的同意后将“项目代码自动打包”和“OpenZip”两个功能添加到了 “TabBars”(注:请参考codeproject上的文章:Zip-up the source code for your latest CodeProject article),我同时对这两个功能进行了修改,原来的“项目代码自动打包”功能只能将dsp目录的文件打包,但是考虑到很多软件项目的代码文件和头文件都是分布在不同的目录,只打包当前目录有些不妥,于是添加了指定整个目录打包的选项。2004年,我又将.dan.g.的“在代码添加 Visio-like diagrams的功能”集成到“TabBars”(注:请参考codeproject上的文章:Add and edit diagrams in your code with this 'Visio-like')。这两次修改的版本都没有正式发布,只在朋友们间小范围测试使用,并不断修改。2005年4月,“TabBars”的测试工作完成,正式定版发布,版本号为:1.0.17.3169,2005年6月,代码整理完成,同时发布源代码。 本文主要介绍TabBars插件的功能和使用方法,关于如何编译、调试“TabBars”源代码和代码解读的问题,请参阅“http://blog.csdn.net/orbit/”上的“TabBars”系列文章。 说了这么多,你一定想知道“TabBars”到底什么样子?有什么功能?如何使用?下面就介绍“TabBars”的功能和使用方法。图(1) 就是“TabBars”集成到VC编辑环境后的界面,上面是一个工具条,下面是用于文件快速切换的table标签栏: 图1. 集成到VC编辑环境的“TabBars” 一 使用table标签窗口快速切换文件 在一个大的项目浏览不同文件的代码是一件痛苦的事情,VC所能够提供的帮助就是工作区的“Files”窗口和菜单栏的“窗口”菜单,当项目的文件很多时使用起来非常不方便。如果能够象属性页窗口那样通过一个Table控件在不同的窗口之间快速切换,就能够大大的提高工作效率。“TabBars”插件就实现了这个功能,“TabBars”插件采用子类化(subclass)技术,通过Hooker过滤工作区窗口的消息维护了一个table标签栏,在新文档窗口创建的时候在table标签栏上创建对应的标签按钮,文档关闭时删除标签按钮。这样开发人员只需要在标签栏的按钮上点击鼠标就可以快速切换到这个文件。在标签栏按钮上点击鼠标右键会弹出属性菜单: 图2. 标签栏属性菜单 通过菜单的关闭窗口功能可以有选择的关闭窗口,通过系统菜单可以访问Windows的文件系统菜单,关于Windows文件系统菜单将在后面介绍。 用户可以在配置窗口设置标签栏的显示属性: 图3. TabBars 选项 在“TabBars 选项”窗口可以设置标签栏的位置,可以在编辑窗口的上面,也可以设置在编辑窗口的下面,满足不同习惯用户的要求。还可以选择是否在标签栏显示图标,是否支持系统菜单以及新打开窗口的位置,对于系统资源比较有限的用户还可以选择打开窗口的最大限制。 二 C++程序文件和头文件快速切换 对于一个管理良好的软件项目,函数的声明和实现通常是分开放在一对对应的程序文件和头文件,C++更是推崇这种做法,于是在程序文件和对应的头文件之间切换,查看函数的定义和实现就成了一个频繁的操作,“TabBars”插件的C++程序文件和头文件快速切换功能就是为了方便C/C++程序员而设计的。很多插件都有这个功能,但是“TabBars”有自己的特色,那就是支持多目录搜索,使用户在浏览其它库的代码时也能够得心应手。 要切换到当前打开文件对应的程序文件或头文件,只需点击工具栏的图标就可以切换到对应的文件,如果文件没有打开“TabBars”会自动打开文件。通过插件配置窗口可以设置切换文件的搜索路径和文件匹配扩展名: 图4. 文件切换选项 “TabBars”最多支持64个搜索目录,根据软件项目的不同可以选择使用其的部分搜索目录,“TabBars”只从目录前面有X选择标记的目录搜索对应的文件。用户还可以指定文件搜索时对扩展名的匹配,图(4)的配置适用于C/C++文件的切换。“TabBars”首先用指定的匹配扩展名在文件所在的目录搜索对应的程序文件或头文件,如果没有找到对应的文件就会依次搜索用户选择的搜索目录。 该功能的默认快捷键是:Ctrl+Shift+S 三 将当前打开的文件所在目录设为工作目录 有时候开发人员需要频繁地打开位于某个目录的文件,比如浏览某个软件包代码的时候,可是VC集成环境的“当前目录”却在project文件所在的目录,每次打开文件时文件选择对话框都会自动定位到project文件所在的目录,还要手工换到软件包所在目录,非常不方便。“TabBars”提供的这个功能可以把当前打开的文件所在的目录设为“当前目录”,这样再打开这个目录的文件时VC的文件选择对话框会自动定位到这个目录,省去很多麻烦。单击工具栏的按钮就可以轻松的改变集成环境的“当前目录”。 四 以文本方式打开资源文件 VC的class wizard在管理资源的时候经常会出错,有时候两个控件被设置为相同的ID,这会导致程序运行过程存在潜在的错误,另外,有时候开发人员希望几个控件拥有连续的的ID(通常用在一组相同类型的控件消息处理),这就需要手工编辑资源文件。“TabBars”给开发人员提供了不离开集成开发环境就能够以文本方式编辑资源文件的功能。这个功能的使用很简单,首先打开某个资源,资源编辑窗口就成为当前窗口,此时单击工具栏的按钮就可以以文本的方式打开资源文件。 五 为选定的代码添加C风格的注释 这个功能就不多说了,就是使用一对/**/ 将选择的代码编程C风格的注释,如果用户还设置了“自动添加注释信息”,则会在开始位置添加注释信息。使用方法是首先在编辑窗口选择一块代码,然后单击工具栏的按钮,代码注释的效果如下图所示: 图5. C风格代码注释效果 该功能的默认快捷键是:Ctrl+Shift+B 六 为选定的代码添加C++风格的注释 嵌套的/**/注释是不允许的,当选择的代码块已经有/**/注释的代码块时,使用C++风格的注释就是唯一的选择了。使用的方法是首先在编辑窗口选择一块代码,然后单击工具栏的按钮,代码注释的效果如下图所示: 图6. C++风格代码注释效果 该功能的默认快捷键是:Ctrl+Shift+R 七 从注释代码恢复代码 这个功能也不用多说了,使用方法是首先在编辑窗口选择一块注释代码,对于C风格的代码块要选择完整的/**/对,然后单击工具栏的按钮。 该功能的默认快捷键是:Ctrl+Shift+U 八 添加格式化函数说明 这个功能就是在函数前面添加具有一定格式的说明,使用方法是首先选择完整的函数声明,下图所示的就是两种正确的选择: 图7. 选择完整的函数声明 然后单击工具栏的按钮,在弹出的对话框输入对函数的说明和参数解释: 图8. 输入函数说明 下图是生成的说明块的效果: 图9. 格式化函数说明的效果 该功能的默认快捷键是:Ctrl+Shift+F 九 添加Visio-like diagrams 在你的代码添加几个简单的模块关系图是不是很酷?感谢Codeproject上的.dan.g.为我们完成了这个工作。这个功能的使用很简单,首先在编辑窗口内将编辑光标定位到需要插入图表的位置,然后单击工具栏的按钮,就会弹出diagrams编辑窗口: 图10. diagrams编辑窗口 下图是生成的代码: 图11. 生成的ASCII图表 如果要修改ASCII图表,只需选择完整的ASCII图表代码块,然后单击工具栏的按钮。 十 VC工程代码自动打包 直接在集成开发环境将整个项目的源代码打包压缩成zip文件是一个很实用的功能,“TabBars”对此功能进入了深度开发,使其功能更为完善。当你要打包一个项目的代码时,单击工具栏的按钮就可以了。“TabBars”插件会自动搜索整个工作区的所有项目,然后定位到工作区的根目录,用户也可以根据代码组织的实际情况选择需要打包的代码所在目录,整个界面如图(12)所示: 图12. 打包整个工作区 选择压缩文件的输出位置,单击“确定”按钮就可以了。由于代码所在目录通常还有VC编译生成的临时文件,用户还可以选择打包过程排除这些文件,在“打包压缩设置”窗口可以设置文件选择方式: 图13. 打包压缩选项设置窗口 如果选择了“压缩完成后打开文件确认”选项,“TabBars”会在打包完成后自动调用zip文件的关联软件打开生成的压缩包,以确认是否正确生成了压缩文件。 十一 从zip压缩文件打开VC工程 通常从网上下载的例子代码都是压缩在zip文件的,查看zip文件的项目通常要将代码解压缩到临时目录然后用VC打开项目,“TabBars”提供了不离开VC的集成开发环境就能够查看zip压缩文件VC项目的功能。单击工具栏的按钮,在弹出的文件选择窗口选择VC项目所在的zip压缩文件,“TabBars”会自动在指定的临时目录展开压缩文件,然后定位到工作区文件并打开。如果一个zip文件没有工作区(dsw)文件,“TabBars”会弹出窗口让用户选择具体的项目文件(dsp)。如果zip文件有多个工作区文件,“TabBars”会弹出如下窗口让用户选择一个工作区: 图14. 选择工作区 用户可以通过图(13)所示的“打包压缩选项设置窗口”设置临时文件存放目录,默认的临时文件存放位置是:C:\unzipped 十二 自动保存文件 “TabBars”提供定时自动保存文件功能。在图(15)所示的设置窗口可以选择启用或关闭自动保存功能。 图15. 一般设置窗口 十三 自动添加注释信息 “TabBars”提供在注释代码时梓潼添加注释信息的功能,目前的版本支持添加注释人名称和时间戳。可以在图(15)所示的设置窗口选择自动添加的注释信息。 十四 自动生成工程编译日志 “TabBars”提供生成编译日志的功能,会在dsp文件所在目录生成一个同名的log文件,内部记载项目的编译次数和每次编译的情况,记录编译次数可以为你的软件定版本提供依据。以下时日志文件的部分内容示例: /本日志文件由 "Tabbar Add-in(1.17.3169) For Visual C++ 6.0" 创建 //项目文件:C:\unzipped\CustDlg\CustDlg.dsp //如果文件增长的很大请删除除本节之外的其他信息 [MAIN] nBuildNumber = 49 [Build00000001] sStartTime = 2005-08-18 16:17:53 sCompileUser = orbit nErrors = 0 nWarns = 0 sEndTime = 2005-08-18 16:17:57 [Build00000002] sStartTime = 2005-08-18 16:19:32 sCompileUser = orbit nErrors = 0 nWarns = 0 sEndTime = 2005-08-18 16:19:33 可以在图(15)所示的设置窗口选择是否记录日志以及日志记录的内容。 十五 在table标签栏使用Windows系统菜单 在table标签栏单击鼠标右键会弹出文件属性菜单,如果你在“TabBars选项”窗口选择“在右键菜单使用系统菜单”选项,则还可以使用Windows的系统菜单,不离开VC的集成开发环境就可以进行常规的文件操作: 图16. 系统菜单示例
CJ60Lib是基于MFC基础之上的一个扩展库,主要是改进MFC的下述类: CCJButton - ( CJButton.cpp and CJButton.h )对CButton的改进。 CCJComboBox - ( CJComboBox.cpp and CJComboBox.h )对CComboBox的改进。 CCJControlBar - ( CJControlBar.cpp and CJControlBar.h )对CControlBar的改进。 CCJFrameWnd - ( CJFrameWnd.cpp and CJFrameWnd.h ) CCJMDIFrameWnd - ( CJMDIFrameWnd.cpp and CJMDIFrameWnd.h ) CCJDockBar - ( CJDockBar.cpp and CJDockBar.h ) 这些类重载了缺省的主框架布局,以增加3D效果到工具条。为了使用这些类,仅将 CFrameWnd 改为 CCJFrameWnd,其,CMainFrame 包含在 Mainfrm.h文件,(对于MDI,采用CCJMDIFrameWnd)。 CCJOutlookBar - ( CJOutlookBar.cpp and CJOutlookBar.h )新增类,用于实现Outlook的工具条。 CCJPagerCtrl - ( CJPagerCtrl.cpp and CJPagerCtrl.h )新增类,用于设置标签视或者对话框。 CCJTabCtrlBar - ( CJTabCtrlBar.cpp and CJTabCtrlBar.h )新增类。 CCJToolBar - ( CJToolBar.cpp and CJToolBar.h )对CToolBar类的改进。 CCoolMenuManager -( CoolMenu.cpp, Emboss.cpp and CoolMenu.h ) CSubclassWnd -( Subclass.cpp and Subclass.h ) 新增类,用于改进已有的菜单。 CFlatToolBar - ( FlatBar.cpp and FlatBar.h ) Obsolete with VC 6.0 CModuleVersion - ( ModulVer.cpp and ModulVer.h ) 这是CCJToolBar的基类。 CCoolBar, CRebarInfo - ( CoolBar.cpp and CoolBar.h ) Obsolete with VC 6.0 新增类,用于实现Internet Explorer 4风格的工具条。 CHyperLink - ( HyperLink.cpp and HyperLink.h ) 超链接控件。
一个功能强大的MFC界面处理扩展库:CJ60Lib 这是从网上搜集的一个扩展库,把它分享给大家! 简介: CJ60Lib是基于MFC基础之上的一个扩展库,主要是改进MFC的下述类: CCJButton - ( CJButton.cpp and CJButton.h )对CButton的改进。 CCJComboBox - ( CJComboBox.cpp and CJComboBox.h )对CComboBox的改进。 CCJControlBar - ( CJControlBar.cpp and CJControlBar.h )对CControlBar的改进。 CCJFrameWnd - ( CJFrameWnd.cpp and CJFrameWnd.h ) CCJMDIFrameWnd - ( CJMDIFrameWnd.cpp and CJMDIFrameWnd.h ) CCJDockBar - ( CJDockBar.cpp and CJDockBar.h ) 这些类重载了缺省的主框架布局,以增加3D效果到工具条。为了使用这些类,仅将 CFrameWnd 改为 CCJFrameWnd,其,CMainFrame 包含在 Mainfrm.h文件,(对于MDI,采用CCJMDIFrameWnd)。 CCJOutlookBar - ( CJOutlookBar.cpp and CJOutlookBar.h )新增类,用于实现Outlook的工具条。 CCJPagerCtrl - ( CJPagerCtrl.cpp and CJPagerCtrl.h )新增类,用于设置标签视或者对话框。 CCJTabCtrlBar - ( CJTabCtrlBar.cpp and CJTabCtrlBar.h )新增类。 CCJToolBar - ( CJToolBar.cpp and CJToolBar.h )对CToolBar类的改进。 CCoolMenuManager -( CoolMenu.cpp, Emboss.cpp and CoolMenu.h ) CSubclassWnd -( Subclass.cpp and Subclass.h ) 新增类,用于改进已有的菜单。 CFlatToolBar - ( FlatBar.cpp and FlatBar.h ) Obsolete with VC 6.0 CModuleVersion - ( ModulVer.cpp and ModulVer.h ) 这是CCJToolBar的基类。 CCoolBar, CRebarInfo - ( CoolBar.cpp and CoolBar.h ) Obsolete with VC 6.0 新增类,用于实现Internet Explorer 4风格的工具条。 CHyperLink - ( HyperLink.cpp and HyperLink.h ) 超链接控件。 使用方法: 在Project Settings选择General标签,Microsoft Foundation Class设置为 Use MFC in a shared DLL。 在Project Settings选择Link标签,设置Category为Input,增加../Lib到Additional Library Path。 在Link标签,改变Category为General,Output Name (所有配置)设置为../Lib。 选择C/C++标签,改变Category为Preprocessor,增加../Include到Additional Include Directories. 最后一步是添加下面两行代码到StdAfx.h头文件: #define MFCX_PROJ #include 为了能静态链接到CJ60Lib,需要做下面修改: 在project settings对话框,选择General标签,确保Microsoft Foundation Class设置为Use MFC in a static library。 添加下面代码到StdAfx.h 头文件,其将使库静态链接到应用程序: #define MFCXLIB_STATIC #define MFCX_PROJ #include

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧