いつもこちらではお世話になっております。
MFCで開発しているのですが、
エディットボックスの文字を上下中央に表示する方法が分からなく困っています。
左右中央は簡単にできますが、上下中央はできないのでしょうか?
よろしくお願いします。
OnInitDialog で、↓こんな感じでできました。より良い方法あるかも。
m_data = Sample;
CClientDC dc(this);
CSize size = dc.GetTextExtent(m_data);
CEdit *edit = (CEdit*)GetDlgItem(IDC_EDIT1); // マルチライン エディット コントロ
ール
CRect rect, rect2;
edit->GetClientRect(rect);
rect2 = rect;
rect2.top = (rect.bottom - size.cy) / 2;
rect2.bottom = rect2.top + size.cy;
edit->SetRect(rect2);
UpdateData(FALSE);
たいちうさん、アドバイスありがとうございます。
簡単にはいかなく、エディットボックスのrectを操作する必要があるんですね。
早速試してみたのですが、エディットボックスとフォントサイズをおおきな物にすると
機能しないようです。
CSize size = dc.GetTextExtent(m_data);
で帰ってくるsizeの値が文字が大きくても変わらない事に原因があるようです。
他にも
dc.DrawText(m_data, &rect3, DT_CALCRECT);
で帰ってくるrect3を見てみたのですが、
上のCSizeと同じ戻り値でした。
文字サイズが大きくなるとどうも正常にテキストの描画領域が戻ってこないです。
これでいけると思いますが。
CFont font;
font.CreateFont(/* 略 */);
dc.SelectObject(&font);
CSize size = dc.GetTextExtent(m_data);
なんとか成功することができました。
InitializeでCFontオブジェクトを生成しても関数を抜けると消えてしまうので
ちょっとした工夫が必要ですね。
フォントサイズが120以下ぐらいだと文字の下のほうが消えてしまうという課題は残って
いますが、ここまでできたら何とかなりそうです。
たいちうさん、誠にありがとうございました。