FreeBasic编程:无需子类化的标准控件绘制方法1

一、前言:

今天在这里分别介绍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、运行效果对比

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值