首页 > 解决方案 > 如何更改 CIPAddressCtrl 的背景颜色?

问题描述

我试图在 MFC 中更改 IP 地址控件的背景颜色和文本颜色。有一次,我改变了文本颜色和背景颜色,但是编辑控件之间的点没有显示出来。我的代码如下:

BEGIN_MESSAGE_MAP(KIPAddressCtrl, CIPAddressCtrl)
    ON_WM_CTLCOLOR()
    ON_WM_PAINT()
END_MESSAGE_MAP()


// KIPAddressCtrl message handlers

HBRUSH KIPAddressCtrl::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
    m_brush.DeleteObject();
    m_brush.CreateSolidBrush(RGB(255, 255, 0));

    CRect rc;
    CWindowDC dc(this);
    GetWindowRect(&rc);
    
    dc.Draw3dRect(0, 0, rc.Width(), rc.Height(), RGB(0, 0, 255), RGB(0, 0, 255));   
    pDC->SetTextColor(RGB(255, 0, 0));  
    pDC->SetBkColor(RGB(255, 255, 0));
    
    return (HBRUSH)m_brush;
}

void KIPAddressCtrl::OnPaint()
{
    CRect rc;
    CPaintDC dc(this);

    GetClientRect(&rc);     
    dc.FillSolidRect(&rc, RGB(255, 255, 0));

    //CIPAddressCtrl::OnPaint();
}

我的结果是

在此处输入图像描述

但是我要

在此处输入图像描述

如何解决这个问题?

标签: c++mfcbackground-color

解决方案


分隔符消失的原因是处理程序中的FillSolidRect调用KIPAddressCtrl::OnPaint(),覆盖了默认实现所做的任何事情。

不支持以您想要的方式为IP 地址控制着色。虽然嵌入式编辑控件从其父级(IP 地址控件)请求颜色,但控件本身不会向其父级发送相应的消息,以允许您应用自定义。

换句话说:虽然四个嵌入式编辑控件可以自定义,但编辑控件未覆盖的区域不能。这很不幸,但事实就是如此。


推荐阅读