我自定义也个按钮控件,继承于CButton类。我想改变按钮的颜色。在DarwItem()中用如下方法:
GetWindowRect(&rect);
CBrush m_brush, * m_Oldbrush;
m_Oldbrush = pDC->SelectObject(&m_brush);
pDC->FillRect(&rect, &m_brush);
但改不过来,
我也是了重载了WM_CTLCOLOR消息,也该不过来。请问您有什么办法
GetWindowRect(&rect);
CBrush m_brush, * m_Oldbrush;
m_Oldbrush = pDC->SelectObject(&m_brush);
pDC->FillRect(&rect, &m_brush);
但改不过来,
我也是了重载了WM_CTLCOLOR消息,也该不过来。请问您有什么办法
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...;
}
我用WM_CTLCOLOR消息是在我自定义控件中重载的,我想我自定义的按钮控件就是红色的,而不是在他的父类里调用WM_CTLCOLOR.
你说的是什么意思!我不懂,请解释一下好吗?
这个我肯定是设置了,不燃也不回执行DrawItem()
注意:如果你用GetClientRect(&r)的话,r.left和r.top始终是0,得到的并不是实际坐标,