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 で作成する.(メンバ変数など) 参照 |
|