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