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控件字体仍不可见;   谢谢

解决方案 »

  1.   

    if(nCtlColor==CTLCOLOR_BTN) 

    if(pWnd->GetDlgCtrlID()==IDC_BUTTON1) 
    {   
             
    pDC->SetBkMode(OPAQUE); 
    pDC->SetTextColor(RGB(0,0,0)); 
      
     return (HBRUSH)::GetStockObject(NULL_BRUSH);//返回空画刷,

      

  2.   

    (1) 为何我将b定义在此函数中而不是成员函数时,相应控件颜色不会改变
    因为变量有作用域,这个函数返回的画刷系统只保存引用而不是对象,所以当系统绘制的时候需要用到你提供的画刷,而你的局部变量已经销毁了(离开了这个函数),所以不会有效果。另外,建议你看看WM_CTLCOLORBTN通知消息。
      

  3.   

    谢谢MACKZ,小弟明白了.您能给我解答一下第二个问题吗