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