【问题标题】:Background color of CStatic issueCStatic 问题的背景颜色
【发布时间】:2016-10-26 13:27:45
【问题描述】:

我在使用 WTL 设置 CStatic 的背景颜色时遇到问题(我猜我在使用 MFC 时也会遇到同样的问题)

我有一个黑色背景的窗口,上面有一个从 CStatic 派生的控件。我正在通过 WM_CTLCOLORSTATIC 消息设置颜色。我基本上可以工作,但确实有文本的控件部分显示为白色。

这是回调中的代码:

LRESULT CReportResults::OnCtrColorStatic(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
    if ((HWND)lParam == m_wndLoadingLabel.m_hWnd)
    {
        HDC     hDC = (HDC)wParam;

        SetBkColor(hDC, APP_COLOR_BACKGROUND);
        SetTextColor(hDC, APP_COLOR_TEXT);
    }
    return 0;
}

这就是它最终在屏幕上的样子。控件本身比其中的文本大,但我不知道如何让控件的其余部分用黑色背景绘制。似乎将背景颜色设置为黑色只会影响显示文本的区域。关于我可能做错了什么有什么想法吗?

【问题讨论】:

    标签: c++ winapi mfc wtl


    【解决方案1】:

    发现我的错误。我在 OnCtrColorStatic 处理程序中返回零。我切换到返回用于应用程序背景颜色的画笔,现在一切正常。

    LRESULT CReportResults::OnCtrColorStatic(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
    {
        if ((HWND)lParam == m_wndLoadingLabel.m_hWnd)
        {
            HDC     hDC = (HDC)wParam;
    
            SetBkColor(hDC, APP_COLOR_BACKGROUND);
            SetTextColor(hDC, APP_COLOR_TEXT);
        }
        return (LRESULT)g_app.background_brush;
    }
    

    【讨论】:

    • 您应该永远在 CtrlColor 处理程序中返回零。如果您不返回自定义画笔,则应调用默认窗口过程并返回它返回的值。
    猜你喜欢
    • 2017-11-02
    • 1970-01-01
    • 2011-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多