エディットボックスの文字を中央にする方法 – プログラミング – Home

エディットボックスの文字を中央にする方...
 
通知
すべてクリア

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


タフガイ
 タフガイ
(@タフガイ)
ゲスト
結合: 20年前
投稿: 7
Topic starter  

いつもこちらではお世話になっております。

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

よろしくお願いします。


引用解決済
トピックタグ
たいちう
 たいちう
(@たいちう)
ゲスト
結合: 23年前
投稿: 662
 

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);


返信引用
タフガイ
 タフガイ
(@タフガイ)
ゲスト
結合: 20年前
投稿: 7
Topic starter  

たいちうさん、アドバイスありがとうございます。
簡単にはいかなく、エディットボックスのrectを操作する必要があるんですね。

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

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

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

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


返信引用
たいちう
 たいちう
(@たいちう)
ゲスト
結合: 23年前
投稿: 662
 

これでいけると思いますが。

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


返信引用
タフガイ
 タフガイ
(@タフガイ)
ゲスト
結合: 20年前
投稿: 7
Topic starter  

なんとか成功することができました。

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

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

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


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました