none
MFCのエディットコントロールのフォントのサイズや太さの変更をしたい。 RRS feed

  • 質問

  • こんにちは。

    MFCでダイアログベースのプログラムを作っています。

    エディットコントロールのフォントのサイズ変更や太さを変えたいのですが、

    どうすればいいでしょうか?

    OnInitDialog()で、CEdit(元はCWnd)のSetFont関数を使ってみましたが、表示がおかしくうまくいきません。

    m_edit1は、エディットコントロールのコントロール変数です。

      CFont  *curFont, newFont;
        curFont = m_edit1.GetFont();
        LOGFONTW mylf;
        curFont->GetLogFont(&mylf);
      mylf.lfHeight = 40;
        mylf.lfWidth = 40;
        mylf.lfWeight = FW_HEAVY;

        newFont.CreateFontIndirectW(&mylf);
        m_edit1.SetFont(&newFont);

    Visual Studio 2015 Community の c++

    2017年1月30日 7:27

回答

  • Changing the Font Used by an Edit Control

    Changing the font does not change the size of the edit control

    とあるように、フォントが変更されるだけですので、コントロールのサイズ変更は自前で行う必要があります。

    2017年1月30日 7:44
  • CFont newFont; ←フォントオブジェクトのスコープがOnInitDialog内になっていてOnInitDialogを抜けるときに破棄されてしまうのが原因です。

    破棄されないようにするために、C○○○○Dlgのメンバとして、

    CFont *m_newFont;

    と宣言し、OnInitDialog()で

    CFont  *curFont;
    curFont = m_edit1.GetFont();
    LOGFONTW mylf;
    curFont->GetLogFont(&mylf);
    mylf.lfHeight = 40;
    mylf.lfWidth = 40;
    mylf.lfWeight = FW_HEAVY;
    m_newFont= new CFont;
    m_newFont->CreateFontIndirectW(&mylf);
    m_edit1.SetFont(m_newFont);

    として、ダイアログの終了時にフォントオブジェクトを破棄するようにします。
    OnDestroyで下記のようにするとよいと思います。

    void C○○○○Dlg::OnDestroy()
    {
    	CDialogEx::OnDestroy();
    
    	m_newFont->DeleteObject();
    	delete m_newFont;
    }

    2017年1月30日 7:48

すべての返信

  • Changing the Font Used by an Edit Control

    Changing the font does not change the size of the edit control

    とあるように、フォントが変更されるだけですので、コントロールのサイズ変更は自前で行う必要があります。

    2017年1月30日 7:44
  • CFont newFont; ←フォントオブジェクトのスコープがOnInitDialog内になっていてOnInitDialogを抜けるときに破棄されてしまうのが原因です。

    破棄されないようにするために、C○○○○Dlgのメンバとして、

    CFont *m_newFont;

    と宣言し、OnInitDialog()で

    CFont  *curFont;
    curFont = m_edit1.GetFont();
    LOGFONTW mylf;
    curFont->GetLogFont(&mylf);
    mylf.lfHeight = 40;
    mylf.lfWidth = 40;
    mylf.lfWeight = FW_HEAVY;
    m_newFont= new CFont;
    m_newFont->CreateFontIndirectW(&mylf);
    m_edit1.SetFont(m_newFont);

    として、ダイアログの終了時にフォントオブジェクトを破棄するようにします。
    OnDestroyで下記のようにするとよいと思います。

    void C○○○○Dlg::OnDestroy()
    {
    	CDialogEx::OnDestroy();
    
    	m_newFont->DeleteObject();
    	delete m_newFont;
    }

    2017年1月30日 7:48
  • ありがとうございます。

    わかりやすくコードを書いていただいて、

    とても参考になりました。

    (もうMFC使う時代じゃないのかな。でもC++しか知らないし。。。)

    2017年2月6日 10:00