List controlの行高変更

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

不良PG 2002/03/05(火) 11:46:57
ListControlに大きなフォントを設定すれば、
自然に大きくなった気がしましたがどうでしょう?

高橋 2002/03/05(火) 11:56:56
大きな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 2002/03/05(火) 12:06:31
あら、オーナードローの場合には、無理ですか・・
でしたら WM_MEASUREITEM を受けて
MEASUREITEMSTRUCT構造体のitemHeightを変更してみて下さい。


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

高橋 2002/03/05(火) 13:17:58
助言ありがとうございます。目的は達成できました。
ただ、気になることがあるのですが、WM_MEASUREITEMは、
どのclassで処理すべきなんでしょうか?
いまのところ、Viewで処理しています。

不良PG 2002/03/05(火) 13:24:25
別にどちらでも問題ないと思いますが・・・
コントロール側で受けて置くと再利用しやすい気がします。

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

不良PG 2002/03/05(火) 16:26:21
FontからFontの高さを取得して、行の高さを変更すればよいのでは?
CFont::GetLogFont辺りを見ましょう

高橋 2002/03/05(火) 16:36:13
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 2002/03/05(火) 17:04:25
>別にどちらでも問題ないと思いますが・・・
と書きましたがコントロール側で
こんな感じで受ければ、来るようですね(汗
afx_msg void MeasureItem(LPMEASUREITEMSTRUCT lpMeasureItemStruct);

ON_WM_MEASUREITEM_REFLECT()

void CHoge::MeasureItem(LPMEASUREITEMSTRUCT lpMeasureItemStruct)
{
}

高橋 2002/03/05(火) 19:10:06
ありがとうございます。
コントロール側で、はじめは、受けることができますが、
FontDialogでFontを変更後、受けることができませんでした。
なぜなんでしょう?
いろいろやってると、頭がこんがらがってきました。
少し、頭を冷やしたいと思います。

不良PG 2002/03/05(火) 19:43:21
このスレッドの全体的な内容が以下のURLにありますので見てみて下さい


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

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

高橋 2002/03/05(火) 19:53:25
[[解決]]
いろいろと、ありがとうございました。
目的が達成できました。

古いスレッドには追加発言できません。