網上修改clistctrl項高度的方法一般是擴大字型,及用將項高度撐大.
這兩種方法雖然簡單,但是效果卻不是很理想.一種比較理想的方法是自畫clistctrl,不過方法相對來說比較複雜.
要修改clistctrl的列表項高度,我們需要自己新增 measureitem 的訊息響應函式,對應的訊息是 wm_measureitem+wm_reflect_base, 而不是 wm_measureitem.在clistbox裡我們可以直接在 classwizard 裡將此訊息響應新增進 class 裡,但是 clistctrl 預設是沒有這個訊息響應的,我們需要手動新增它(注意,這裡不是 wm_measureitem. clistctrl 僅有 wm_measureitem, 對應的函式為 onmeasureitem).
為了響應這個訊息,我們還需要給列表加上 lvs_ownerdrawfixed 風格.可以在 create 列表的時候新增,也可以在 precreatewindow 虛函式中新增.
新增 measureitem 訊息響應函式,首先我們需要在類的標頭檔案中新增:
afx_msg void measureitem(lpmeasureitemstruct lpmeasureitemstruct);
來宣告此訊息響應函式;
然後在cpp的訊息響應巨集中新增:
on_wm_measureitem_reflect()
最後自己建立 measureitem 的函式定義:
/// clistex message handlers
void clistex::measureitem(lpmeasureitemstruct lpmeasureitemstruct)
其中 m_nitemheight 是我在標頭檔案中宣告的乙個成員變數,用於從外部修改列表項高度.
然後我們新增乙個方法,便於從外部直接修改列表項高度:
//設定行高
void setitemheight(uint nheight);
然後是該方法的定義:
//設定行高
void clistex::setitemheight(uint nheight)
這個方法的最後,使用了 sendmessage 傳送 wm_windowposchanged 訊息讓 clistctrl 進入 measureitem 的訊息響應函式,對列表高度進行修改.
因為我們這裡使用了列表的自繪風格,因此列表項需要自己繪製.
首先在類的宣告中新增 drawitem 虛函式宣告:
virtual void drawitem(lpdrawitemstruct lpdrawitemstruct);
然後自畫 clistctrl:
void clistex::drawitem(lpdrawitemstruct lpdrawitemstruct)
{int nitem = lpdrawitemstruct->itemid;
cdc* pdc = cdc::fromhandle(lpdrawitemstruct->hdc);
crect rcbound, rclabel, rcicon;
//獲得列表項圖示,標籤,及項的區域
getitemrect ( nitem, rcicon, lvir_icon );
getitemrect ( nitem, rclabel, lvir_label );
getitemrect ( nitem, rcbound, lvir_bounds );
現在這個 clistctrl 的過載類就支援自定義列表項高度了.
CListCtrl行高的修改
網上修改clistctrl項高度的方法一般是擴大字型,及用將項高度撐大.這兩種方法雖然簡單,但是效果卻不是很理想.一種比較理想的方法是自畫clistctrl,不過方法相對來說比較複雜.要修改clistctrl的列表項高度,我們需要自己新增 measureitem 的訊息響應函式,對應的訊息是 wm ...
美化CListCtrl中顯示的焦點行
經常使用clistctrl來顯示大量的資料,但是總感覺焦點行的背景顏色為藍色,顯示的效果挺難看的,參考 mfc技術內幕 這本書中的例子,自己修改了clistctrl的onpaint 把焦點行改為白色的背景,加了乙個矩形的邊框,下面實際的效果,自我感覺還不錯 實現思路 1 首先呼叫default,讓c...
美化CListCtrl中顯示的焦點行
經常使用 clistctrl 來顯示大量的資料 但是總感覺焦點行的背景顏色為藍色,顯示的效果挺難看的,參考 mfc技術內幕 這本書中的例子,自己修改了 clistctrl 的onpaint 把焦點行改為白色的背景,加了乙個矩形的邊框,下面實際的效果,自我感覺還不錯 實現思路 1 首先呼叫 defau...