共用方式為


字型對話方塊

[ 型] 對話方塊可讓使用者選擇邏輯字型的屬性,例如字型系列和相關字型樣式、點大小、效果 (底線、刪除線和文字色彩) ,以及腳本 (或字元集) 。

您可以藉由初始化CHOOSEFONT結構,並將結構傳遞至ChooseFont函式,來建立並顯示 [型] 對話方塊。

下列螢幕擷取畫面顯示一般的 [ 字型 ] 對話方塊。

顯示字型對話方塊的螢幕擷取畫面

如果使用者按一下 [ 確定 ] 按鈕, ChooseFont 函式會傳回 TRUE ,並在 CHOOSEFONT 結構中設定使用者選取專案的相關資訊。

如果使用者取消 [ 字型 ] 對話方塊或發生錯誤, ChooseFont 會傳回 FALSE ,而且未定義 LOGFONT 結構的內容。 您可以使用 CommDlgExtendedError 函式來擷取擴充的錯誤值來判斷錯誤的原因。

本節將討論下列主題。

字型對話方塊初始化旗標

呼叫ChooseFont之前,CHOOSEFONT結構的Flags成員必須指定CF_SCREENFONTSCF_PRINTERFONTSCF_BOTH,以指出對話方塊是否應該列出螢幕字型、印表機字型或兩者。 如果您指定CF_PRINTERFONTSCF_BOTHCHOOSEFONT結構的hDC成員必須指定印表機裝置內容的控制碼。

如果已設定 CF_PRINTERFONTSCF_BOTH 旗標,字型類型描述標籤會出現在 [ 型] 對話方塊底部。

從 Windows 7 開始,ChooseFont函式不再使用CF_PRINTERFONTSCF_SCREENFONTSCF_BOTHCF_WYSIWYG旗標來進行字型列舉。 它們在 Windows 7 中已過時。 不過, CF_PRINTERFONTS 旗標會保留一個函式:顯示 [ 型] 對話方塊底部的字型類型描述標籤。

您可以使用 Flags 成員來啟用或停用某些 [ 型] 對話方塊控制項,而且您可以使用 Flags 成員搭配其他 CHOOSEFONT 成員來控制某些控制項的初始值。

若要顯示允許使用者選取刪除線、底線和色彩選項的控制項:

  • 設定 CF_EFFECTS 旗標。 您可以使用CHOOSEFONT結構的rgbColors成員來指定初始字型色彩。

若要指定 [字型]、[字型樣式]、[大小]、[刪除線] 和 [底線] 對話方塊控制項的初始值:

  1. 若要指定 [字型]、[字型樣式]、[大小]、[刪除線] 和 [底線] 對話方塊控制項的初始值:
  2. 設定Flags成員中的CF_INITTOLOGFONTSTRUCT旗標,以及lpLogFont指向的LOGFONT結構成員,以指定字型屬性的初始值。
  3. 您也可以使用 CF_NOFACESELCF_NOSTYLESELCF_NOSIZESEL 旗標來防止 [ 型] 對話方塊顯示對應控制項的初始值。 當您使用具有多個字樣、樣式或點大小的文字選取範圍時,這非常有用。 如果使用者未選取對應的值,則當ChooseFont傳回時,這些值也會在Flags中設定。

若要將字型樣式控制項初始化為指定的樣式名稱

  • 設定 CF_USESTYLE 旗標,並使用 lpszStyle 成員來指定樣式名稱。

注意

若要將應用程式全球化,請使用lpLogFont所指向之 LOGFONT結構的lfWeightlfItalic成員來指定樣式。 樣式名稱可能會根據系統使用者介面語言而變更。

 

顯示 [套用] 按鈕

  • 設定CF_APPLY旗標,並提供攔截程式來處理 [用] 按鈕的WM_COMMAND訊息。 攔截程式可以將 WM_CHOOSEFONT_GETLOGFONT 訊息傳送至對話方塊,以擷取包含字型目前選取範圍的 LOGFONT 結構位址。

顯示 [說明] 按鈕

  • 設定 CF_SHOWHELP 旗標。 hwndOwner成員必須識別視窗,才能在使用者按一下 [說明] 按鈕時接收HELPMSGSTRING已註冊的訊息。

限制對話方塊中顯示的字型

  • 設定CF_TTONLYCF_FIXEDPITCHONLYCF_NOVECTORFONTS、CF_NOVERTFONTSCF_SCALABLEONLYCF_WYSIWYG旗標的任何組合。 您也可以使用 CF_NOSIMULATIONS 值,限制對話方塊針對某些字型顯示的可用樣式。

從 Windows 7 開始,對話方塊中顯示的字型清單會根據使用者的顯示字型來限制。 若要移除限制,請設定 CF_INACTIVEFONTS 旗標。

限制使用者可以指定的字樣名稱、樣式和點大小

  1. 設定 CF_FORCEFONTEXIST 旗標,以限制使用者只指定對話方塊中所列的有效字樣名稱、樣式和點大小。
  2. 設定 CF_LIMITSIZE 旗標,以限制使用者指定 nSizeMinnSizeMax 成員所指定範圍內的點大小。

限制或停用 [腳本] 下拉式方塊

  • CF_NOSCRIPTSEL 旗標設定為停用 [ 腳本 ] 下拉式方塊,或設定 CF_SELECTSCRIPT 旗標,將 [ 腳本 ] 下拉式方塊中的選取範圍限制為指定的字元集。

自訂舊版 Windows 上的字型對話方塊

例如,如果您想要包含應用程式唯一的其他控制項,您可以提供 [ 型] 對話方塊的自訂範本。 ChooseFont函式會使用您的自訂範本取代預設範本。

提供 [字型] 對話方塊的自訂範本

  1. 修改 Font.dlg 檔案中指定的預設範本,以建立自訂範本。 預設 [字型] 對話方塊範本中使用的控制項識別碼定義于 Dlgs.h 檔案中。
  2. 使用 CHOOSEFONT 結構來啟用範本,如下所示:
    • 如果您的自訂範本是應用程式或動態連結程式庫中的資源,請在Flags成員中設定CF_ENABLETEMPLATE旗標。 使用 結構的 hInstancelpTemplateName 成員來識別模組和資源名稱。
    • 如果您的自訂範本已在記憶體中,請設定 CF_ENABLETEMPLATEHANDLE 旗標。 使用 hInstance 成員來識別包含範本的記憶體物件。

您可以為 [型] 對話方塊提供CFHookProc攔截程式。 攔截程式可以處理傳送至對話方塊的訊息,並將訊息傳送至對話方塊。 如果您使用自訂範本來定義其他控制項,則必須提供勾點程式來處理控制項的輸入。

啟用 [字型] 對話方塊的勾點程式

  1. CHOOSEFONT結構的Flags成員中設定CF_ENABLEHOOK旗標。
  2. lpfnHook 成員中指定攔截程式的位址。

處理 WM_INITDIALOG 訊息之後,對話方塊程式會將 WM_INITDIALOG 訊息傳送至攔截程式。 此訊息的 lParam 參數是 CHOOSEFONT 結構的指標,可用來初始化對話方塊。

攔截程式可以將 WM_CHOOSEFONT_GETLOGFONTWM_CHOOSEFONT_SETLOGFONTWM_CHOOSEFONT_SETFLAGS 訊息傳送至對話方塊,以取得和設定對話方塊目前的值和旗標。

自訂 Windows 7 上的字型對話方塊

下列螢幕擷取畫面顯示 Windows 7 中的一般 [字型 ] 對話方塊。

顯示字型撥號方塊的螢幕擷取畫面

在舊版 Windows 中,font.dlg 範本檔案包含一個預設的 ChooseFont 範本。 Windows 7 上的 font.dlg 範本檔案包含兩個預設範本:來自舊版 Windows 的預設範本,以及新的 Windows 7 ChooseFont 範本。 因此,當您自訂 Windows 7 上的 [ 字型 ] 對話方塊時,必須考慮下列問題。

  1. 當您為在 Windows 7 上執行的應用程式建立自訂範本時,請使用新的範本。 這個新範本包含連結控制項,使用者可以按一下以啟動 [字型主控台] 視窗,如下列螢幕擷取畫面所示。

    顯示 Windows 7 中字型控制台的螢幕擷取畫面

  2. 若要使用此連結控制項,您的呼叫應用程式必須使用第 6 版或更新版本COMCTL32.DLL。 否則, ChooseFont 函式會在嘗試在自訂範本中建立連結控制項時傳回錯誤。 若要判斷此控制項是否已啟用,請針對 6.0 版COMCTL32.DLL編譯呼叫的應用程式。 如需詳細資訊,請參閱 使用通用控制項啟用視覺化樣式

  3. 如果您的應用程式使用 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 範本。

注意

您必須在新的範本中指定 CONTROLPUSHBUTTON 控制項類型,視應用程式編譯COMMCTL.DLL的版本而定。 另請注意,當您的應用程式在舊版 Windows 作業系統上執行時,無法使用像是 WYSIWYG 顯示字型清單和擴充系列等 Windows 7 特定功能。