设置成无边框透明编辑框

易语言 2020-09-01 17:32:54

设置成无边框透明编辑框

OldMainProc = SetWindowLongA (取窗口句柄 (), #GWL_WNDPROC, 到数值 (&NewProc_Main)) ' 子类化主窗口
OldEditProc = SetWindowLongA (编辑框1.取窗口句柄 (), #GWL_WNDPROC, 到数值 (&NewProc_Edit)) ' 子类化编辑框

.判断开始 (Msg = #WM_ERASEBKGND)
.如果真 (hBkBitmap = 0)
' wangzexi修改....
编辑框1.可视 = 假
处理事件 ()
.如果真 (ImageObject.创建图片对象 (快照 (编辑框1.取窗口句柄 (), , )))
hBkBitmap = ImageObject.读数值属性 (“handle”, )
.如果真结束
编辑框1.可视 = 真
' 简单的修改结束
' hBkBitmap = GetBitmapHandleFromResource () ' 获取位图句柄
.如果真结束
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.是否为空 ()))
' DeleteObject (hBkBitmap) ' 删除背景图片,释放资源
ImageObject.清除 () ' 删除背景图片,释放资源
.如果真结束

.默认

.判断结束
返回 (CallWindowProcA (OldEditProc, hWnd, Msg, wParam, lParam))