我重载了OnCtlColor,nCtlColor选择CTLCOLOR_BTN,但是改不了。
可能需要重载CButton的OnCtlColor,但怎么弄?

解决方案 »

  1.   

    http://www.chinaithero.com/dev/vccool/button/vc1_11.htm
    彩色按钮
      

  2.   

    将控件右键属性的styles中,选中Owner draw,再试试,应该可以呀!!
      

  3.   

    选中Owner draw然后从cbutton派生一个类,在响应这个消息,
      

  4.   

    谢谢 laolaoliu2002提供代码连接。
    选中Owner draw运行程序按扭不见了,不知道怎么会事。
    既然OnCtlColor的参数nCtlColor有选项CTLCOLOR_BTN,为什么不能象改变static一样改变呢??
      

  5.   

    你直接再CyouDialog中添加OnCtlColor();还要定义一个成员变量CBrush m_brush;在初始化函数中: m_brush.CreateSolidBrush(RGB( 0 , 0, 255 ));然后
    HBRUSH CyouDialog::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
    {
        HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);

        if (pWnd->GetDlgCtrlID() == IDC_BUTTON1)
        {  
           hbr = m_brush;
        }     return hbr;
    }再试试!!!
      

  6.   

    HBRUSH CGytncbDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
    {
    HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);

    // TODO: Change any attributes of the DC here
    switch (pWnd->GetDlgCtrlID())
    {
    case IDXX1:
    pDC->SetTextColor(RGB(XXX,XXX,XXX));
    pDC->SetBkMode(TRANSPARENT);
    break;
    case IDXX2:
    pDC->SetTextColor(RGB(XXX,XXX,XXX));
    pDC->SetBkMode(TRANSPARENT);
    break;
             ...

    }

    // TODO: Return a different brush if the default is not desired
    return hbr;
    }