完美自繪製CListCtrl控制元件[MFC]
阿新 • • 發佈:2019-02-10
自繪一個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中