问题贴在programfan上面,附有图~希望好心人能帮忙看一下!!!
http://www.programfan.com/club/showbbs.asp?id=197739

解决方案 »

  1.   

    用这个做判断: pWnd->GetDlgCtrlID() == CTLCOLOR_STATIC----------------------------------------------------------HBRUSH CCommandView::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
    {
        HBRUSH hbr = CFormView::OnCtlColor(pDC, pWnd, nCtlColor);
        
        // TODO: Change any attributes of the DC here    HBRUSH hbrush;
        switch(pWnd->GetDlgCtrlID())
        {
        case CTLCOLOR_STATIC:
            
            pDC->SetTextColor(RGB(0,0,0));
            pDC->SetBkMode(TRANSPARENT);
            hbrush = CreateSolidBrush(CommonColor);//CommonColor在构造时设置为白色
            hbr = hbrush;
            break;        
        }
            // TODO: Return a different brush if the default is not desired
        return hbr;
    }
      

  2.   

    知道错在哪里了~但不知道怎么解决~~~
    当需要重绘控件的时候就会调用OnCtlColor,只要在函数中修改了hbr的值,函数返回的hbr就不再是默认颜色,在重绘其他控件的时候也就会用修改过的hbr去做。
    现在的问题是,怎样在使用完OnCtlColor后,把hbr还原为原先的默认值。
      

  3.   

    nCtlColor 
    Contains one of the following values, specifying the type of control: 
    CTLCOLOR_BTN   Button control 
    CTLCOLOR_DLG   Dialog box 
    CTLCOLOR_EDIT   Edit control 
    CTLCOLOR_LISTBOX   List-box control 
    CTLCOLOR_MSGBOX   Message box 
    CTLCOLOR_SCROLLBAR   Scroll-bar control 
    CTLCOLOR_STATIC   Static control nCtlColor 并不是控件的ID,不能用它来判断,如果用它来判断的话,同类的控件都会重绘,所以导致你上面的问题------------------------------------------------------------------------------------
    当需要重绘控件的时候就会调用OnCtlColor,只要在函数中修改了hbr的值,函数返回的hbr就不再是默认颜色,在重绘其他控件的时候也就会用修改过的hbr去做。
    针对控件ID修改HBR的值,并不会影响到其他的控件颜色,每个控件重绘的时候都会调用OnCtlColor,但是只有符合条件的控件才重绘,所以并不会用该HBR去绘其他的控件,也不需要把HBR还原-------------------------------------------------------------------------------------你的问题是 nCtlColor这个参数是控件的类型,并不是控件的ID,而你把它当作ID使用
    ID应该用 pWnd->GetDlgCtrlID() 来获取
      

  4.   

    假设你的Static的ID为 ID_STATIC1, ID_STATIC2...那么代码如下: HBRUSH CCommandView::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
    {
        HBRUSH hbr = CFormView::OnCtlColor(pDC, pWnd, nCtlColor);
        
        // TODO: Change any attributes of the DC here    HBRUSH hbrush;
        switch(pWnd->GetDlgCtrlID())
        {
            case IDC_STATIC1:
            case IDC_STATIC2:     
                pDC->SetTextColor(RGB(0,0,0));
                pDC->SetBkMode(TRANSPARENT);
                hbrush = CreateSolidBrush(CommonColor);//CommonColor在构造时设置为白色
                hbr = hbrush;
                break; 
            default:
                break;       
        }
            // TODO: Return a different brush if the default is not desired
        return hbr;
    }
      

  5.   

    自己可以调试一下 nCtlColor 的值就知道了......
      

  6.   

    如果用nCtlColor判断的话为什么像CheckBox,RadioButton等也会重绘?他们好像应该属于CTLCOLOR_BTN吧?