失礼いたします、ちゃちゃです。
質問なのですが、
リストコントロール内の文字サイズを変更したいのですが、
どうすればいいのでしょうか?
過去ログを検索してみたのですが、載っていなかったため、
質問させていただきました。
アドバイスなどあればよろしくお願いいたします。
書き忘れ…
VC++.NET2003・Windows2000を仕様しています。
> リストコントロール内の文字サイズ
リストコントロールとはCListCtrlでしょうか?
(MFCかどうかかかれていないので確定できず。)
SetFontメソッドは調べられましたか?
?> リストコントロール内の文字サイズ
>リストコントロールとはCListCtrlでしょうか?
>(MFCかどうかかかれていないので確定できず。)
書き忘れていました、すみません。。
リストコントロールはCListCtrlのことです。
MFCを使っています。
>SetFontメソッドは調べられましたか?
使ってみた結果、
フォントサイズは大きくなったのですが、
列の高さが変更されず、文字の下のほうが切れてしまいました。。
フォントサイズを大きくするだけで列の高さもかわると思っていたのですが、
違ったみたいです;;
列の高さを変更するには、またそれようの処理を作らないといけないのでしょうか?
フォントサイズの変更については解決しましたっ。
ありがとうございました。
> フォントサイズの変更については解決しましたっ。
どうやって?それを書くのが掲示板なのでは?
>> フォントサイズの変更については解決しましたっ。
>どうやって?それを書くのが掲示板なのでは?
すみません;
ソース載せるの忘れてました。。
以下フォントサイズ変更の処理。
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);
> フォントサイズを大きくするだけで列の高さもかわる
かわりませんか?
私の環境(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 ] );
}
なんか、ものすごくかんちがいしていますかねぇ?
> VC6SP2
SP6ですた。
> LPCTSTR
TCHAR意識していて、_Tマクロ使ってないのは、まぁ実験コードだからということで。
>CFont m_fnt; // ダイアログメンバ変数
>OnInitDialog関数内
// TODO: 特別な初期化を行う時はこの場所に追加してください。
>m_fnt.CreatePointFont( 160, "MS 明朝" );
>m_List.SetFont( &m_fnt );
この処理だけでも、フォントサイズの変更かかりますよね??
まず、他の処理を一切なくしてフォントのサイズが変更できるか試してみてはどうでしょうか?
(実験用に新規プロジェクトを作ったりして、問題を別にして考える)
今まで表示できなかったのに、いきなり表示できるようになりました。。
特に何も変えてないのに。。。
表示されたのですが、やはりヘッダー部だけフォント&高さが変更し、
内容は、フォントのみ変更されていました。
>まず、他の処理を一切なくしてフォントのサイズが変更できるか試してみてはどうでしょうか?
>(実験用に新規プロジェクトを作ったりして、問題を別にして考える)
テストアプリ作成してみます;;
以下の処理だと、高さのみ変更されましたっ!
CImageList m_ImageList;
m_ImageList.Create(1,20,ILC_COLOR, 0, 0);
m_List.SetImageList(&m_ImageList,LVSIL_SMALL);
これでフォントサイズ組み合わせてみればできそうだけど。。
テストアプリはまだまだ作成途中orz
いろいろ試していたところ、解決しましたっ!
↓ヘッダーファイルにて宣言↓
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 ); // リストの列の高さを設定
としたところ、うまくいきました。
他にも方法があるかもしれないのですが、とりあえず今はこのままで
いいかなと思っています。
ありがとうございました。
> CFont* Listfont;
これいつDeleteしていますか?
>> CFont* Listfont;
>これいつDeleteしていますか?
してないです…
> してないです…
てことは、ダイアログのメンバ変数にして使えばいいです。
(ポインタでなく実体でもつ)
それにしても、実験用の新規プロジェクト(リストビューオンリーのダイアログ)でもダメでしかたか。。。
>> してないです…
>てことは、ダイアログのメンバ変数にして使えばいいです。
>(ポインタでなく実体でもつ)
メンバ変数に変更しました。
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様の処理で
列の高さが変更されました。。
しかし、それを今やってるのに組み込んでも列の高さは変化せず。。
> アプリが落ちてしまいます…
とは?デバッグ実行してドコがおかしそうか特定できましたか?
(ASSERTIONが発生していませんか?)
どうしてもポインタで持ちたいのならば、ダイアログのメンバ変数に
ポインタで追加して、InitDialogで実体をつくり、デストラクタかなんか(エディットボックスを使わなくなったところ)
でdeleteするようにすればいいのでは。
>> アプリが落ちてしまいます…
>とは?デバッグ実行してドコがおかしそうか特定できましたか?
>(ASSERTIONが発生していませんか?)
現在デバッグでおっている途中です。
>どうしてもポインタで持ちたいのならば、ダイアログのメンバ変数に
>ポインタで追加して、InitDialogで実体をつくり、デストラクタかなんか(エディットボックスを使わなくなったところ)
>でdeleteするようにすればいいのでは。
そのようにしようと思います。
余談ですが、
ポインタで持った場合って必ずDeleteしなくてはいけないのでしょうか?
また質問になっちゃうのですが…
(新スレたてたほうがいいのでしょうか?)
文字の大きさは変更できたのですが、
直接編集しようとしたときに、文字の周りに枠ででますよね?
その枠の大きさって変えられないのでしょうか?
左右は表示されてるのですが、上下の線が消えてる状態なので。。
> ポインタで持った場合って必ずDeleteしなくてはいけないのでしょうか?
必ずしなくても、システムがやってくれるので大丈夫なのかな。
私の場合は、気持ち悪くてdeleteしないなんでできませんけど。
# コーディング規約とかで明にdeleteしないといけないのならばスルしかないが。
でも、そのアプリを動かしているうちは使わないのにメモリ領域が取られている状態なので、余分にメモリをつかっているということになります。
> (新スレたてたほうがいいのでしょうか?)
そうしたほうがいいです。それともう一つのスレは解決チェックしてくださいね。
>> ポインタで持った場合って必ずDeleteしなくてはいけないのでしょうか?
>必ずしなくても、システムがやってくれるので大丈夫なのかな。
>私の場合は、気持ち悪くてdeleteしないなんでできませんけど。
># コーディング規約とかで明にdeleteしないといけないのならばスルしかないが。
>でも、そのアプリを動かしているうちは使わないのにメモリ領域が取られている状態なので、余分にメモリをつかっているということになります。
おぉ。なるほど。
ありがとうございます。
>> (新スレたてたほうがいいのでしょうか?)
>そうしたほうがいいです。それともう一つのスレは解決チェックしてくださいね。
でゎ、そうします><
解決チェック忘れてました…入れておきます!
ツイート | ![]() |