谈谈CListCtrl如何调整行高
?
原文鏈接:?http://blog.csdn.net/sstower/article/details/9094939
調整CListCtrl 行高通常有3種方法:
1.設定字體
2.設定圖片
3.處理MeasureItem消息。
這里只是談一談第3種方法,對于CListCtrl 來說,它只支持owner draw fixed 而不像CListBox 既支持owner draw fixed也支持owner draw variable,這里variable是指行高度是可變的;fixed 指行高度固定。
我們雖然很容易在classWizard 找到虛函數DrawItem但卻找不到MeasureItem函數。這個時候只能自己動手添加這樣的函數,它的原型為:
MeasureItem(LPMEASUREITEMSTRUCT lpMeasureItemStruct)
{
}
從CListCtrl繼承一個類,假如類名叫CTreeList,這樣它的函數實現就是這個樣子:
void CTreeList::MeasureItem(LPMEASUREITEMSTRUCT lpMeasureItemStruct)
{
}
注意在消息映射部分要添加對WM_MEASUREITEM的反射消息:
ON_WM_MEASUREITEM_REFLECT()
默認情況下,這個消息并不會觸發。這時可在PreSubclassWindow()函數中人為觸發:
?
void CTreeList::PreSubclassWindow()
{
CRect rcwin;
GetWindowRect(rcwin);
WINDOWPOS wp;
wp.hwnd=m_hwnd;
wp.cx=rcwin.Width();
wp.cy=rcwin.Height();
wp.flags=SWP_NOACTIVATE|SWP_NOMOVE|SWP_NOOWNERZORDER|SWP_NOZORDER;
SendMessage(WM_WINDOWPOSCHANGED,0,(LPARAM)&wp);
}
處理MeasureItem消息:
void CTreeList::MeasureItem(LPMEASUREITEMSTRUCT lpMeasureItemStruct)
{
lpMeasureItemStruct->itemHeight = m_nItemHeight;
}
最后別忘了在構造函數中初始化m_nItemHeight為你想要的值。
這里稍微怪異一點的是為什么發送WM_WINDOWPOSCHANGED會觸發WM_MEASUREITEM消息。
?
轉載于:https://www.cnblogs.com/huhu0013/p/4612914.html
總結
以上是生活随笔為你收集整理的谈谈CListCtrl如何调整行高的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 广告基本知识-广告的目的和效果
- 下一篇: LVS工作总结之原理篇–DR模式