我编写了以下代码,它将颜色应用于一个窗口中的所有静态文本,但是
我想在一个窗口中应用两种不同颜色,例如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;
答案 0 :(得分:2)
我不确定我理解你的问题。你的代码看起来非常好。值得注意的一点是,您负责清理分配的资源。使用上面的代码,您将泄漏通过调用HBRUSH
创建的CreateSolidBrush
对象。由于您不需要自定义画笔,因此您应该使用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;
}