m_pButton =new C3DTextButton;
m_pButton->Create(_T ("Title "), WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,CRect(400,400,500,424),this,IDC_MYBUTTON);利用以上代码,可以显示一个标准风格的Button,但是我想实现自己设置风格的Button,
C3DTextButton是派生的新的类DrawItem和Draw虚函数已经修改了。但是怎么把Button设置为OWNERDRAW属性?
我用
GetDlgItem(IDC_MYBUTTON)->ModifyStyle(0,BS_OWNERDRAW,0);
或m_pButton->Create(_T ("Title "), WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON|BS_OWNERDRAW,CRect(400,400,500,424),this,IDC_MYBUTTON);
都不行,编译能通过,但运行时会出错。
有谁这样用过?请指点!!

解决方案 »

  1.   

    C3DTextButton::Draw()中有这么一段代码.
    //获得控件的字体
    CFont* pFont=GetFont();
       
     //确定所选字体有效高度和宽度
    LOGFONT logfont;
    pFont->GetObject(sizeof(LOGFONT),&logfont);
    用Debug调试到最下面一句时出错了,请大家指点.
      

  2.   

    可能的问题是你重载的虚函数有问题你可以只保留Wizard中生成的代码其余全部删除看运行是否出错。
      

  3.   

    是不是你从重载的DrawItem函数调用基类的DrawItem了?
    CButton::DrawItem里面只有ASSERT(FALSE);如果调用就会出错。
      

  4.   

    我重载的DrawItem对于在模板中添加的Button是可以用的。只要添加一个button控件,设置类型为OWNERDRAW,然后建立一个相关的变量m_pButton,设置变量类型为C3DTextButton,这样运行就可以了。我在弹出的Dialog中都是这么用的。
    但是我是在View中动态生成Button时就不行了。我照onemore的说法做了,然后使用语句m_pButton->Create(_T ("Title "), WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON|BS_OWNERDRAW,CRect(400,400,500,424),this,IDC_MYBUTTON);
    这时候显示的Button是个空白的,要再加入什么语句,怎么才能在上面显示文本?