在vc.net动态的创建了按钮(在CTreeCtrl里面),点一下,调用gdi+画一个图,然后再把这图贴到该按钮上。但就是贴不上去,如果我是调用之前在资源里面画好的BITMAP,就可以显示了~~
不知道怎么回事。搞得我郁闷得很。。各位大虾看看~(CButtonST相信大家都知道吧。。)
viod mytree::drawbitmap()
        {
        Bitmap bit(70,70);
Graphics *g=Graphics::FromImage(&bit);
        Pen pen(Color::Red,3);
g->DrawLine(&pen,10,10,70,70);
HBITMAP hBit;
bit.GetHBITMAP(RGB(255,255,255),&hBit); CButtonST* m_Press;
m_Press=(CButtonST*)CButtonST::FromHandle(GetFocus()->GetSafeHwnd());
m_Press->SetBitmaps((hBit,RGB(255,255,255)); //IDB_QQ,NULL 
       }
能通过编译,但是执行的时候就会报错,不知道GDI+画的图为什么不能在TREE里面动态的加载呢?我朋友用在View类上貌似可以显示的。。事把这段代码的gdi+部分注释掉。。
换成
         CButtonST* m_Press;
m_Press=(CButtonST*)CButtonST::FromHandle(GetFocus()->GetSafeHwnd());
         m_Press->SetBitmaps(IDB_QQ,NULL); //就可以了显示IDB_QQ

解决方案 »

  1.   

    考虑把 HBITMAP hBit;作为类变量,而不是局部变量 
      

  2.   

    Bitmap *bit=new Bitmap(70,70); 
      

  3.   

    我没有这样用过,应该是画完图后,把它拷贝下来,即在CDC中有它的副本,然后通过CDC获取其HBITMAP,我想最好复制一份,因为不知道原来的会不会在出了这个函数后丢掉不,然后把复制后的HBTIMAP贴到按钮上
      

  4.   

    TO jszj我现在就是用你这方法在改
      

  5.   

    TO  Conry画在按钮上的画,不好控制大小啊如果我画在一幅图上的话,再贴上去,,会自动把图弄到那个按钮大小的吧
    如果要把按钮作为CDC。。似乎不好处理呀
      

  6.   

    皮之不存,毛将焉附?
    你这个Bitmap bit(70,70)是临时变量,drawbitmap()一结束就销毁了,不管你以前画了什么,也不可能保存下来,更何谈显示?Bitmap *bit=new Bitmap(70,70); 
    也不是好主意,什么时候删除呢?所以最好还是用资源来做。