一、前言:
今天在这里分别介绍Static及Edit这两个控件的自绘方法,在PB中为LABEL及TEXTBOX。
在窗体程序中通过CreateWindowEx函数添加Static静态文本控件及Edit编辑窗口控件后,主窗口将会收到WM_CTLCOLORSTATIC及WM_CTLCOLOREDIT这两个消息。我们在绘制自定义的控件效果时,就可以利用这两个消息下编写自己的代码。
二、消息功能简介
1、WM_CTLCOLORSTATIC消息
静态控件或只读或禁用的编辑控件在即将绘制控件时将 WM_CTLCOLORSTATIC 消息发送到其父窗口。 通过响应此消息,父窗口可以使用指定的设备上下文句柄来设置静态控件的文本前景和背景色。
窗口通过其 WindowProc 函数接收此消息。
WM_CTLCOLORSTATIC
WPARAM wParam;
LPARAM lParam;
参数
wParam
静态控制窗口的设备上下文的句柄。
lParam
静态控件的句柄。
返回值
如果应用程序处理此消息,则返回值是系统用来绘制静态控件背景的画笔的句柄。
(1)、代码实例:
case WM_CTLCOLORSTATIC
dim as HDC hDC = Cast ( HDC, wParam )
dim as HWND hWndStatic = Cast ( HWND, lParam )
IF GetDlgCtrlID( hWndStatic ) = IDC_LABEL1 THEN
SETBKMODE hDC, TRANSPARENT
SetTextColor ( hDC, BGR ( 255, 0, 0 ) ) '文本颜色
END IF
function = Cast ( Integer, GetSysColorBrush ( COLOR_WINDOW ) ) '背景颜色
exit function
2、WM_CTLCOLOREDIT消息
非只读或禁用的编辑控件将在控件即将绘制时将 WM_CTLCOLOREDIT 消息发送到其父窗口。 通过响应此消息,父窗口可以使用指定的设备上下文句柄来设置编辑控件的文本和背景色。
WM_CTLCOLOREDIT
WPARAM wParam;
LPARAM lParam;
参数
wParam
编辑控件窗口的设备上下文的句柄。
lParam
编辑控件的句柄。
返回值
如果应用程序处理此消息,则必须返回画笔的句柄。 系统使用画笔绘制编辑控件的背景。
(1)、代码实例:
case WM_CTLCOLOREDIT
dim as HDC hDC = Cast ( HDC, wParam )
dim as HWND hWndEdit = Cast ( HWND, lParam )
dim hBrushColor as HBRUSH
dim hPenColor as HPEN
dim rcRect as RECT
GetClientRect( hWndEdit, @rcRect )
IF GetDlgCtrlID( hWndEdit ) = IDC_TEXTBOX1 THEN
'绘制背景为主窗口背景色
hBrushColor = GetSysColorBrush ( COLOR_WINDOW )
SelectObject( hDC, hBrushColor )
rcRect.Left = rcRect.Left-2
rcRect.Top = rcRect.Top-2
rcRect.Right = rcRect.Right+1
rcRect.Bottom = rcRect.Bottom+1
FillRect( hDC, @rcRect, hBrushColor )
DeleteObject hBrushColor
'指定颜色绘制边框
rcRect.Left = rcRect.Left+1
rcRect.Top = rcRect.Top-2
hBrushColor = CreateSolidBrush( BGR ( 112, 112, 112 ) )
SelectObject( hDC, hBrushColor )
FrameRect hDC, @rcRect, hBrushColor
'设置编辑框内文本颜色
SETBKMODE hDC, TRANSPARENT
SetTextColor ( hDC, BGR ( 100, 120, 250 ) )
end if
DeleteObject hBrushColor
DeleteObject hPenColor
function = Cast ( Integer, GetSysColorBrush ( COLOR_WINDOW ) )
exit function
3、运行效果对比