我想改变一个按钮的颜色:
HBRUSH test::CtlColor(CDC* pDC, UINT nCtlColor) 
{
// TODO: Change any attributes of the DC here
CBrush cRedBrush;
cRedBrush.CreateSolidBrush(RGB(255,0,0));

// TODO: Return a non-NULL brush if the parent's handler should not be called
return (HBRUSH)cRedBrush;
}
这样的不行吗??
这个函数需要调用吗?在哪调用?
并且这么消息是在哪产生的呀!
还有CDC …*pDC= Getdc();到底应该怎么用呀,或者说到底应该在哪里用,并且怎么确定它返回的是按钮的DC还是其他的DC呀!!
在这个函数有必要对nCtlColor进行判断吗??
还有invaliable();UpdateData(),有什么区别吗??问题多了点。

解决方案 »

  1.   

    你需要响应对话框的WM_CTLCOLOR消息(WM_CTLCOLOR已经被WM_CTLCOLORBTN取代),这个函数在收到WM_CTLCOLOR消息时调用,如果你利用VC来添加消息响应函数,VC会替你写相关代码。
    改变一个按钮颜色需要判断控件的句柄是不是你要改的按钮。
    当你要获取控件DC的时候用GetDC,调哪个类实例的GetDC,返回的就是该类实例对应的控件的DC。
    没必要对nCtlColor做判断,除非你要改一类颜色。
    不知道你说的invaliable是什么,Invalidate是刷新控件;UpdateData对话框中的控件与关联变量间更新数据。
      

  2.   

    我还是不太懂。。,就是GetDC与相对应的控件,能不能用代码讲一下呀!!
    这个消息是在什么时候产生的呀!
    我知道也有一个onctlcolor()函数,里面有相应的cwnd的句柄。但是这个既然没有那个参数应该就不用比较吧,
      

  3.   

    把你的风格改为ownerdraw,在对话框资源的属性里边
      

  4.   

    基础太差,建议先系统学习一下Windows编程或者VC的教材。
      

  5.   

    想改变按钮的话,要重载DrawItem()虚函数!
      

  6.   

    用OnCtlColor改不了按钮的颜色,一般要进行按钮对象的自绘
      

  7.   

    最好继承CButton,重新定义一个类,然后将它重绘
      

  8.   

    http://www.codeproject.com/buttonctrl/cbuttonst.asp
      

  9.   

    我也是WINDOWS编程初学者,一起学习一下
      

  10.   

    我定义了一个类,然后再里面重写了DrawItem(); 内容如下:CDC* pDC      = CDC::FromHandle(lpDrawItemStruct->hDC);
    DWORD nState  = lpDrawItemStruct->itemState;
    DWORD nAction = lpDrawItemStruct->itemAction; 
    CRect rc   = lpDrawItemStruct->rcItem;
    UINT uStyle   = DFCS_BUTTONPUSH; pDC->SetBkMode(TRANSPARENT);
    CString strText;
    GetWindowText(strText);
    CBrush red;
    red.CreateSolidBrush(RGB(255,0,0));
    pDC->SelectObject(red);
    //COLORREF
    CRect rect((rc.TopLeft()).x,(rc.TopLeft()).y,(rc.BottomRight()).x,(rc.BottomRight()).y);
    pDC->FillRect(&rect,&red);
    // pDC->FillSolidRect((rc.TopLeft()).x,(rc.TopLeft()).y,(rc.BottomRight()).x,(rc.BottomRight()).y,RGB(255,0,0));然后再DloG里面声明了此类的一个对象(用classwizard);
    但是还是不能显示颜色,为什么呀!!!还有什么要注意的吗?
      

  11.   

    http://www.codeproject.com/KB/miscctrl/subclassdemo.aspx