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()函數更新內部信息,並且顯示樣
本文本。