一般说来,在屏幕上绘图,许多朋友首先想到的是先抓取屏幕图形到窗口,然后在窗口中进行绘图,这种思路最大的缺点是,当窗口切换时,会出现明显的闪烁现象(因为屏幕抓图和应用程序窗口再置顶这些操作比较费时),有没有更好的解决办法,从而实现更快捷的屏幕绘图呢?
其实,既然窗口支持半透明,为什么不利用此特点,创建一个置顶的接近完全透明的窗口,然后再在此窗口内绘图呢?为此,我写下了这个代码,经测试,基本达到了设计目的:
代码如下:
Option Explicit
'* ************************************************************** *
'* 程序名称:modDrawInScreen.bas
'* 程序功能:用鼠标实现屏幕绘图
'* 程序用法:按Ctrol+B开始绘图、Ctrl+E停止绘图、Ctrl+Q结束
'* 作者:lyserver
'* 联系方式:http://blog.csdn.net/lyserver
'* ************************************************************** *
Private Declare Function RegisterClass Lib "user32" Alias "RegisterClassA" (Class As WNDCLASS) As Long
Private Declare Function UnregisterClass Lib "user32" Alias "UnregisterClassA" (ByVal lpClassName As String, ByVal hInstance As Long) As Long
Private Const CS_HREDRAW = &H2
Private Const CS_VREDRAW = &H1
Private Const COLOR_WINDOW = 5
Private Type WNDCLASS
style As Long
lpfnwndproc As Long
cbClsextra As Long
cbWndExtra2 As Long
hInstance As Long
hIcon As Long