CMyButton是我从CBUTTON派生的一个类,只重载了DrawItem函数。
大体流程如下:
1 新建一个对话框工程CMyButtonTest
2 加入CMyButton类,DrawItem中从外部读入一个PNG图片,并且显示
3 在CMyButtonTestDlg中加入成员变量CMyButton m_BtTest;
3 在CMyButtonTestDlg::InitDialog()中调用m_BtTest。Create(),传给Create一个已经在Resouse.h中定义好的ID
按照上面的步骤,按钮可以正常显示,并画处图片可是,可是,我将CMyButtonTestDlg类加入到另外一个工程里,并在某个页面的按钮响应函数里new CMyButtonTestDlg,则在CMyButtonTestDlg直接画图的图片显示正常,而m_BtTest并未被画处,但是可以看到CMyButton::DrawItem被调用,并且点击该按钮的区域,该按钮的响应单击的函数会被顺利调用

解决方案 »

  1.   

    按钮创建时用ModifyStyle函数添加BS_OWNERDRAW按钮风格即可,这样就不必每次都象上面那样改属性了
      

  2.   

    我在调用m_BtTest.Create()的时候,已经添加了BS_OWNERDRAW属性,令人纳闷的是,当CMyButtonTestDlg是一个独立的工程时,按钮显示是正常的,都能在按钮的区域画出图片一旦加入到另外一个工程,CMyButtonTestDlg作为工程的一个子页,则按钮就显示不出来了,我个人觉得这是问题的关键所在哈
      

  3.   

    会不会是按钮的ID和工程里的某个控件的ID重复了? /\︵/\ 
    (=^∶^=)
    (~)︾(~)
    (~)︵(~) 
      

  4.   

    ID重复,应该不是吧,我们几个人的ID段都是分开的,我的ID定义在自己的段里
      

  5.   

    调试一下,看按钮是否真正添加了BS_OWNERDRAW
      

  6.   

    如果不是真正添加了BS_OWNERDRAW,那第一种情况应该也是画不出来的吧按钮也是已经被创建了,不然就不会调用OnCli()响应函数了
      

  7.   

    #define BS_OWNERDRAW 0x0000000BL
    spy++ 看看,有没有这个属性
      

  8.   

    现在有个新问题,项目属性中MFC的使用设为在共享DLL中使用MFC,则CRectTracker的SetCursor 可正常显示,如果在项目属性中MFC的使用设为在静态库中使用MFC,则SetCursor 的光标显示不出来.类似http://topic.csdn.net/t/20020612/11/797147.html中所讲的情况,大家怎么解决的呢?