我在对话框的OnCtlColor中加入一下语句:
HBRUSH CMyButtonDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
{
        HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);

        // TODO: Change any attributes of the DC here
        //pDC->SetBkColor(RGB(0, 0, 255));
        switch ( nCtlColor ) {
            case CTLCOLOR_BTN:
   case CTLCOLOR_EDIT:
   case CTLCOLOR_STATIC:
  pDC->SetTextColor(RGB(0,0,255));
pDC->SetBkColor(RGB(255, 255, 0));
       return (HBRUSH)m_bkBrush.GetSafeHandle();
} // TODO: Return a different brush if the default is not desired
return hbr;
}
//m_bkBrush在OnInitDialog()初始化为:
m_bkBrush.CreateSolidBrush(RGB(255, 255, 0));静态文本,编辑框的都改变了,就是唯独按钮的没有任何改变,为什么会这样?按钮还需要什么特殊的处理吗?多谢了!

解决方案 »

  1.   

    按钮文本的背景色并未改过来,不过编辑框的文本及背景色改过来了我很佩服,原来我折腾了好一阵子楞没弄成,最后没办法放弃了这方法。
    另外,我认为上面的代码并不规范,switch语句的分支中未有缺省处理,这很容易把程序搞乱或整死掉……
      

  2.   

    经验告诉我们,按钮的文本和背景色不能用重载OnCtrlColor函数来改变。
    这个应该算是一个BUG。
      

  3.   

    要给按钮加上Owner Draw属性
      

  4.   

    这个要在DrawItem中去修改的,这个有一个结构体,中部有一个HANDLE,再得到CDC,这样你想做什么都可以。
      

  5.   

    按钮的背景色在OnCtrlColor函数中不能改变!只有从CButton派生一个子类,然后在子类中为按钮增加背景色!