这是我找到的一个大神传的资料代码,能实现我说的效果,但是没看懂怎么实现的
[Asm] 纯文本查看 复制代码.版本 2
.程序集 窗口程序集1
.程序集变量 hBkBitmap, 整数型
.程序集变量 OldMainProc, 整数型
.程序集变量 OldEditProc, 整数型
.程序集变量 ImageObject, 对象
.子程序 __启动窗口_创建完毕
OldMainProc = SetWindowLongA (取窗口句柄 (), #GWL_WNDPROC, 到数值 (&NewProc_Main))
OldEditProc = SetWindowLongA (编辑框1.取窗口句柄 (), #GWL_WNDPROC, 到数值 (&NewProc_Edit))
.子程序 NewProc_Main, 整数型
.参数 hWnd, 整数型
.参数 Msg, 整数型
.参数 wParam, 整数型
.参数 lParam, 整数型
.判断开始 (Msg = #WM_CTLCOLOREDIT)
.判断开始 (lParam = 编辑框1.取窗口句柄 ())
SetTextColor (wParam, #蓝色)
SetBkMode (wParam, #TRANSPARENT)
返回 (GetStockObject (#NULL_BRUSH))
.默认
.判断结束
.判断 (Msg = #WM_COMMAND)
.判断开始 (lParam = 编辑框1.取窗口句柄 ())
.判断开始 (右移 (wParam, 16) = #EN_VSCROLL)
InvalidateRect (lParam, 0, 真)
.判断 (右移 (wParam, 16) = #EN_HSCROLL)
InvalidateRect (lParam, 0, 真)
.判断 (右移 (wParam, 16) = #EN_CHANGE)
InvalidateRect (lParam, 0, 真)
.默认
.判断结束
.默认
.判断结束
.默认
.判断结束
返回 (CallWindowProcA (OldMainProc, hWnd, Msg, wParam, lParam))
.子程序 NewProc_Edit, 整数型
.参数 hWnd, 整数型
.参数 Msg, 整数型
.参数 wParam, 整数型
.参数 lParam, 整数型
.局部变量 hMemDC_BkPicture, 整数型
.局部变量 hOldBitmap, 整数型
.局部变量 rect, RECT
.局部变量 hBrush, 整数型
.局部变量 hOldBrush, 整数型
.局部变量 hTempMemBitmap, 整数型
.局部变量 hScrDC, 整数型
.局部变量 hOldTempMemBitmap, 整数型
.局部变量 hMemDC_BkColor, 整数型
.判断开始 (Msg = #WM_ERASEBKGND)
.如果真 (hBkBitmap = 0)
编辑框1.可视 = 假
处理事件 ()
.如果真 (ImageObject.创建图片对象 (快照 (编辑框1.取窗口句柄 (), , )))
hBkBitmap = ImageObject.读数值属性 (“handle”, )
.如果真结束
编辑框1.可视 = 真
.如果真结束
GetClientRect (hWnd, rect)
hScrDC = GetDC (0)
hMemDC_BkColor = CreateCompatibleDC (hScrDC)
hTempMemBitmap = CreateCompatibleBitmap (hScrDC, rect.right, rect.bottom)
hOldTempMemBitmap = SelectObject (hMemDC_BkColor, hTempMemBitmap)
hBrush = CreateSolidBrush (#白色)
hOldBrush = SelectObject (hMemDC_BkColor, hBrush)
FillRect (hMemDC_BkColor, rect, hBrush)
SelectObject (hMemDC_BkColor, hOldBrush)
DeleteObject (hBrush)
hMemDC_BkPicture = CreateCompatibleDC (hScrDC)
hOldBitmap = SelectObject (hMemDC_BkPicture, hBkBitmap)
BitBlt (hMemDC_BkColor, rect.left, rect.top, rect.right, rect.bottom, hMemDC_BkPicture, 0, 0, #SRCCOPY)
BitBlt (wParam, rect.left, rect.top, rect.right, rect.bottom, hMemDC_BkColor, 0, 0, #SRCCOPY)
SelectObject (hMemDC_BkPicture, hOldBitmap)
DeleteDC (hMemDC_BkPicture)
SelectObject (hMemDC_BkColor, hOldTempMemBitmap)
DeleteObject (hTempMemBitmap)
DeleteDC (hMemDC_BkColor)
ReleaseDC (0, hScrDC)
InvalidateRect (hWnd, 0, 假)
.判断 (Msg = #WM_VSCROLL)
InvalidateRect (hWnd, 0, 真)
.判断 (Msg = #WM_HSCROLL)
InvalidateRect (hWnd, 0, 真)
.判断 (Msg = #WM_DESTROY)
.如果真 (取反 (ImageObject.是否为空 ()))
ImageObject.清除 ()
.如果真结束
.默认
.判断结束
返回 (CallWindowProcA (OldEditProc, hWnd, Msg, wParam, lParam))
效果图大概是这个样子的
[i]