樹的自繪類很多,很方法都是在onpaint()函數中完成自繪。我也看了不少例子,可是與我想要的實現方法思路不同。我都不知道自己為什么非想 在 NM_CUSTOMDRAW 這個消息中完成自繪, 可能是一開始受msdn的影響,msdn上把像這類控件(ListCtrl,Tree等等)的自繪分成幾個步驟。我覺得條理清楚而且又符合一般的邏輯,所以。。。好了,不廢話了,下面介紹我今天要寫的樹類。下面我講講這個類的實現過程:
首先講講這個類具有的功能吧。能夠設置背景色,設置節點連線顏色,設置節點顏色和圖表(當然你還可以根據自己需要設置節點特征,比如字體),設置節點開關按鈕,大概就這么多了;
我們現在從CTreeCtl派生自己的類,然后增加一些成員變量,其中最重要的是CMap <void*, void*, ItemDrawData, ItemDrawData&> m_mapItemDrawData; 其中ItemDrawData 裝載了每個節點自繪信息:
struct ItemDrawData {
COLORREF color;
HICON hIcon; //每個節點都可以設置圖標
};
由于上船空間限制, 我就上傳類的源碼。使用此類,只要把.h和.cpp文件包括到你工程中,然后把頭文件Include就可以了。下面是運行圖: 這是在ppc上運行的情況,在vc 6中應該也能用。
/Files/kuronca/CColorTree.rar