標準のGUIフォントを取得するには? – プログラミング – Home

標準のGUIフォントを取得するには?
 
通知
すべてクリア

[解決済] 標準のGUIフォントを取得するには?


ぷりうす
 ぷりうす
(@ぷりうす)
ゲスト
結合: 17年前
投稿: 2
Topic starter  

初めて質問させて頂きます。環境は、
・WinXP(SP2) VS2005 VC++ MFC SDI UNICODE文字セット
・WinVista(SP1) 同上
尚XPはクラシックスタイル、VistaはVistaスタイル(Aero有効)です

現在XPとVista両方で動くアプリを作成しているのですが
Vistaの場合、リストコントロール等の既定フォントがメイリオ
であるのに対して、何故かタブコントロールだけSystem
となっており、見栄えがかなり悪いのです。

そこで、タブコントロールも他コントロールと同じにしたい
(というよりもデスクトップスタイルに準拠したい)と思いタブ生成時に
m_TabCtrl.SendMessage(WM_SETFONT, (WPARAM)GetStockObject(DEFAULT_GUI_FONT), 0);

としたところ、表示されたフォントはメイリオではなくMS UI Gothicでした。

期待しているのは、
Vistaスタイルで DEFAULT_GUI_FONT → メイリオ
クラシックスタイル(XP含む)で DEFAULT_GUI_FONT → MS UI Gothic
なんですが...

暫定的な処置として、他コントロールのフォントをWM_GETFONTして
そのハンドルをタブコントロールにWM_SETFONT、などとしていますが
はっきり言って正しい手法とは思えません。

できれば
#if (_WIN32_WINNT >= 0x0600)
// Vistaでのフォント設定
if (Vistaスタイル) ..
else ...
#else
// XPでのフォント設定
#endif
のようなことはせずに、共通のコードでフォントを統一したいと考えています。

この辺りに詳しい方、ご教授願えますでしょうか。


引用未解決
トピックタグ
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

>何故かタブコントロールだけ
なら、ほかのコントロールのフォントを取得してタブコントロールに設定してみると
か?

>m_TabCtrl.SendMessage(WM_SETFONT, (WPARAM)GetStockObject(DEFAULT_GUI_FONT),
0);
SetFontメソッドを使うのが普通でしょう。

http://hpcgi1.nifty.com/MADIA/Vcbbs/wwwlng.cgi?print+200803/08030001.txt
らへんも参考になるかも。


返信引用
ぷりうす
 ぷりうす
(@ぷりうす)
ゲスト
結合: 17年前
投稿: 2
Topic starter  

Blueさん有難うございます。

>なら、ほかのコントロールのフォントを取得してタブコントロールに設定してみると
か?
はい、その方法では期待通り表示されることを確認しています。
<<暫定的な処置として、他コントロールのフォントをWM_GETFONTして
<<そのハンドルをタブコントロールにWM_SETFONT、などとしていますが

>SetFontメソッドを使うのが普通でしょう
確かに
m_TabCtrl.SendMessage(WM_SETFONT, (WPARAM)GetStockObject(DEFAULT_GUI_FONT), 0);
は、
m_TabCtrl.SetFont(CFont::FromHandle((HFONT)GetStockObject(DEFAULT_GUI_FONT)));
の方が「普通」な気がします、勉強になります。

> http://hpcgi1.nifty.com/MADIA/Vcbbs/wwwlng.cgi?print+200803/08030001.txt
を参考に、

NONCLIENTMETRICS ncm;
ncm.cbSize = sizeof(NONCLIENTMETRICS);
SystemParametersInfo(SPI_GETNONCLIENTMETRICS, sizeof(NONCLIENTMETRICS), &ncm,
0);
m_Font.CreateFontIndirect(&ncm.lfCaptionFont);
m_TabCtrl.SetFont(&m_Font);

とすることで、Vistaスタイルではメイリオフォント
クラシックスタイル(XP含む)ではMS UI Gothicフォント
で表示されるようになりました。
尚、
LOGFONT lfg;
SystemParametersInfo(SPI_GETICONTITLELOGFONT, sizeof(LOGFONT), &lgf, 0);
としても同様の結果が得られました。

有難うございました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました