我自定义也个按钮控件,继承于CButton类。我想改变按钮的颜色。在DarwItem()中用如下方法:
     GetWindowRect(&rect);
     CBrush m_brush, * m_Oldbrush;
     m_Oldbrush = pDC->SelectObject(&m_brush);
     pDC->FillRect(&rect, &m_brush);
但改不过来,
  我也是了重载了WM_CTLCOLOR消息,也该不过来。请问您有什么办法

解决方案 »

  1.   

    CWnd 类及其派生类的成员函数使用的都是逻辑坐标
    CDC类及其派生类的成员函数适用的都是设备坐标
    你的错误可能是:并没有将坐标转换过来
    GetWindowRect(&rect);//CWnd类成员
    pDC->FillRect(&rect, &m_brush);//CDC类成员
    下面的例子可以满足你的要求:
    HBRUSH CMyDialog::OnCtlColor(CDC* pDC,CWnd* pWnd,UINT nCtlColor)
    {
       if(nCtlColor==CTLCOLOR_EDIT)//CTLCOLOR_EDIT是你要改变颜色的控件
     {
        pDC->SetBKColor(RGB(...));
          return m_hBrush;//在CMyDialog声明的hbrush类型的句柄
     }
     return CDialog::OnCtlColor...;
    }
      

  2.   

    不要在darwitem中去试图改变button的颜色,好象还有一个消息也是draw什么的,我也忘了,你自己去找吧!
      

  3.   

    andy_lau
       我用WM_CTLCOLOR消息是在我自定义控件中重载的,我想我自定义的按钮控件就是红色的,而不是在他的父类里调用WM_CTLCOLOR.
      

  4.   

    GetWindowRect(&rect); -> GetClientRect(&rect);
      

  5.   

    sans
       你说的是什么意思!我不懂,请解释一下好吗?
      

  6.   

    GetWindowRect(&rect); -> GetClientRect(&rect);
      

  7.   

    up 
      这个我肯定是设置了,不燃也不回执行DrawItem()
      

  8.   

    GetWindowRect(&rect);这样获得的是控件相对于屏幕的坐标,然后用ScreenToClient(&rect)就可以获得控件相对于父窗口的坐标
    注意:如果你用GetClientRect(&r)的话,r.left和r.top始终是0,得到的并不是实际坐标,