mfc提供了三种属性页类:cfontproppage、ccolorproppage和cpictureproppage。
但是,它们只能与ole automation一起使用。在本文中将介绍如何在属性对话框中添
加字体属性页。
解决的办法是你自己建立字体属性页。为了让你能定制通用对话框的行为,sdk
提供了这些对话框的对话框资源。“choose font”对话框是在include目录中的
font.dlg文件中,相应的符号在dlgs.h文件中。使用这些文件作为出发点,我们
可以为字体属性页建立资源,并且添加一个使用这些资源的cpropertypage继承类。
下面的实现可能是有限的的,但也有一定的参考价值。如果你想增强它,可以查看
mfc源程序目录中的cfontproppage源文件。
第一步:添加对话资源
你可以在devstudio中打开下面的rc文件devstudio,然后把对话框资源复制到
你的主资源文件中,或者你也可以把该资源文件包含进去。
为了复制资源文件,请在devstudio中打开“fontpage.rc”文件,然后展开资源
的outline。然后打开resourceview,以便对话框资源是可见的。最后,从
fontpage.rc中拖动idd_fontpage资源到你的应用程序resourceview的资源中。
如果你想包含fontpage资源文件,只要把“fontpage.rc”和“fontpagerc.h”
文件(在下面列出)到项目目录中的“res”目录中即可。然后在该目录中已有的
“rc2”文件中添加下面这段。资源图像也列在下面。
#include "fontpage.rc"
listing of fontpage.rc
/////////////////////////////////////////////////////////////////////////
// listing of fontpage.rc
//
#include "winresrc.h"
#include "fontpagerc.h"
idd_fontpage dialog discardable 13, 54, 264, 133
style ws_child | ws_caption | ws_sysmenu
caption "font"
font 8, "helv"
begin
ltext "&font:",stc1,6,3,40,9
combobox idc_font,6,13,131,54,cbs_simple | cbs_autohscroll |
cbs_sort | cbs_disablenoscroll | ws_vscroll | ws_tabstop
ltext "font st&yle:",stc2,153,3,44,9
combobox idc_style,153,13,64,54,cbs_simple | cbs_disablenoscroll |
ws_vscroll | ws_tabstop
ltext "&size:",stc3,224,3,30,9
combobox idc_fontsize,224,13,32,54,cbs_simple |
cbs_disablenoscroll | ws_vscroll | ws_tabstop
groupbox "effects",grp1,6,72,84,34,ws_group
control "stri&keout",idc_strikeout,"button",bs_autocheckbox |
ws_tabstop,10,82,49,10
control "&underline",idc_underline,"button",bs_autocheckbox,10,
94,51,10
groupbox "sample",grp2,98,72,160,49,ws_group
ctext "aabbyyzz",idc_sample,104,81,149,37,ss_noprefix
end
/////////////////////////////////////////////////////////////////////////
// listing of fontpagerc.h
/////////////////////////////////////////////////////////////////////////
#define idc_strikeout 0x0410
#define idc_underline 0x0411
#define grp1 0x0430
#define grp2 0x0431
#define stc1 0x0440
#define stc2 0x0441
#define stc3 0x0442
#define idc_sample 0x0444
#define idc_font 0x0470
#define idc_style 0x0471
#define idc_fontsize 0x0472
#define idd_fontpage 1543
/////////////////////////////////////////////////////////////////////////
第二步:在你的项目中包含源文件
下面给出了头文件和实现文件。你只要简单的把它们包含到你的项目中,并且
使用cfontpage类就可以了。该类的实现是比较简单的。cfontpage构造函数获取一
指向logfont结构的指针。它使用该结构的信息来初始化自己。如果logfont结构没
有提供,则使用窗口的当前字体。在oninitdialog()函数中,我们列出了所需字体
和字体组合框。但是,任何字体特性的改变,都要调用onselchange()函数来实现。
所有的信息映射入口都指向该函数。onselchange()函数更新内部信息,并且显示样
本文本。