字型對話方塊
[ 字 型] 對話方塊可讓使用者選擇邏輯字型的屬性,例如字型系列和相關字型樣式、點大小、效果 (底線、刪除線和文字色彩) ,以及腳本 (或字元集) 。
您可以藉由初始化CHOOSEFONT結構,並將結構傳遞至ChooseFont函式,來建立並顯示 [字型] 對話方塊。
下列螢幕擷取畫面顯示一般的 [ 字型 ] 對話方塊。
如果使用者按一下 [ 確定 ] 按鈕, ChooseFont 函式會傳回 TRUE ,並在 CHOOSEFONT 結構中設定使用者選取專案的相關資訊。
如果使用者取消 [ 字型 ] 對話方塊或發生錯誤, ChooseFont 會傳回 FALSE ,而且未定義 LOGFONT 結構的內容。 您可以使用 CommDlgExtendedError 函式來擷取擴充的錯誤值來判斷錯誤的原因。
本節將討論下列主題。
字型對話方塊初始化旗標
呼叫ChooseFont之前,CHOOSEFONT結構的Flags成員必須指定CF_SCREENFONTS、CF_PRINTERFONTS或CF_BOTH,以指出對話方塊是否應該列出螢幕字型、印表機字型或兩者。 如果您指定CF_PRINTERFONTS或CF_BOTH,CHOOSEFONT結構的hDC成員必須指定印表機裝置內容的控制碼。
如果已設定 CF_PRINTERFONTS 或 CF_BOTH 旗標,字型類型描述標籤會出現在 [ 字 型] 對話方塊底部。
從 Windows 7 開始,ChooseFont函式不再使用CF_PRINTERFONTS、CF_SCREENFONTS、CF_BOTH和CF_WYSIWYG旗標來進行字型列舉。 它們在 Windows 7 中已過時。 不過, CF_PRINTERFONTS 旗標會保留一個函式:顯示 [ 字 型] 對話方塊底部的字型類型描述標籤。
您可以使用 Flags 成員來啟用或停用某些 [ 字 型] 對話方塊控制項,而且您可以使用 Flags 成員搭配其他 CHOOSEFONT 成員來控制某些控制項的初始值。
若要顯示允許使用者選取刪除線、底線和色彩選項的控制項:
- 設定 CF_EFFECTS 旗標。 您可以使用CHOOSEFONT結構的rgbColors成員來指定初始字型色彩。
若要指定 [字型]、[字型樣式]、[大小]、[刪除線] 和 [底線] 對話方塊控制項的初始值:
- 若要指定 [字型]、[字型樣式]、[大小]、[刪除線] 和 [底線] 對話方塊控制項的初始值:
- 設定Flags成員中的CF_INITTOLOGFONTSTRUCT旗標,以及lpLogFont指向的LOGFONT結構成員,以指定字型屬性的初始值。
- 您也可以使用 CF_NOFACESEL、 CF_NOSTYLESEL和 CF_NOSIZESEL 旗標來防止 [ 字 型] 對話方塊顯示對應控制項的初始值。 當您使用具有多個字樣、樣式或點大小的文字選取範圍時,這非常有用。 如果使用者未選取對應的值,則當ChooseFont傳回時,這些值也會在Flags中設定。
若要將字型樣式控制項初始化為指定的樣式名稱
- 設定 CF_USESTYLE 旗標,並使用 lpszStyle 成員來指定樣式名稱。
注意
若要將應用程式全球化,請使用lpLogFont所指向之 LOGFONT結構的lfWeight和lfItalic成員來指定樣式。 樣式名稱可能會根據系統使用者介面語言而變更。
顯示 [套用] 按鈕
- 設定CF_APPLY旗標,並提供攔截程式來處理 [套用] 按鈕的WM_COMMAND訊息。 攔截程式可以將 WM_CHOOSEFONT_GETLOGFONT 訊息傳送至對話方塊,以擷取包含字型目前選取範圍的 LOGFONT 結構位址。
顯示 [說明] 按鈕
- 設定 CF_SHOWHELP 旗標。 hwndOwner成員必須識別視窗,才能在使用者按一下 [說明] 按鈕時接收HELPMSGSTRING已註冊的訊息。
限制對話方塊中顯示的字型
- 設定CF_TTONLY、CF_FIXEDPITCHONLY、CF_NOVECTORFONTS、CF_NOVERTFONTS、CF_SCALABLEONLY和CF_WYSIWYG旗標的任何組合。 您也可以使用 CF_NOSIMULATIONS 值,限制對話方塊針對某些字型顯示的可用樣式。
從 Windows 7 開始,對話方塊中顯示的字型清單會根據使用者的顯示字型來限制。 若要移除限制,請設定 CF_INACTIVEFONTS 旗標。
限制使用者可以指定的字樣名稱、樣式和點大小
- 設定 CF_FORCEFONTEXIST 旗標,以限制使用者只指定對話方塊中所列的有效字樣名稱、樣式和點大小。
- 設定 CF_LIMITSIZE 旗標,以限制使用者指定 nSizeMin 和 nSizeMax 成員所指定範圍內的點大小。
限制或停用 [腳本] 下拉式方塊
- 將 CF_NOSCRIPTSEL 旗標設定為停用 [ 腳本 ] 下拉式方塊,或設定 CF_SELECTSCRIPT 旗標,將 [ 腳本 ] 下拉式方塊中的選取範圍限制為指定的字元集。
自訂舊版 Windows 上的字型對話方塊
例如,如果您想要包含應用程式唯一的其他控制項,您可以提供 [ 字 型] 對話方塊的自訂範本。 ChooseFont函式會使用您的自訂範本取代預設範本。
提供 [字型] 對話方塊的自訂範本
- 修改 Font.dlg 檔案中指定的預設範本,以建立自訂範本。 預設 [字型] 對話方塊範本中使用的控制項識別碼定義于 Dlgs.h 檔案中。
- 使用 CHOOSEFONT 結構來啟用範本,如下所示:
- 如果您的自訂範本是應用程式或動態連結程式庫中的資源,請在Flags成員中設定CF_ENABLETEMPLATE旗標。 使用 結構的 hInstance 和 lpTemplateName 成員來識別模組和資源名稱。
- 如果您的自訂範本已在記憶體中,請設定 CF_ENABLETEMPLATEHANDLE 旗標。 使用 hInstance 成員來識別包含範本的記憶體物件。
您可以為 [字型] 對話方塊提供CFHookProc攔截程式。 攔截程式可以處理傳送至對話方塊的訊息,並將訊息傳送至對話方塊。 如果您使用自訂範本來定義其他控制項,則必須提供勾點程式來處理控制項的輸入。
啟用 [字型] 對話方塊的勾點程式
- 在CHOOSEFONT結構的Flags成員中設定CF_ENABLEHOOK旗標。
- 在 lpfnHook 成員中指定攔截程式的位址。
處理 WM_INITDIALOG 訊息之後,對話方塊程式會將 WM_INITDIALOG 訊息傳送至攔截程式。 此訊息的 lParam 參數是 CHOOSEFONT 結構的指標,可用來初始化對話方塊。
攔截程式可以將 WM_CHOOSEFONT_GETLOGFONT、 WM_CHOOSEFONT_SETLOGFONT和 WM_CHOOSEFONT_SETFLAGS 訊息傳送至對話方塊,以取得和設定對話方塊目前的值和旗標。
自訂 Windows 7 上的字型對話方塊
下列螢幕擷取畫面顯示 Windows 7 中的一般 [字型 ] 對話方塊。
在舊版 Windows 中,font.dlg 範本檔案包含一個預設的 ChooseFont 範本。 Windows 7 上的 font.dlg 範本檔案包含兩個預設範本:來自舊版 Windows 的預設範本,以及新的 Windows 7 ChooseFont 範本。 因此,當您自訂 Windows 7 上的 [ 字型 ] 對話方塊時,必須考慮下列問題。
當您為在 Windows 7 上執行的應用程式建立自訂範本時,請使用新的範本。 這個新範本包含連結控制項,使用者可以按一下以啟動 [字型主控台] 視窗,如下列螢幕擷取畫面所示。
若要使用此連結控制項,您的呼叫應用程式必須使用第 6 版或更新版本COMCTL32.DLL。 否則, ChooseFont 函式會在嘗試在自訂範本中建立連結控制項時傳回錯誤。 若要判斷此控制項是否已啟用,請針對 6.0 版COMCTL32.DLL編譯呼叫的應用程式。 如需詳細資訊,請參閱 使用通用控制項啟用視覺化樣式。
如果您的應用程式使用 COMCTL32.DLL 5.0 版或更早版本,您必須在建立自訂範本時執行下列動作:
將控制項指定為 PUSHBUTTON。 用來啟動字型主控台的控制項會顯示為按鈕而非連結。
取代 font.dlg 中的下列文字:
CONTROL "<A>Show more fonts</A>", IDC_MANAGE_LINK, "SysLink", WS_TABSTOP, 7, 199, 227, 9
具有下列文字:
PUSHBUTTON "S&how more fonts", IDC_MANAGE_LINK, 7, 199, 74, 14 , WS_TABSTOP
若要確保您的應用程式使用自訂範本,您必須使用 CF_ENABLETEMPLATE 旗標指定自訂範本、根據 Windows 7 ChooseFont 範本建立自訂範本,然後選擇性地啟用攔截程式。
如果您啟用攔截程式而不建立自訂範本,則會載入舊版 Windows 的預設 ChooseFont 範本。
注意
您必須在新的範本中指定 CONTROL 或 PUSHBUTTON 控制項類型,視應用程式編譯COMMCTL.DLL的版本而定。 另請注意,當您的應用程式在舊版 Windows 作業系統上執行時,無法使用像是 WYSIWYG 顯示字型清單和擴充系列等 Windows 7 特定功能。