首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

更改CComboBox的边框颜色以显示错误和警告

可以通过以下步骤实现:

  1. 首先,需要创建一个自定义的CComboBox派生类,例如CMyComboBox。
  2. 在CMyComboBox类的头文件中,添加以下代码:
代码语言:cpp
复制
class CMyComboBox : public CComboBox
{
    DECLARE_DYNAMIC(CMyComboBox)

public:
    CMyComboBox();
    virtual ~CMyComboBox();

protected:
    afx_msg HBRUSH CtlColor(CDC* pDC, UINT nCtlColor);
    DECLARE_MESSAGE_MAP()
};
  1. 在CMyComboBox类的实现文件中,添加以下代码:
代码语言:cpp
复制
IMPLEMENT_DYNAMIC(CMyComboBox, CComboBox)

CMyComboBox::CMyComboBox()
{
}

CMyComboBox::~CMyComboBox()
{
}

BEGIN_MESSAGE_MAP(CMyComboBox, CComboBox)
    ON_WM_CTLCOLOR()
END_MESSAGE_MAP()

HBRUSH CMyComboBox::CtlColor(CDC* pDC, UINT nCtlColor)
{
    HBRUSH hbr = CComboBox::CtlColor(pDC, nCtlColor);

    // 根据需要设置边框颜色
    if (nCtlColor == CTLCOLOR_EDIT)
    {
        // 设置错误状态下的边框颜色为红色
        if (IsWindowEnabled() && IsWindowVisible() && GetEditSel() == 0)
        {
            pDC->SetTextColor(RGB(255, 0, 0));
            pDC->SetBkColor(RGB(255, 255, 255));
            pDC->SetBkMode(TRANSPARENT);
            CPen pen(PS_SOLID, 1, RGB(255, 0, 0));
            CPen* pOldPen = pDC->SelectObject(&pen);
            CRect rect;
            GetClientRect(rect);
            rect.DeflateRect(1, 1);
            pDC->Rectangle(rect);
            pDC->SelectObject(pOldPen);
        }
        // 设置警告状态下的边框颜色为黄色
        else if (IsWindowEnabled() && IsWindowVisible() && GetEditSel() != 0)
        {
            pDC->SetTextColor(RGB(0, 0, 0));
            pDC->SetBkColor(RGB(255, 255, 0));
            pDC->SetBkMode(TRANSPARENT);
            CPen pen(PS_SOLID, 1, RGB(255, 255, 0));
            CPen* pOldPen = pDC->SelectObject(&pen);
            CRect rect;
            GetClientRect(rect);
            rect.DeflateRect(1, 1);
            pDC->Rectangle(rect);
            pDC->SelectObject(pOldPen);
        }
    }

    return hbr;
}
  1. 在需要使用自定义边框颜色的对话框或窗口类中,将原来的CComboBox控件替换为CMyComboBox控件。

通过以上步骤,当CMyComboBox控件处于错误状态时,边框颜色将显示为红色;当处于警告状态时,边框颜色将显示为黄色。这样可以更直观地向用户展示错误和警告信息。

腾讯云相关产品和产品介绍链接地址:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

VC++6.0中改变窗口背景颜色和控件背景颜色,CDC,我的感觉

1.改变对话框的背景色 在C…App类中的InitInstance()里添加 SetDialogBkColor(RGB(0,192,0),RGB(0,0,0)); 2.如果想改变静态文本或单选按钮的背景色可以用你说的那个获得控件ID,然后设置背景色,具体步骤: (1)响应对话框类的WM_CTLCOLOR消息生成OnCtlColor函数 (2)为对话框类添加成员变量CBrush m_brush; 并在初始化函数中初始化m_brush.CreateSolidBrush(RGB(0,255,0)); (3)在OnCtlColor函数中添加代码以改变控件的文字颜色和背景色 switch(pWnd->GetDlgCtrlID()) { case(IDC_INPUT):   pDC->SetTextColor(RGB(255,0,192));   pDC->SetBkMode(TRANSPARENT);   return m_brush;   break; case(IDC_EDIT1):   pDC->SetTextColor(RGB(255,0,0));   pDC->SetBkMode(TRANSPARENT);   return m_brush;   break; case(IDC_CHOICE):   pDC->SetTextColor(RGB(255,128,0));   pDC->SetBkMode(TRANSPARENT);   return m_brush;   break; case(IDC_RADIO1):   pDC->SetTextColor(RGB(255,0,20));   pDC->SetBkMode(TRANSPARENT);   return m_brush;   break; default:   break; } 3.如果想改变按钮的背景色,简直太难了,你要重写两个类,还需要在网上下,孙鑫的视频教程中也简单介绍了这个,可只是改变按钮的文字颜色

03
领券