リストコントロール内のフォントサイズを変更するには?

解決


ちゃちゃ  2005-11-16 17:11:54  No: 59612  IP: [192.*.*.*]

失礼いたします、ちゃちゃです。

質問なのですが、
リストコントロール内の文字サイズを変更したいのですが、
どうすればいいのでしょうか?

過去ログを検索してみたのですが、載っていなかったため、
質問させていただきました。

アドバイスなどあればよろしくお願いいたします。

編集 削除
ちゃちゃ  2005-11-16 17:12:48  No: 59613  IP: [192.*.*.*]

書き忘れ…

VC++.NET2003・Windows2000を仕様しています。

編集 削除
Blue  2005-11-16 17:29:40  No: 59614  IP: [192.*.*.*]

> リストコントロール内の文字サイズ
リストコントロールとはCListCtrlでしょうか?
(MFCかどうかかかれていないので確定できず。)

SetFontメソッドは調べられましたか?

編集 削除
ちゃちゃ  2005-11-16 17:58:40  No: 59615  IP: [192.*.*.*]

?> リストコントロール内の文字サイズ
>リストコントロールとはCListCtrlでしょうか?
>(MFCかどうかかかれていないので確定できず。)
書き忘れていました、すみません。。
リストコントロールはCListCtrlのことです。
MFCを使っています。


>SetFontメソッドは調べられましたか?
使ってみた結果、
フォントサイズは大きくなったのですが、
列の高さが変更されず、文字の下のほうが切れてしまいました。。
フォントサイズを大きくするだけで列の高さもかわると思っていたのですが、
違ったみたいです;;

列の高さを変更するには、またそれようの処理を作らないといけないのでしょうか?

編集 削除
ちゃちゃ  2005-11-17 09:32:13  No: 59616  IP: [192.*.*.*]

フォントサイズの変更については解決しましたっ。
ありがとうございました。

編集 削除
dark  2005-11-17 09:33:50  No: 59617  IP: [192.*.*.*]

> フォントサイズの変更については解決しましたっ。
どうやって?それを書くのが掲示板なのでは?

編集 削除
ちゃちゃ  2005-11-17 09:56:04  No: 59618  IP: [192.*.*.*]

>> フォントサイズの変更については解決しましたっ。
>どうやって?それを書くのが掲示板なのでは?

すみません;
ソース載せるの忘れてました。。
以下フォントサイズ変更の処理。

CFont* font;

VERIFY(font->CreateFont(
20,                        // nHeight
0,                         // nWidth
0,                         // nEscapement
0,                         // nOrientation
FW_NORMAL,                 // nWeight
FALSE,                     // bItalic
FALSE,                     // bUnderline
0,                         // cStrikeOut
ANSI_CHARSET,              // nCharSet
OUT_DEFAULT_PRECIS,        // nOutPrecision
CLIP_DEFAULT_PRECIS,       // nClipPrecision
DEFAULT_QUALITY,           // nQuality
DEFAULT_PITCH | FF_SWISS,  // nPitchAndFamily
_T("Arial")));             // lpszFacename

m_List.SetFont(font,true);

編集 削除
Blue  2005-11-17 10:00:39  No: 59619  IP: [192.*.*.*]

> フォントサイズを大きくするだけで列の高さもかわる
かわりませんか?

私の環境(VC6SP2 WinXPSP2)では以下のコードでちゃんと高さも変わりました。

CFont m_fnt; // ダイアログメンバ変数

OnInitDialog関数内
// TODO: 特別な初期化を行う時はこの場所に追加してください。
m_fnt.CreatePointFont( 160, "MS 明朝" );
m_List.SetFont( &m_fnt );
static const LPCTSTR lst[] = { "北海道", "東北", "関東", "中部",
                               "関西", "中国", "四国", "九州" };
for ( int i = 0; i < sizeof( lst ) / sizeof( LPCTSTR ); i++ )
{
    m_List.InsertItem( i, lst[ i ] );
}

なんか、ものすごくかんちがいしていますかねぇ?

編集 削除
Blue  2005-11-17 10:18:29  No: 59620  IP: [192.*.*.*]

> VC6SP2 
SP6ですた。

> LPCTSTR 
TCHAR意識していて、_Tマクロ使ってないのは、まぁ実験コードだからということで。

編集 削除
ちゃちゃ  2005-11-17 10:51:38  No: 59621  IP: [192.*.*.*]

>CFont m_fnt; // ダイアログメンバ変数

>OnInitDialog関数内
// TODO: 特別な初期化を行う時はこの場所に追加してください。
>m_fnt.CreatePointFont( 160, "MS 明朝" );
>m_List.SetFont( &m_fnt );

この処理だけでも、フォントサイズの変更かかりますよね??

編集 削除
Blue  2005-11-17 11:16:44  No: 59622  IP: [192.*.*.*]

まず、他の処理を一切なくしてフォントのサイズが変更できるか試してみてはどうでしょうか?
(実験用に新規プロジェクトを作ったりして、問題を別にして考える)

編集 削除
ちゃちゃ  2005-11-17 11:30:33  No: 59623  IP: [192.*.*.*]

今まで表示できなかったのに、いきなり表示できるようになりました。。
特に何も変えてないのに。。。
表示されたのですが、やはりヘッダー部だけフォント&高さが変更し、
内容は、フォントのみ変更されていました。

>まず、他の処理を一切なくしてフォントのサイズが変更できるか試してみてはどうでしょうか?
>(実験用に新規プロジェクトを作ったりして、問題を別にして考える)

テストアプリ作成してみます;;

編集 削除
ちゃちゃ  2005-11-17 11:56:35  No: 59624  IP: [192.*.*.*]

以下の処理だと、高さのみ変更されましたっ!

CImageList m_ImageList;

m_ImageList.Create(1,20,ILC_COLOR, 0, 0);
m_List.SetImageList(&m_ImageList,LVSIL_SMALL);

これでフォントサイズ組み合わせてみればできそうだけど。。

テストアプリはまだまだ作成途中orz

編集 削除
ちゃちゃ  2005-11-17 18:23:38  No: 59625  IP: [192.*.*.*]

いろいろ試していたところ、解決しましたっ!

↓ヘッダーファイルにて宣言↓
CImageList* Listfont; 

↓OnInitDialg内の処理↓
CFont*  Listfont;

Listfont->CreatePointFont( 130,GOTHIC_TYPE );
m_List.SetFont( Listfont );          // リストのフォント設定

m_ImageList.Create( 1,20,ILC_COLOR,0,0 );
m_List.SetImageList( &m_ImageList,LVSIL_STATE );  // リストの列の高さを設定


としたところ、うまくいきました。

他にも方法があるかもしれないのですが、とりあえず今はこのままで
いいかなと思っています。

ありがとうございました。

編集 削除
Bule  2005-11-17 18:32:56  No: 59626  IP: [192.*.*.*]

> CFont*    Listfont;
これいつDeleteしていますか?

編集 削除
ちゃちゃ  2005-11-17 18:43:44  No: 59627  IP: [192.*.*.*]

>> CFont*    Listfont;
>これいつDeleteしていますか?

してないです…

編集 削除
Blue  2005-11-17 21:03:15  No: 59628  IP: [192.*.*.*]

> してないです…
てことは、ダイアログのメンバ変数にして使えばいいです。
(ポインタでなく実体でもつ)

それにしても、実験用の新規プロジェクト(リストビューオンリーのダイアログ)でもダメでしかたか。。。

編集 削除
ちゃちゃ  2005-11-18 10:23:42  No: 59629  IP: [192.*.*.*]

>> してないです…
>てことは、ダイアログのメンバ変数にして使えばいいです。
>(ポインタでなく実体でもつ)
メンバ変数に変更しました。

OnInitDialgの処理内で、とある関数を呼んでいまして、
その中でも、フォントサイズを設定しているのですが…
↓関数内の処理↓

CFont*  Editfont;
CEdit*  RgstEdit;
CEdit*  RedaEdit;

Editfont->CreatePointFont( 130,GOTHIC_TYPE );

RgstEdit = (CEdit*)GetDlgItem(IDC_EDIT_REGISTER);  // エディットID取得
RedaEdit = (CEdit*)GetDlgItem(IDC_EDIT_READING);  // エディットID取得

RgstEdit->SetFont(Editfont,true);    // エディットのフォントセット
RedaEdit->SetFont(Editfont,true);    // エディットのフォントセット

↑ここまで↑

ここでEditfontをポインタでなく実体でもつと、
アプリが落ちてしまいます…

Editfontをポインタで宣言して、最後にDeleteObjectを
してみたのですが、そこでも落ちてしまいました。。
(DeleteObjectをやらなければうまくいく)

エディット内のフォントサイズ変えようとしてるだけなんですけどorz


>それにしても、実験用の新規プロジェクト(リストビューオンリーのダイアログ)でもダメでしかたか。。。
あ、すみません。。
報告し忘れました。。。
実験用でつくってみたアプリだと、Blue様の処理で
列の高さが変更されました。。
しかし、それを今やってるのに組み込んでも列の高さは変化せず。。

編集 削除
Blue  2005-11-18 10:39:54  No: 59630  IP: [192.*.*.*]

> アプリが落ちてしまいます…
とは?デバッグ実行してドコがおかしそうか特定できましたか?
(ASSERTIONが発生していませんか?)

どうしてもポインタで持ちたいのならば、ダイアログのメンバ変数に
ポインタで追加して、InitDialogで実体をつくり、デストラクタかなんか(エディットボックスを使わなくなったところ)
でdeleteするようにすればいいのでは。

編集 削除
ちゃちゃ  2005-11-18 14:15:39  No: 59631  IP: [192.*.*.*]

>> アプリが落ちてしまいます…
>とは?デバッグ実行してドコがおかしそうか特定できましたか?
>(ASSERTIONが発生していませんか?)
現在デバッグでおっている途中です。

>どうしてもポインタで持ちたいのならば、ダイアログのメンバ変数に
>ポインタで追加して、InitDialogで実体をつくり、デストラクタかなんか(エディットボックスを使わなくなったところ)
>でdeleteするようにすればいいのでは。
そのようにしようと思います。
余談ですが、
ポインタで持った場合って必ずDeleteしなくてはいけないのでしょうか?


また質問になっちゃうのですが…
(新スレたてたほうがいいのでしょうか?)
文字の大きさは変更できたのですが、
直接編集しようとしたときに、文字の周りに枠ででますよね?
その枠の大きさって変えられないのでしょうか?
左右は表示されてるのですが、上下の線が消えてる状態なので。。

編集 削除
Blue  2005-11-18 14:23:20  No: 59632  IP: [192.*.*.*]

> ポインタで持った場合って必ずDeleteしなくてはいけないのでしょうか?
必ずしなくても、システムがやってくれるので大丈夫なのかな。
私の場合は、気持ち悪くてdeleteしないなんでできませんけど。
# コーディング規約とかで明にdeleteしないといけないのならばスルしかないが。

でも、そのアプリを動かしているうちは使わないのにメモリ領域が取られている状態なので、余分にメモリをつかっているということになります。

> (新スレたてたほうがいいのでしょうか?)
そうしたほうがいいです。それともう一つのスレは解決チェックしてくださいね。

編集 削除
ちゃちゃ  2005-11-18 14:29:19  No: 59633  IP: [192.*.*.*]

>> ポインタで持った場合って必ずDeleteしなくてはいけないのでしょうか?
>必ずしなくても、システムがやってくれるので大丈夫なのかな。
>私の場合は、気持ち悪くてdeleteしないなんでできませんけど。
># コーディング規約とかで明にdeleteしないといけないのならばスルしかないが。

>でも、そのアプリを動かしているうちは使わないのにメモリ領域が取られている状態なので、余分にメモリをつかっているということになります。

おぉ。なるほど。
ありがとうございます。

>> (新スレたてたほうがいいのでしょうか?)
>そうしたほうがいいです。それともう一つのスレは解決チェックしてくださいね。
でゎ、そうします><
解決チェック忘れてました…入れておきます!

編集 削除