11


0

私は自分のアプリケーションのすべてのコントロール(編集、リストコントロールなど)がシステムのデフォルトではない同じフォントを持っていることを望みます。 どうやってこれをやるの? アプリケーションのデフォルトフォントを設定するWin32 APIはありますか。

6 Answer


12


これを実装する:

    bool CALLBACK SetFont(HWND child, LPARAM font){
        SendMessage(child, WM_SETFONT, font, true);
        return true;
    }

別のファイルの中、またはmain.cppの中に入れて、次のように実行してください。

EnumChildWindows(hwnd, (WNDENUMPROC)SetFont, (LPARAM)GetStockObject(DEFAULT_GUI_FONT));

いつでも、たとえば、すべての子ウィンドウを作成した後、 `+ WM_CREATE +`メッセージで!

win32 GUIアプリケーションソリューションには、常に `+ SetFont.cpp `と ` SetFont.h +`があります。


8


Windowsは、アプリケーション全体のフォントにメカニズムを提供しません。 各ウィンドウクラスには、デフォルトで使用するフォントを選択するための独自の動作があります。 Windowsシェルダイアログで使用されているフォントを選択しようとしたり、自動的に新しいDCに選択された恐ろしいビットマップの「システム」フォントを使用してテキストを描画したりする可能性があります。

Windowsの共通制御ウィンドウクラスはすべて、http://msdn.microsoft.com/en-us/library/ms632642(VS.85).aspx [+ WM_SETFONT +]に応答します。これは、ウィンドウに通知するための標準ウィンドウメッセージです使用するフォント。 独自のウィンドウクラス(特に新しい子コントロールウィンドウクラス)を実装する場合は、 `+ WM_SETFONT +`のハンドラーも記述する必要があります。

  1. ウィンドウクラスに子ウィンドウがある場合、 + WM_SETFONT + ハンドラーはそれぞれにメッセージを転送する必要があります。

  2. ウィンドウクラスがカスタム描画を行う場合は、必ず保存してください `+ WM_SETFONT +`ハンドラーで受け取ったHFONTは、ウィンドウの描画時に使用するDCで選択します。

  3. ウィンドウクラスがトップレベルウィンドウとして使用される場合、ロジックが必要になります 「+ WM_SETFONT +」メッセージを送信する親ウィンドウがないため、独自のフォントを選択します。

ダイアログマネージャがこれの一部を実行することに注意してください。ダイアログテンプレートをインスタンス化するとき、新しいダイアログのフォントはテンプレートで指定されたフォントに設定され、ダイアログはそのすべての子コントロールに「+ WM_SETFONT +」を送信します。


6


はい、できます!

HFONT defaultFont; defaultFont =(HFONT)GetStockObject(DEFAULT_GUI_FONT); SendMessage(handlerControl、WM_SETFONT、WPARAM(defaultFont)、TRUE); //これを各コントロールに送る


4


1回の呼び出しですべての子ウィンドウのフォントを設定する便利な方法です。

SendMessageToDescendants(WM_SETFONT、(WPARAM)m_fntDialogFont.GetSafeHandle()、0);


1


できません。すべてのコントロールに対して同時にこれを実行する方法はありません。 前に提案したように、リソースエディタを通してそれを設定するか、またはすべてのコントロールで手動でSetFont()を呼び出す必要があります。


-1


リソースビューで各ダイアログボックスのフォントを設定できます。 ダイアログ(他のコントロールではありません)を右クリックし、プロパティとフォントオプションを選択します。