VC++でテキストボックスを等幅フォントにしたい – プログラミング – Home

VC++でテキストボックスを等幅フォン...
 
通知
すべてクリア

VC++でテキストボックスを等幅フォントにしたい


yama1
 yama1
(@yama1)
ゲスト
結合: 10年前
投稿: 7
Topic starter  

VC++でテキストボックスのフォントを等幅フォントにしたいです。
Visual Studio2008を使用しています。
今は以下のように設定したのですが、幅も等幅ではないですし、
文字も大きすぎて縦に重なってしまいます。
何か良い方法はありませんか?

// IDC_EDITBOX は文字を追加するエディットボックスのID
CEdit* pEdit = (CEdit*)GetDlgItem(IDC_EDIT5);
int nLastPos = pEdit->GetWindowTextLength();
BOOL bFocus = FALSE;

// フォーカスを一時退避
if (::GetFocus() == pEdit->m_hWnd)
{
bFocus = TRUE;
GetDlgItem(IDOK)->SetFocus();
}

LOGFONT log_font;
GetFont()->GetLogFont( &log_font );
sprintf(log_font.lfFaceName,%s,Terminal);
CFont font;
font.CreateFontIndirect(&log_font);
pEdit->SetFont(&font);

// 文字を追加
pEdit->SetSel(nLastPos, nLastPos);
pEdit->ReplaceSel(lpText);

// フォーカスを戻す
if (bFocus)
pEdit->SetFocus();


引用解決済
トピックタグ
仲澤@失業者
(@uncle_kei)
Prominent Member
結合: 5年前
投稿: 828
 

まず、フォントを自前で初期化してみます。
フォント本体であるCFontは、破棄されないように、
エディットよりも寿命の長い、エディットの親DLG等のメンバーにします。

-------以下の部分は親のメンバ-------
class MyDlg : public CDialog{
:
protected:
CFont m_font; // Editのフォント
:
};
-------以下はOnInitDialog()等で行う------
BOOL
MyDlg::OnInitDialog()
{
:
LOGFONT lf;
ZeroMemory( &lf, sizeof( lf));
strcpy( lf.lfFaceName, MS ゴシック);
lf.lfHeight = -8; // 文字の大きさ
lf.lfCharSet = DEFAULT_CHARSET;
lf.lfOutPrecision = OUT_TT_PRECIS;
lf.lfClipPrecision = CLIP_DEFAULT_PRECIS;
lf.lfQuality = DEFAULT_QUALITY;
lf.lfPitchAndFamily = FF_DONTCARE | FIXED_PITCH;// ピッチ指定
lf.lfWeight = FW_DONTCARE;
m_font.CreateFontIndirect( &lf);// 作成
pEdit->SetFont( m_font, TRUE);//エディットに設定
:
}

とりあえず、やってみてください。


返信引用
AR2
 AR2
(@ar2)
Estimable Member
結合: 5年前
投稿: 110
 

 この記述、例えばボタンを押した時のイベントハンドラなどに書いてるのではないで
しょうか?
 であれば、このメソッドを抜けた時に、フォントが破棄されてるので、不定なフォント
が表示されているのではないかと推測します。

 ですから
CFont font;
font.CreateFontIndirect(&log_font);
pEdit->SetFont(&font);

これを

CFont *font = new CFont();
font->CreateFontIndirect(&log_font);
pEdit->SetFont(font);

 こうすると、開放の記述が無いのでメモリリークしますが、フォントは維持されるので
はないかと思います。
 生成と開放はInitDialog()の中でフォントを生成し、ダイアログを閉じるタイミングで
フォントを破棄するようにすると簡単です。


返信引用
AR2
 AR2
(@ar2)
Estimable Member
結合: 5年前
投稿: 110
 

orz被ってしまいました


返信引用
yama1
 yama1
(@yama1)
ゲスト
結合: 10年前
投稿: 7
Topic starter  

仲澤さん

回答ありがとうございました。
等幅フォントできました。
解決です。
ありがとうございました。

ARさん

回答ありがとうございました。
メソッドを抜けた時に、フォントが破棄されていたのだと思います。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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