一个自绘树控件,每个节点前的图标(位图)都是根据数据库读出的内容动态显示的,比如正方形 线等等 颜色也不一样我的思路是这样的:创建位图,在内存上画出来,m_TempBmp为类成员变量
CDC *pDC = GetDC();
MemoryDC.CreateCompatibleDC(pDC);
m_TempBmp.CreateCompatibleBitmap(pDC,m_BmpRect.Width(),m_BmpRect.Height());然后利用GDI函数在MermoryDC上画出想要的图形获得图像的句柄
hBitmap = (HBITMAP)m_TempBmp.m_hObject;最后重写树InsertItem函数,把位图句柄hBitmap作为参数传入并显示图,利用STL MAP容器保存每一项和每一项的图标函数中复制位图的语句是 ItemBMP.attach(hBitmap); 
//我估计这句没有把m_TempBmp复制到ItemBMP的作用..只是ItemBMP通过这个句柄引用了外面的图像我试过的确图标显示出来了,但问题是所有的节点图标完全一样,
而m_TempBmp一定要作为成员变量,否则作为局部变量马上就被销毁了,难道要用数组或者容器来保存每幅图??

解决方案 »

  1.   

    只用一个成员变量肯定不信,就只有你insert的时候得到的那个hBitmap了用容器吧~还有个问题,"从数据库读出来的"...如果数量很大,树的每个item一个bitmap,会用掉过多的GDI资源,导致系统缓慢所以还要判断一下,进行归类(比如,正方形的,颜色也相同),相同的就只用一个bitmat了。
      

  2.   

    取出HBITMAP后Detach就可以了,或者不用局部CBitmap对象,改成每次用new分配,或者干脆不用CBitmap,直接用API操作。