• ベストアンサー

リストボックスのフォントをサイズを変更したい

コンパイルはできるのですが、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;

質問者が選んだベストアンサー

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.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フォントですからさほど自由度が無いように思います

_jast
質問者

お礼

ありがとうございます。 流れは理解できましたが、CreateInDirectでエラーが出てしまいまい、 このメンバが無かったのでCreateFontIndirectWに書き換えましたが実行後エラーが出ました。が、思いっきり削って CFont* font = new CFont; font->CreatePointFont(80, _T("MS 明朝")); m_ListBox.SetFont(font); これでサイズとフォント体を変更できるようになりました。 納得いかないので、もうすこしLOGFONT取り込み>編集>Setを頑張ってみます。 目的は達成しました。ありがとうございました。

その他の回答 (3)

  • Yanch
  • ベストアンサー率50% (114/225)
回答No.3

手前で使用しているリストボックスのフォント変更メソッドです。 これを参考にしてみてください。   /**    * リストボックスのフォントを変更。    * @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);   }

_jast
質問者

お礼

SetFontをメッセージ処理で実現する方法参考になりました。 必ず必要になると思うのでうれしいです。ありがとうございました。

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.2

GetFont自体はコントロールに対してFont設定を行っていない場合NULLが返ってきます Dialog上のコントロールならばベースのダイアログにFontが設定されているのでGetFontは成功します CViewなどの上のコントロールの場合Font設定はされていませんのでプログラム側で設定しないといけません

_jast
質問者

補足

ダイアログではありません。 Createでウィンドウに張り付けたコントロールのデフォルトの設定フォントを取り出して書き換えるにはどうすればいいのでしょうか?

回答No.1

 こんにちは。  新しいフォントクラスを作成してエディットボックスクラスにセットしないとけないのでは? 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);

_jast
質問者

補足

GetFontはすでにコントロールに設定されているデフォルトのフォントを読み込んでくれるのではないんでしょうか? この設定を読み込んでlfHeightとlfWidthの値だけを書き換えて コントロールに戻したいのですが、このやり方で新しく作ったフォントにGetFontを試しましたが、 同じくGetFontの戻り値事態がなくエラーが出てしまいます。 デフォルトのフォントを読み込む方法を教えてください。