エディットボックスのフォント変更 – プログラミング – Home

エディットボックスのフォント変更
 
通知
すべてクリア

[解決済] エディットボックスのフォント変更

固定ページ 1 / 2

Kon
 Kon
(@Kon)
ゲスト
結合: 19年前
投稿: 89
Topic starter  

お世話になっておりますKonです。よろしくお願いします。
PCはWinXP、MicrosoftVisualC++6.0 を使用しています。
MFC で、基本クラスをCFormView にしてプロジェクトを作りました。

EditBoxのフォントを指定したいと思っています。
こちらの掲示板を参考にして

class CInterFaceView : public CFormView{
・・・
public:
 CFont m_Font;
}
void CInterFaceView::OnInitialUpdate(){
・・・
 m_Font.CreatePointFont(90,MS ゴシック);
 m_edit_file.SetFont(&m_Font);
 m_Font.DeleteObject();
・・・
}

と記述したところ、
0,フォントは替わった気がする
1,9ポイントの文字で表示されない
2,文字が縦に重なり合う
3,MS ゴシック なのに、フォントの幅がそろわない
という問題が出て解決できません。
何がいけないのか、おわかりになりませんか?


引用未解決
トピックタグ
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

> m_Font.DeleteObject();
は必要ないような。。。


返信引用
ITO
 ITO
(@ITO)
ゲスト
結合: 22年前
投稿: 1235
 

「CreateFont」を使うと解決しそうですね。

3.「FIXED_PITCH」を指定する。


返信引用
ITO
 ITO
(@ITO)
ゲスト
結合: 22年前
投稿: 1235
 

失礼しました、「EditBox」ですね。
「RichEdit」を使ったほうがいいです。
「AfxInitRichEdit()」を最初に入れます。


返信引用
Kon
 Kon
(@Kon)
ゲスト
結合: 19年前
投稿: 89
Topic starter  

ご回答ありがとうございます。

m_Font.CreateFont(9,0,0,0,FW_NORMAL,FALSE,FALSE,0,
SHIFTJIS_CHARSET,OUT_DEFAULT_PRECIS,
CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,
FIXED_PITCH,MS ゴシック);
m_edit_file.SetFont(&m_Font);
m_Font.DeleteObject();

と修正してみましたが、状況が変わりません。
m_Font.DeleteObject();が無い場合は、正しく表示されるようですか
Assertionが出て落ちます。
使い方間違ってますか?


返信引用
Kon
 Kon
(@Kon)
ゲスト
結合: 19年前
投稿: 89
Topic starter  

すみません、すれ違ってしまいました。

RichEditとはCRichEditCtrlのことですか?
当方、ポインタが危ういプログラマーでして
もう少しヒントをいただけると嬉しいのですが・・・。


返信引用
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

WindowsXP SP2 Pro/VC++6.0 SP6 Stand/MFC SDI FormView
で上記のように試してみましたが、

> m_Font.DeleteObject();が無い場合は、正しく表示されるようですか
> Assertionが出て落ちます。

の状態になりませんでした。
Assertionは何をいっているのか調べてみてはどうでしょうか?

# VS2005 Pro でも試しましたが発生しませんでした


返信引用
subaru
 subaru
(@subaru)
ゲスト
結合: 19年前
投稿: 381
 

>m_Font.DeleteObject();が無い場合は、正しく表示されるようですか
>Assertionが出て落ちます。
OnInitialUpdate()が2回以上呼ばれてるとか?


返信引用
ITO
 ITO
(@ITO)
ゲスト
結合: 22年前
投稿: 1235
 

「CRichEditCtrl」です。

誤りがありましたらどなたかフォローをお願いします。
CEDITには、本来フォントを変えることが出来ません。
Konさんもご存知の通りフォントを変えるには、「SetFont」
を使ってフォントを変更します。
CRichEditCtrlは、フォントを変更可能です。
SetDefaultCharFormatで変えます


返信引用
Kon
 Kon
(@Kon)
ゲスト
結合: 19年前
投稿: 89
Topic starter  

皆様回答ありがとうございます。
まず、Assertionの件についてだけ報告します。

>Assertionは何をいっているのか調べてみてはどうでしょうか?

WINGDI.CPPというファイルの
BOOL CGdiObject::Attach(HGDIOBJ hObject)
で止まっているようですが、それが何をいみしているのか分かりませんでした。

>OnInitialUpdate()が2回以上呼ばれてるとか?

呼ばれています。
起動したときと、ファイルを読み込んだ時です。
2回呼ばれると、いけないのですか?


返信引用
dairygoods
 dairygoods
(@dairygoods)
ゲスト
結合: 23年前
投稿: 1421
 

> 2回呼ばれると、いけないのですか?

「初期化」というと、二度以上呼び出されることを考慮しない
コードを書くことがよくありますから、
問題が発生する可能性があるでしょう。

上記の場合、フォントを二度作ろうとしてエラーになっています。

かといって、フォントを削除してしまうと、
そのフォントは表示されません。


返信引用
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

既に作成済みかどうかのチェックを入れればいけそうですけど。

if ( !m_Font.GetSafeHandle() )
{
  m_Font.CreatePointFont(90,MS ゴシック);
}
 m_edit_file.SetFont(&m_Font);


返信引用
Kerry
 Kerry
(@Kerry)
ゲスト
結合: 20年前
投稿: 192
 

SDIなどでは、OnInitialUpdateは2回以上呼ばれる
可能性があります。

OnInitialUpdateではなく、OnCreate(WM_CREATE)で
作成してみてはいかがですか?


返信引用
Kon
 Kon
(@Kon)
ゲスト
結合: 19年前
投稿: 89
Topic starter  

皆様回答ありがとうございます。

Blueさんの記述でうまくいきました。
「CreateFont」でも問題ないようです。

おかげで表示が見やすくなりました。m(_ _)m


返信引用
Kon
 Kon
(@Kon)
ゲスト
結合: 19年前
投稿: 89
Topic starter  

Kerry さんありがとうございます。

CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
は見つかりましたが、
OnCreate(WM_CREATE) は見つかりませんでした。

CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
は一度しか呼ばれないようなので、
ここにフォントの記述を移せば同じ動作になるのでしょうか?
まだ、コンパイルが通りませんが、できそうな雰囲気です。


返信引用
固定ページ 1 / 2

返信する

投稿者名

投稿者メールアドレス

タイトル *

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