トップ回答者
MFCのエディットコントロールのフォントのサイズや太さの変更をしたい。

質問
-
こんにちは。
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++
回答
-
Changing the Font Used by an Edit Controlで
Changing the font does not change the size of the edit control
とあるように、フォントが変更されるだけですので、コントロールのサイズ変更は自前で行う必要があります。
- 回答の候補に設定 立花楓Microsoft employee, Moderator 2017年2月1日 1:39
- 回答としてマーク Omusubi Wolf 2017年2月6日 9:56
-
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; }
- 編集済み kenjinoteMVP 2017年1月30日 8:01
- 回答の候補に設定 立花楓Microsoft employee, Moderator 2017年2月1日 1:39
- 回答としてマーク Omusubi Wolf 2017年2月6日 9:55
すべての返信
-
Changing the Font Used by an Edit Controlで
Changing the font does not change the size of the edit control
とあるように、フォントが変更されるだけですので、コントロールのサイズ変更は自前で行う必要があります。
- 回答の候補に設定 立花楓Microsoft employee, Moderator 2017年2月1日 1:39
- 回答としてマーク Omusubi Wolf 2017年2月6日 9:56
-
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; }
- 編集済み kenjinoteMVP 2017年1月30日 8:01
- 回答の候補に設定 立花楓Microsoft employee, Moderator 2017年2月1日 1:39
- 回答としてマーク Omusubi Wolf 2017年2月6日 9:55