- ベストアンサー
リストボックスのフォントをサイズを変更したい
コンパイルはできるのですが、GetFontでCFontが取得できません。 これを最も早い段階で実行するには、どこに書けばいいんでしょうか? OnCreateで、リストボックスのCreate後すぐに書きました。 また、もっと簡単にサイズだけ変更する方法はありませんか? なぜ、GetFontが失敗するのか教えてください。お願いします。 MFCです。 LOGFONT logFont; CFont* pFont; pFont = m_OutputListBoxBuf.GetFont(); pFont->GetLogFont(&logFont); logFont.lfHeight = logFont.lfHeight * 0.4; logFont.lfWidth = logFont.lfWidth * 0.4;
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
OnCreate内でなら GetDCでCDCを取得 ダミーのフォントを選択して現在のフォントを取得 このフォントから LOGFONTを取得 といった手順ではいかがでしょう CFont DummyFont; DummyFont.CreatePointFont(120, "MS 明朝"); CDC* pDC = GetDC(); CFont* pDCFont = pDC->SelectObject( &DummyFont ); pDC->SelctObject( pDCFont ); ReleaseDC( pDC ); pDCFont->GetLogFont( &logFont ); logFont.lfHeight = logFont.lfHeight * 0.4; logFont.lfWidth = logFont.lfWidth * 0.4; m_Font.CreateInDirect( &logFont ); m_ctlList.SetFont( &m_Font ); といった具合で でもこの方法だと Systemフォントですからさほど自由度が無いように思います
その他の回答 (3)
- Yanch
- ベストアンサー率50% (114/225)
手前で使用しているリストボックスのフォント変更メソッドです。 これを参考にしてみてください。 /** * リストボックスのフォントを変更。 * @param[in] hWnd リストボックスを示すウィンドウハンドル * @param[in] hFont リストボックスに適用する新しいフォント */ virtual void setFont(HWND hWnd, HFONT hFont) { if ((!hWnd) || (!hFont)) { return; } WPARAM wParam = (WPARAM)hFont; BOOL fRedraw = TRUE; LPARAM lParam = MAKELPARAM(fRedraw, 0); UINT uMsg = WM_SETFONT; ::PostMessage(hWnd, uMsg, wParam, lParam); }
お礼
SetFontをメッセージ処理で実現する方法参考になりました。 必ず必要になると思うのでうれしいです。ありがとうございました。
- redfox63
- ベストアンサー率71% (1325/1856)
GetFont自体はコントロールに対してFont設定を行っていない場合NULLが返ってきます Dialog上のコントロールならばベースのダイアログにFontが設定されているのでGetFontは成功します CViewなどの上のコントロールの場合Font設定はされていませんのでプログラム側で設定しないといけません
補足
ダイアログではありません。 Createでウィンドウに張り付けたコントロールのデフォルトの設定フォントを取り出して書き換えるにはどうすればいいのでしょうか?
- machongola
- ベストアンサー率60% (434/720)
こんにちは。 新しいフォントクラスを作成してエディットボックスクラスにセットしないとけないのでは? LOGFONT logFont; CFont* pFont, *pNewFont; pFont = m_OutputListBoxBuf.GetFont(); pFont->GetLogFont(&logFont); logFont.lfHeight = logFont.lfHeight * 0.4; logFont.lfWidth = logFont.lfWidth * 0.4; //新しいフォントクラスを作成する pNewFont = new CFont(); pNewFont->CreateFontIndirect(&logFont); m_OutputListBoxBuf.SetFont(pNewFont);
補足
GetFontはすでにコントロールに設定されているデフォルトのフォントを読み込んでくれるのではないんでしょうか? この設定を読み込んでlfHeightとlfWidthの値だけを書き換えて コントロールに戻したいのですが、このやり方で新しく作ったフォントにGetFontを試しましたが、 同じくGetFontの戻り値事態がなくエラーが出てしまいます。 デフォルトのフォントを読み込む方法を教えてください。
お礼
ありがとうございます。 流れは理解できましたが、CreateInDirectでエラーが出てしまいまい、 このメンバが無かったのでCreateFontIndirectWに書き換えましたが実行後エラーが出ました。が、思いっきり削って CFont* font = new CFont; font->CreatePointFont(80, _T("MS 明朝")); m_ListBox.SetFont(font); これでサイズとフォント体を変更できるようになりました。 納得いかないので、もうすこしLOGFONT取り込み>編集>Setを頑張ってみます。 目的は達成しました。ありがとうございました。