eVC++でコントロールのフォントサイズを変更するには?

解決


HiNa  2007-09-28 03:42:09  No: 66457

始めまして。表題のことで質問させていただきます。
開発環境は WinXP Home SP2, eVC++4.0SP2, Poket PC 2003 SDKです。
現在エミュレータ上で開発をしています。FormView上に配置したコントロールに対してキャプションのフォントサイズを変更しようとしましたが、SetFont命令を投げてもエラーは無く実行されるのですが表示に反映されません。
何が原因なのか分かる方いらっしゃったらお願いします。

以下が問題のコードです。
void CTestView::OnInitialUpdate() 
{
  CFormView::OnInitialUpdate();
  
  // TODO: この位置に固有の処理を追加するか、または基本クラスを呼び出してください

  //----------------------------------------------------------------■ここから

    FILE *fp;
    int l,l2;
    int lengn,widthn;
    int csv_read[READMAX][READMAX];
    char fbuf[256];
  char tmp[5];
    char seps[]=",",*token;// [,]文字による区切り-->CSVファイル
  CString SetTxt;

  //フォントサイズ変更  ※エラーは出ないが命令が反映されない??
  CFont CtlFont;
  float FontSize = 20.0;  //フォントサイズ(pt)
  CString FontName = "MS Pゴシック";  //フォント名
  if(CtlFont.CreatePointFont((int)(FontSize * 10.0), FontName)){  //サイズはポイントを10倍する
    //SendDlgItemMessage( IDC_BTN_CLR, WM_SETFONT, (WPARAM)&CtlFont, MAKELPARAM(TRUE,0) );
    //GetDlgItem(IDC_BTN_CLR)->SetFont(&CtlFont, TRUE);
    m_ctrl_BtnCLR.SetFont(&CtlFont, TRUE);    <-  デバッガで追ってこのコマンドが処理されているのは確認している
  }
        ・
        ・
        ・


瀬戸っぷ  2007-09-28 08:31:58  No: 66458

Poket PCは判りませんが…

> CFont CtlFont;

コレって、ローカル変数ですか?


HiNa  2007-09-28 18:00:42  No: 66459

HiNaです。
瀬戸っぷさんへ
>> CFont CtlFont;
>
>コレって、ローカル変数ですか?

その通りです。SetFontの引数にする為にCFont型で設定しています。


Blue  2007-09-28 18:18:15  No: 66460

>その通りです。
それがNGです。

CtlFontが宣言されているブロックを抜けると、その変数は破棄される(=CFontクラスのデストラクタが走る)
ため、実際にフォントを使おうとするタイミングではなくなってしまっている状態になります。

FormViewの派生クラス(CXXXXViewクラス)のメンバ変数か何かにして、
コントロール側がフォントを使うときには常に存在している状態になるようにしてください。


HiNa  2007-09-28 18:45:17  No: 66461

HiNaです。

Blueさんへ
その通りでした。
命令のタイミングと実際の描画のタイミングは異なる事を考慮していなかったとは・・・。お恥ずかしい限りです。

瀬戸っぷさんへ
解決のヒントを与えていただきありがとうございました。

お二人ともありがとうございました。このスレッドは終了とさせていただきます。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加