if(nCtlColor==CTLCOLOR_BTN)
{
if(pWnd->GetDlgCtrlID()==IDC_BUTTON1)
{
pDC->SetBkMode(OPAQUE);
pDC->SetTextColor(RGB(0,0,0));
return (HBRUSH)b.GetSafeHandle();
}
}这是小弟在此函数中的代码, 有2个问题,(1) 为何我将b定义在此函数中而不是成员函数时,相应控件颜色不会改变;(2)为何我将SETBKMODE参数设置为TRANSPARENT时,button控件字体仍不可见; 谢谢
{
if(pWnd->GetDlgCtrlID()==IDC_BUTTON1)
{
pDC->SetBkMode(OPAQUE);
pDC->SetTextColor(RGB(0,0,0));
return (HBRUSH)b.GetSafeHandle();
}
}这是小弟在此函数中的代码, 有2个问题,(1) 为何我将b定义在此函数中而不是成员函数时,相应控件颜色不会改变;(2)为何我将SETBKMODE参数设置为TRANSPARENT时,button控件字体仍不可见; 谢谢
{
if(pWnd->GetDlgCtrlID()==IDC_BUTTON1)
{
pDC->SetBkMode(OPAQUE);
pDC->SetTextColor(RGB(0,0,0));
return (HBRUSH)::GetStockObject(NULL_BRUSH);//返回空画刷,
}
}
因为变量有作用域,这个函数返回的画刷系统只保存引用而不是对象,所以当系统绘制的时候需要用到你提供的画刷,而你的局部变量已经销毁了(离开了这个函数),所以不会有效果。另外,建议你看看WM_CTLCOLORBTN通知消息。