獲取對話方塊當前cfont VC呼叫系統字型對話方塊

2021-10-13 11:48:38 字數 3180 閱讀 2591

1、通過mfc類呼叫字型對話方塊

2、通過win32api函式呼叫字型對話方塊

通過mfc類呼叫字型對話方塊

cfontdialog

建構函式

cfontdialog( lplogfont lplfinitial = null, dword dwflags = cf_effects | cf_screenfonts, cdc* pdcprinter = null, cwnd* pparentwnd = null );

引數說明:

lplogfont lplfinitial是logfont(邏輯字型)結構體的指標,用於設定對話方塊顯示的預設字型資訊。如字型的名,字型大小等。一般在實際程式設計中是將目前在用的字型傳人,這樣就在開啟的字型對話方塊中顯示預設正在用的字型的資訊。一般可用cwnd類的cfont* getfont( ) const成員函式來完成獲得目前所使用的字型類指標,再通過cfont類的int getlogfont( logfont * plogfont )就可以得到邏輯字型的指標了。預設值為null。

dword dwflags用於控制對話方塊的行為。

cdc*pdcprinter印表機裝置描述表指標。

cwnd* pparentwnd指定字型對話方塊的父視窗。

示例**:

cfontdialog dlg;

if (idok==dlg.domodal()) choosefont;

引數說明:

dword lstructsize本結構體的大小,一般用sizeof(choosefont)來為這個結構體賦值

hwnd hwndowner擁有這個字型對話方塊的視窗控制代碼,可以為null,表示沒有擁有者。

hdc hdc指定乙個印表機的控制代碼,這個印表機的字型資訊將初始化這個字型對話方塊。如果要是這個成員有效,必須使flags具有cf_printerfonts或cf_both樣式,否則這個成員被忽略。

lplogfont lplogfontlogfont結構體指標,如果flags具有cf_inittologfontstruct樣式,那麼會用lplogfont指向的結構體資訊來初始化字型對話方塊。如果呼叫choosefont()函式顯示字型對話方塊,並且單擊「確定」按鈕,那麼這個成員將儲存使用者選擇的字型資訊。

int ipointsize選擇字型的大小,單位為點的十分之一。

dword flags初始化字型對話方塊的位集,用於設定choosefont結構體中那些引數有效。具體見msdn。

dword rgbcolors如果flags具有cf_effects屬性,那麼將用rgbcolors中的顏色初始化字型對話方塊中的「顏色」下拉列表框。當choosefont()函式返回時,本成員中儲存使用者選擇的字型顏色。

lparam lcustdata應用程式自定義的資料,本資料會被系統傳送給lpfnhook指向的鉤子程式。

lpcfhookproc lpfnhook指向cchookproc鉤子程式的指標,該鉤子可以處理傳送給對話方塊的訊息。該成員只在cc_enablehook標識被設定的情況下才可用,否則該成員會被忽略。

lpctstr lptemplatename指向乙個null結尾的字串,該字串是對話方塊模板資源的名字。

hinstancehinstance如果flags成員設定了cc_enabletemplatehandle識別符號時,hinstance是乙個包含了對話方塊模板的記憶體物件的控制代碼。如果 flags成員設定了cc_enabletemplate識別符號時,hinstance是乙個包含了對話方塊的模組控制代碼。如果上述兩個識別符號都未被設定,則該成員被忽略。

lptstr lpszstyle指向乙個緩衝區,儲存字形資訊。如果flags中設定cf_usestyle屬性,將用這個緩衝區中的字串初始化字型對話方塊的字形資訊。choosefont()函式返回後,這個緩衝區中包含使用者選擇的字形資訊。

word nfonttypechoosefont()函式返回時,儲存選擇的字型樣式。

bold_fonttype 粗體

italic_fonttype 斜體

printer_fonttype 印表機的字型

regular_fonttype 常規字型

screen_fonttype 螢幕字型

simulated_fonttype gdi中的模擬字型

intnsizemin指定使用者能夠選擇的字型大小的最小值,flags中設定cf_limitsize屬性,此引數才有效。

intnsizemax指定使用者能夠選擇的字型大小的最大值,flags中設定cf_limitsize屬性,此引數才有效。

choosefont

bool choosefont(

lpchoosefont lpcf // pointer to structure with initialization data

示例**:

cfont *pcurrentfont=this->getfont(); //獲取當前使用的字型

logfont lf;

pcurrentfont->getlogfont(&lf);

choosefont cf;

cf.lstructsize = sizeof(choosefont);

cf.hwndowner = (hwnd)null;

cf.hdc = (hdc)null;

cf.lplogfont = &lf;

cf.ipointsize = 0;

cf.flags = cf_inittologfontstruct|cf_screenfonts | cf_effects;

cf.rgbcolors = rgb(0,0,0);

cf.lcustdata = 0l;

cf.lpfnhook = (lpcfhookproc)null;

cf.lptemplatename = (lpstr)null;

cf.hinstance = (hinstance) null;

cf.lpszstyle = (lpstr)null;

cf.nfonttype = screen_fonttype;

cf.nsizemin = 0;

cf.nsizemax = 0;

if (idok==choosefont(&cf)){

lplogfont plogfont=cf.lplogfont;

cstring fontname=cf.lplogfont->lffacename; //獲得字型名

上圖是分別用mfc和win32api函式的方法呼叫字型對話方塊,並將字型的名字繪製在對話方塊上。

獲取對話方塊當前cfont 自繪對話方塊

閒來無事,寫了乙個簡單的對話方塊介面,希望給需要的朋友有所幫助。介面如下 介面很單調,我只是想說明一下如何實現介面的自繪。如果有需要,也可以繪製更複雜漂亮的介面。程式的實現也不複雜,接下來就跟著我一步一步做。首先,建立乙個基於對話方塊的應用程式。接下來,在ctestdlg類中新增兩個成員函式 in ...

對話方塊 訊息對話方塊

我們在使用windows系統的過程中經常會見到訊息對話方塊,提示我們有異常發生或提出詢問等。因為在軟體開發中經常用到訊息對話方塊,所以mfc提供了兩個函式可以直接生成指定風格的訊息對話方塊,而不需要我們在每次使用的時候都要去建立對話方塊資源和生成對話方塊類等。這兩個函式就是cwnd類的成員函式mes...

對話方塊中顯示對話方塊

一 對話方塊中顯示對話方塊的方法 1 首先建立要在對話方塊裡顯示的那個對話方塊,命名為 idd inner 設定這個對話方塊的屬性 1 style 選擇 child 中文版 樣式 選擇 下層 2 border 為 none 中文版 邊框 選擇 無 2 為了顯示時能夠準確定位,我們可以在右邊要顯示對話...