エディットボックスの文字を中央にする方法

[戻る]
タフガイ [E-Mail] 2004/11/17(水) 11:34:23
いつもこちらではお世話になっております。

MFCで開発しているのですが、
エディットボックスの文字を上下中央に表示する方法が分からなく困っています。
左右中央は簡単にできますが、上下中央はできないのでしょうか?

よろしくお願いします。

たいちう 2004/11/18(木) 10:29:58
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);

タフガイ [E-Mail] 2004/11/18(木) 12:49:22
たいちうさん、アドバイスありがとうございます。
簡単にはいかなく、エディットボックスのrectを操作する必要があるんですね。

早速試してみたのですが、エディットボックスとフォントサイズをおおきな物にすると
機能しないようです。

CSize size = dc.GetTextExtent(m_data);
で帰ってくるsizeの値が文字が大きくても変わらない事に原因があるようです。

他にも
dc.DrawText(m_data, &rect3, DT_CALCRECT);
で帰ってくるrect3を見てみたのですが、
上のCSizeと同じ戻り値でした。

文字サイズが大きくなるとどうも正常にテキストの描画領域が戻ってこないです。

たいちう 2004/11/18(木) 13:03:18
これでいけると思いますが。

CFont font;
font.CreateFont(/* 略 */);
dc.SelectObject(&font);
CSize size = dc.GetTextExtent(m_data);

タフガイ [E-Mail] 2004/11/18(木) 16:43:00
なんとか成功することができました。

InitializeでCFontオブジェクトを生成しても関数を抜けると消えてしまうので
ちょっとした工夫が必要ですね。

フォントサイズが120以下ぐらいだと文字の下のほうが消えてしまうという課題は残って
いますが、ここまでできたら何とかなりそうです。

たいちうさん、誠にありがとうございました。

古いスレッドには追加発言できません。