轉(zhuǎn)帖|使用教程|編輯:鮑佳佳|2021-02-07 09:54:30.147|閱讀 719 次
概述:在上一節(jié)為大家講解了文件對(duì)話框的使用,本節(jié)則主要介紹字體對(duì)話框如何應(yīng)用。字體對(duì)話框的作用是用來(lái)選擇字體。我們也經(jīng)常能夠見到。MFC使用CFontDialog類封裝了字體對(duì)話框的所有操作。字體對(duì)話框也是一種模態(tài)對(duì)話框。
# 界面/圖表報(bào)表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關(guān)鏈接:
點(diǎn)擊下載Xtreme Toolkit Pro最新試用版
在上一節(jié)為大家講解了文件對(duì)話框的使用,本節(jié)則主要介紹字體對(duì)話框如何應(yīng)用。
字體對(duì)話框的作用是用來(lái)選擇字體。我們也經(jīng)常能夠見到。MFC使用CFontDialog類封裝了字體對(duì)話框的所有操作。字體對(duì)話框也是一種模態(tài)對(duì)話框。
Xtreme Toolkit Pro:是屢獲殊榮的VC界面庫(kù),是MFC開發(fā)中最全面界面控件套包,它提供了Windows開發(fā)所需要的11種主流的Visual C++ MFC控件,包括Command Bars、Controls、Chart Pro、Calendar、Docking Pane、Property Grid、Report Control、Shortcut Bar、Syntax Edit、Skin Framework 和Task Panel。
點(diǎn)擊下載Xtreme Toolkit Pro最新試用版
CFontDialog類的構(gòu)造函數(shù)
我們先來(lái)了解CFontDialog類。它的常用構(gòu)造函數(shù)原型如下:
	CFontDialog(
LPLOGFONT lplfInitial = NULL,
DWORD dwFlags = CF_EFFECTS | CF_SCREENFONTS,
CDC* pdcPrinter = NULL,
CWnd* pParentWnd = NULL
);
參數(shù)說(shuō)明:
lplfInitial:指向LOGFONT結(jié)構(gòu)體數(shù)據(jù)的指針,可以通過(guò)它設(shè)置字體的一些特征。
dwFlags:指定選擇字體的一個(gè)或多個(gè)屬性,詳情可在MSDN中查閱。
pdcPrinter:指向一個(gè)打印設(shè)備上下文的指針。
pParentWnd:指向字體對(duì)話框父窗口的指針。
上面的構(gòu)造函數(shù)中第一個(gè)參數(shù)為L(zhǎng)OGFONT指針,LOGFONT結(jié)構(gòu)體中包含了字體的大部分特征,包括字體高度、寬度、方向、名稱等等。下面是此結(jié)構(gòu)體的定義:
typedef struct tagLOGFONT {
LONG lfHeight;
LONG lfWidth;
LONG lfEscapement;
LONG lfOrientation;
LONG lfWeight;
BYTE lfItalic;
BYTE lfUnderline;
BYTE lfStrikeOut;
BYTE lfCharSet;
BYTE lfOutPrecision;
BYTE lfClipPrecision;
BYTE lfQuality;
BYTE lfPitchAndFamily;
TCHAR lfFaceName[LF_FACESIZE];
} LOGFONT;
獲取字體對(duì)話框中所選字體
我們?cè)谧煮w對(duì)話框中選擇了字體后,如何獲取選定的字體呢?我們可以通過(guò)CFontDialog類的成員變量m_cf間接獲得選定字體的CFont對(duì)象。m_cf是CHOOSEFONT類型的變量,CHOOSEFONT結(jié)構(gòu)體定義如下:
typedef struct {
DWORD lStructSize;
HWND hwndOwner;
HDC hDC;
LPLOGFONT lpLogFont;
INT iPointSize;
DWORD Flags;
COLORREF rgbColors;
LPARAM lCustData;
LPCFHOOKPROC lpfnHook;
LPCTSTR lpTemplateName;
HINSTANCE hInstance;
LPTSTR lpszStyle;
WORD nFontType;
INT nSizeMin;
INT nSizeMax;
} CHOOSEFONT, *LPCHOOSEFONT;
CHOOSEFON結(jié)構(gòu)體中有個(gè)成員lpLogFont,它是指向LOGFONT結(jié)構(gòu)體變量的指針,就像上面所說(shuō),LOGFONT中包含了字體特征,例如,我們可以通過(guò)LOGFONT的lfFaceName得知字體名。
我們最終要獲得的是所選擇字體的CFont對(duì)象,有了字體的LOGFONT怎樣獲得對(duì)應(yīng)的CFont對(duì)象呢?使用CFont類的成員函數(shù)CreateFontIndirect可以達(dá)到此目的。函數(shù)原型如下:
BOOL CreateFontIndirect(const LOGFONT* lpLogFont );
參數(shù)是LOGFONT指針類型,我們可以傳入CFontDialog類成員變量m_cf的lpLogFont成員,就可以得到所選字體的CFont對(duì)象了。
字體對(duì)話框應(yīng)用實(shí)例
給大家做一個(gè)字體對(duì)話框的實(shí)例。先介紹此實(shí)例要實(shí)現(xiàn)的功能,生成一個(gè)對(duì)話框,對(duì)話框中放置一個(gè)“字體選擇”按鈕和一個(gè)編輯框。點(diǎn)擊“字體選擇”按鈕將彈出字體對(duì)話框。編輯框用于顯示所選字體名,并以選定的字體來(lái)顯示字體名字符串,例如,如果選擇了宋體,則在編輯框中以宋體顯示字符串“宋體”。
以下是創(chuàng)建此實(shí)例的步驟:
1.創(chuàng)建一個(gè)基于對(duì)話框的MFC工程,名字為“Example18”。
2.在自動(dòng)生成的主對(duì)話框IDD_EXAMPLE18_DIALOG的模板中,刪除“TODO: Place dialog controls here.”靜態(tài)文本框,添加一個(gè)按鈕,ID設(shè)為IDC_FONT_BUTTON,Caption設(shè)為“字體選擇”,用于顯示字體對(duì)話框來(lái)選擇字體,再添加一個(gè)編輯框,ID設(shè)為IDC_FONT_EDIT,用來(lái)以所選字體顯示字體名字符串。
3.在Example18Dlg.h中為CExample18Dlg類添加private成員變量:CFont m_font;,用來(lái)保存編輯框中選擇的字體。
4.為按鈕IDC_FONT_BUTTON添加點(diǎn)擊消息的消息處理函數(shù)CExample18Dlg::OnBnClickedFontButton()。
5.修改消息處理函數(shù)CExample18Dlg::OnBnClickedFontButton()如下:
C++代碼
void CExample18Dlg::OnBnClickedFontButton()
{
// TODO: Add your control notification handler code here
CString strFontName;    // 字體名稱
LOGFONT lf;             // LOGFONT變量
// 將lf所有字節(jié)清零
memset(&lf, 0, sizeof(LOGFONT));
// 將lf中的元素字體名設(shè)為“宋體”
_tcscpy_s(lf.lfFaceName, LF_FACESIZE, _T("宋體"));
// 構(gòu)造字體對(duì)話框,初始選擇字體名為“宋體”
CFontDialog fontDlg(&lf);
if (IDOK == fontDlg.DoModal())     // 顯示字體對(duì)話框
{
// 如果m_font已經(jīng)關(guān)聯(lián)了一個(gè)字體資源對(duì)象,則釋放它
if (m_font.m_hObject)
{
m_font.DeleteObject();
}
// 使用選定字體的LOGFONT創(chuàng)建新的字體
m_font.CreateFontIndirect(fontDlg.m_cf.lpLogFont);
// 獲取編輯框IDC_FONT_EDIT的CWnd指針,并設(shè)置其字體
GetDlgItem(IDC_FONT_EDIT)->SetFont(&m_font);
// 如果用戶選擇了字體對(duì)話框的OK按鈕,則獲取被選擇字體的名稱并顯示到編輯框里
strFontName = fontDlg.m_cf.lpLogFont->lfFaceName;
SetDlgItemText(IDC_FONT_EDIT, strFontName);
}
}
6.最后,編譯運(yùn)行程序。顯示結(jié)果對(duì)話框,點(diǎn)擊“字體選擇”按鈕,將彈出字體對(duì)話框,默認(rèn)選擇為“宋體”,我們改而選擇“華文彩云”字體點(diǎn)“確定”,編輯框中會(huì)像如下顯示:
	 
 
到此,我們又學(xué)會(huì)了字體對(duì)話框的使用,對(duì)于以后在界面開發(fā)中控制顯示的字體很有幫助。有問(wèn)題歡迎在雞啄米留言。
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請(qǐng)務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請(qǐng)郵件反饋至chenjj@ke049m.cn