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