一个字体按钮类(WTL)2008-01-19 VC知识库 orange

本文打算介绍两个内容:一个是WTL中非常好用的CDialogResize模板类,能让你拖动对话框改变大小(包括控件能自动适应对话框的改变);另一个是button按钮的子类化,产生一个有立体感的字体(本站上的一个例子是用MFC做的CMyTextButton类,我把它移植到WTL中,封装成CFontButton类,在这里先感谢提供此代码的作者),不过只能显示英文字体。通过这些例子,你可以看出WTL并没有什么神秘的地方。一. CDialogResize类的使用1.对话框继承的基类列中添加public CDialogResize<CDerive>本例中添加
public CDialogResize<CMainDlg>
2.添加宏
BEGIN_DLGRESIZE_MAP(CDialogResize<>)
DLGRESIZE_CONTROL(id, flags)
END_DLGRESIZE_MAP()
指定那个控件需要这种支持,其中id是控件ID,flags的值如下所示:DLSZ_SIZE_X = 0x00000001,DLSZ_SIZE_Y = 0x00000002,DLSZ_MOVE_X = 0x00000004,DLSZ_MOVE_Y = 0x00000008,DLSZ_REPAINT = 0x00000010.3.在OnInitDialog()中添加DlgResize_Init(),OK在atlframe.h中你可以找到DlgResize_Init()的定义,以前也有人用MFC写过类似的代码,有兴趣的话比较一下。最后别忘了在stdafx.h中添加相应的头文件,具体见源文件。二.CFontButton类的实现1.COwnerDraw和CCustomDraw这两个模板类都支持自画功能,他们两个的区别是CCustomDraw处理NM_CUSTOMDRAW,一般支持header,list view, rebar, toolbar, tooltip, trackbar 和 tree view 控件的重绘;COwnerDraw处理WM_DRAWITEM, WM_MEASUREITEM, WM_COMPAREITEM和 WM_DELETEITEM这四个消息,通常支持button, combo box, list box, list view control, 和 menu items的自绘。