Last Updated 2002/05/24
Programming Tips Visual C++ MFC ダイアログ  索 引 
ダイアログでのフォント変更
2002/05/24

ダイアログ(およびそのコントロール)のフォントを変更するからといって OnSetFont() ハンドラをオーバーライドしてはいけない.
OnSetFont() 内で pFont に対して CreateFont() を行うと ASSERT を起こす.
(pFont には既にフォントが割り当てられている為)
OnSetFont() は WM_SETFONT された場合にそのフォントを取得する為にオーバーライドするものである.

フォントを変更するには SetFont() を実行する.

SetFont() をする場合,関数内での自動変数 CFont でフォントを作成してしまうと,フォントは有効にならない.
関数をぬけるときに CFont のデストラクタが走り,フォントの GDI ハンドルを削除してしまうためである.フォントのハンドルが必要になるのは,SetFont() の時ではなく,WM_PAINT に応答して描画するときである.
SetFont() する関数内でしか有効でない自動変数ではフォントは変わらない.
(同じことが WM_CONTROLCOLOR でブラシのハンドルを返す時にも言える)

フォントを変更するには SetFont() で,そのフォントの作成は自動変数ではない CFont で作成する.(メンバ変数など)


参照
前後のTips
ダイアログでのフォント変更

DSS ProgrammingTipsCGI Ver2.02