List controlの行高変更 – プログラミング – Home

通知
すべてクリア

[解決済] List controlの行高変更


高橋
 高橋
(@高橋)
ゲスト
結合: 23年前
投稿: 15
Topic starter  

Win2K、VC6(SP5)です。
List Controlをオーナードローしています。
Inplace editで、数値を変更した部分などの
色を変えたりしています。
表示文字を大きくしたいのですが、
1行の高さは、どのようにしたら変更できるのでしょうか?


引用未解決
トピックタグ
不良PG
 不良PG
(@不良PG)
ゲスト
結合: 23年前
投稿: 188
 

ListControlに大きなフォントを設定すれば、
自然に大きくなった気がしましたがどうでしょう?


返信引用
高橋
 高橋
(@高橋)
ゲスト
結合: 23年前
投稿: 15
Topic starter  

大きなfontを設定しても、行高は変化せず
文字は、はみ出してしまいます。

void CMyAppView::OnInitialUpdate()
{
CRect rcWnd;
rcWnd.SetRect(0,0,10,10);

m_ctrlMyList.m_pDoc = GetDocument();
m_ctrlMyList.Create(
VS_REPORT|LVS_SHOWSELALWAYS|LVS_SINGLESEL|LVS_OWNERDRAWFIXED|WS_VISIBLE,
rcWnd,
this,
IDC_MY_LIST);

CDC *pDC = GetDC();
CString csBaseFont,csFontSize;

csBaseFont.LoadString(IDS_BASEFONT);
csFontSize.LoadString(IDS_LISTFPOINT);
m_fntList.CreatePointFont(atoi(csFontSize), csBaseFont, pDC );
m_ctrlMyList.SetFont( &m_fntList );
ReleaseDC( pDC );

}


返信引用
不良PG
 不良PG
(@不良PG)
ゲスト
結合: 23年前
投稿: 188
 

あら、オーナードローの場合には、無理ですか・・
でしたら WM_MEASUREITEM を受けて
MEASUREITEMSTRUCT構造体のitemHeightを変更してみて下さい。

※個人的にはカスタムドローの方が好きです♪


返信引用
高橋
 高橋
(@高橋)
ゲスト
結合: 23年前
投稿: 15
Topic starter  

助言ありがとうございます。目的は達成できました。
ただ、気になることがあるのですが、WM_MEASUREITEMは、
どのclassで処理すべきなんでしょうか?
いまのところ、Viewで処理しています。


返信引用
不良PG
 不良PG
(@不良PG)
ゲスト
結合: 23年前
投稿: 188
 

別にどちらでも問題ないと思いますが・・・
コントロール側で受けて置くと再利用しやすい気がします。


返信引用
高橋
 高橋
(@高橋)
ゲスト
結合: 23年前
投稿: 15
Topic starter  

さらに、Fontを自由に変更できるように、FontDialogを
組み込んだんですが、行高をかえることができません。
Font設定に同期して、行高を変更するには
どうしたらいいのでしょう?


返信引用
不良PG
 不良PG
(@不良PG)
ゲスト
結合: 23年前
投稿: 188
 

FontからFontの高さを取得して、行の高さを変更すればよいのでは?
CFont::GetLogFont辺りを見ましょう


返信引用
高橋
 高橋
(@高橋)
ゲスト
結合: 23年前
投稿: 15
Topic starter  

FontDialogの処理で、以下のようにしています。
Font自体は変更できますが、Listの行高が変わりません。

if(dlg.DoModal() == IDOK){
m_fntList.DeleteObject();
if(m_fntList.CreateFontIndirect(&lf)){
m_ctrlMyList.SetFont(&m_fntList);
Invalidate(TRUE);
}
}

OnMeasureItem()が走ると思ってましたが、
走らないようです。
WM_MEASUREITEMをPostMessageしてもだめでした。


返信引用
不良PG
 不良PG
(@不良PG)
ゲスト
結合: 23年前
投稿: 188
 

>別にどちらでも問題ないと思いますが・・・
と書きましたがコントロール側で
こんな感じで受ければ、来るようですね(汗
afx_msg void MeasureItem(LPMEASUREITEMSTRUCT lpMeasureItemStruct);

ON_WM_MEASUREITEM_REFLECT()

void CHoge::MeasureItem(LPMEASUREITEMSTRUCT lpMeasureItemStruct)
{
}


返信引用
高橋
 高橋
(@高橋)
ゲスト
結合: 23年前
投稿: 15
Topic starter  

ありがとうございます。
コントロール側で、はじめは、受けることができますが、
FontDialogでFontを変更後、受けることができませんでした。
なぜなんでしょう?
いろいろやってると、頭がこんがらがってきました。
少し、頭を冷やしたいと思います。


返信引用
不良PG
 不良PG
(@不良PG)
ゲスト
結合: 23年前
投稿: 188
 

このスレッドの全体的な内容が以下のURLにありますので見てみて下さい

http://www.codeguru.com/listview/change_row_height.shtml

ただ・・、英語ですが・・


返信引用
高橋
 高橋
(@高橋)
ゲスト
結合: 23年前
投稿: 15
Topic starter  

いろいろと、ありがとうございました。
目的が達成できました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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