【问题标题】:Static Text Color静态文本颜色
【发布时间】:2012-10-07 10:18:53
【问题描述】:

我编写了以下代码,它将颜色应用于一个窗口中的所有静态文本,但是 我想在 一个窗口 中应用 两种不同的颜色,例如 ID:1234,其中 ID 是另一种颜色,1234 在一个窗口中将是不同的颜色。我怎样才能做到这一点?这是我所做的:

case WM_CTLCOLORSTATIC:

    SetBkColor( hdc, COLORREF( :: GetSysColor( COLOR_3DFACE) ) );    
    //sets bckcolor of static text same as window color

    if ( ( HWND ) lParam == GetDlgItem( hWnd, IDC_PID) ) 
    {
    SetTextColor( ( HDC ) wParam, RGB( 250, 50, 200));
    return ( BOOL ) CreateSolidBrush ( GetSysColor( COLOR_3DFACE) );
    }

    break;

【问题讨论】:

  • 你应该创建 2 个静态控件。

标签: c++ winapi visual-c++


【解决方案1】:

我不确定我是否理解您的问题。你的代码看起来很不错。值得注意的一点是,您负责清理分配的资源。使用上面的代码,您正在泄漏通过调用CreateSolidBrush 创建的HBRUSH 对象。由于您不需要自定义画笔,因此您应该使用GetSysColorBrush

出于个人喜好,我会使用GetDlgCtrlID 过滤控件ID 而不是它的窗口句柄。合并您的代码应如下所示:

case WM_CTLCOLORSTATIC:
    switch ( GetDlgCtrlID( (HWND)lParam ) )
    {
    case IDC_PID:
        //sets bckcolor of static text same as window color
        SetBkColor( (HDC)wParam, COLORREF( GetSysColor( COLOR_3DFACE ) ) );    
        SetTextColor( (HDC)wParam, RGB( 250, 50, 200) );
        return (INT_PTR)GetSysColorBrush( COLOR_3DFACE );

    default:
        // Message wasn't handled -> pass it on to the default handler
        return 0;
    }

【讨论】:

    猜你喜欢
    • 2010-12-04
    • 2010-12-19
    • 2019-04-06
    • 2021-02-18
    • 1970-01-01
    • 1970-01-01
    • 2018-12-28
    • 2014-02-27
    • 1970-01-01
    相关资源
    最近更新 更多