【问题标题】:Picture Control background is gray and I want it white优化校准背景是灰色的,我想要白色
【发布时间】:2017-08-24 13:02:59
【问题描述】:

我的应用程序有一个图片控件,它的背景是灰色的,我希望它是白色的。我已经尝试了几件事,例如:派生一个类并覆盖OnPaint 方法;回复WM_CTLCOLOR消息(添加ON_WM_CTLCOLOR()并处理它),但没有成功。

在消息地图上的条目:

ON_WM_CTLCOLOR()

实施:

BOOL CMyDialog::OnInitDialog()
{
    __super::OnInitDialog();

    white.CreateSolidBrush(RGB(255,255,255));

    //...

    return TRUE;  // return TRUE  unless you set the focus to a control
}


HBRUSH CMyDialog::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
    if (pWnd == GetDlgItem(IDC_PICTURE))
    {
        return white;
    }

    return __super::OnCtlColor(pDC, pWnd, nCtlColor);
}

头文件类定义:

CBrush white;

HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor);

【问题讨论】:

    标签: image visual-c++ mfc background-color picturebox


    【解决方案1】:

    使用 Spy++ 进行一些调试后,我意识到优化校准是一个静态控件,我必须处理的消息不是WM_CTLCOLOR,而是WM_CTLCOLORSTATIC

    因此,在包含它的对话框中,我将消息映射从

    ON_WM_CTLCOLOR()
    

    ON_MESSAGE(WM_CTLCOLORSTATIC, OnCtlColorStatic)
    

    在实现上,将方法从

    HBRUSH CMyDialog::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
    {
        if (pWnd == GetDlgItem(IDC_PICTURE))
        {
            return white;
        }
    
        return __super::OnCtlColor(pDC, pWnd, nCtlColor);
    }
    

    LRESULT CMyDialog::OnCtlColorStatic(WPARAM wParam, LPARAM lParam)
    {
        HWND hWnd = (HWND)lParam;
    
        if (::GetDlgCtrlID(hWnd) == IDC_PICTURE)
            return (LRESULT)white.GetSafeHandle();
    
        return DefWindowProc(WM_CTLCOLORSTATIC, wParam, lParam);
    }
    

    在头文件中,也改变方法

    HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor);
    

    LRESULT OnCtlColorStatic(WPARAM wParam, LPARAM lParam);
    

    注意一个细微的区别:旧的通过直接返回 HBRUSH 画笔手柄来工作;新的期望一个函数返回一个 LRESULT 类型的变量,所以转换。

    结果如我所愿:

    更新:我最近需要做一件事,我必须设置静态的文本颜色,并发现我还可以获取它的设备上下文:

    HDC hDC= (HDC)wParam;
    HWND hWnd = (HWND)lParam;
    

    所以,我可以通过以下方式轻松做到:

    SetBkMode(hDC, TRANSPARENT);
    SetTextColor(hDC, RGB(0,127,127));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-11-11
      • 1970-01-01
      • 1970-01-01
      • 2013-11-27
      • 2015-08-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多