1. 程式人生 > >完美自繪製CListCtrl控制元件[MFC]

完美自繪製CListCtrl控制元件[MFC]

自繪一個item我相信大部分人都在10分鐘內能搞定

但是繪製非item部分的區域,同學們就傻眼了,不知道如何下手

CListCtrl的繪製機制在windows裡做了一個優化,就是一個繪製迴圈通知過程

之所以不在OnPaint中畫是考慮效率上的原因,好了我們看下這個繪製迴圈:

CDDS_PREERASE 準備開始擦除迴圈 

CDDS_POSTERASE 擦除迴圈結束 

CDDS_PREPAINT 準備開始繪製迴圈 

CDDS_POSTPAINT 繪製迴圈結束 

CDDS_ITEM 指定dwItemSpec, uItemState, lItemlParam引數有效 

CDDS_ITEMPREERASE 準備開始列表項擦除 

CDDS_ITEMPREPAINT 準備開始列表項繪製 

CDDS_SUBITEM 指定列表子項 

CDDS_ITEMPOSTERASE 列表項擦除結束 

CDDS_ITEMPOSTPAINT 列表項繪製結束 

我們這裡主要是響應NM_CUSTOMDRAW來實現繪製的

在CDDS_POSTPAINT繪製迴圈結束時我們可以開始繪製非item的部分,如何計算非item的空間請看下面程式碼:

//SkinListCtrl.h

 

//SkinListCtrl.cpp

 

看效果圖:

看到了吧 ,非item部分我們也繪製出來了,右邊問號部分我這裡沒做繪製,這部分也可以繪製的,可以把斑馬線頂到最右邊

建立CListCtrl時樣式建議如下:

 

這裡已經畫有網格線進去了,樣式裡就不要加這個網格線樣式了,就是不用加 樣式

OK,後面我們再來畫下headerctrl就很好看了,下一篇中給出原始碼,並結合到CSkinListCtrl中