平安重大疾病退保:VB抓图

来源:百度文库 编辑:偶看新闻 时间:2024/03/29 16:49:17
Private Declare Function ReleaseDC Lib "user32" (ByVal hwnd As Long, ByVal hdc As Long) As LongPrivate Declare Function OpenClipboard Lib "user32" (ByVal hwnd As Long) As LongPrivate Declare Function EmptyClipboard Lib "user32" () As LongPrivate Declare Function SetClipboardData Lib "user32" (ByVal wFormat As Long, ByVal hMem As Long) As LongPrivate Declare Function SelectObject Lib "gdi32" (ByVal hdc As Long, ByVal hObject As Long) As LongPrivate Declare Function DeleteDC Lib "gdi32" (ByVal hdc As Long) As LongPrivate Declare Function BitBlt Lib "gdi32" (ByVal hDestDC As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As LongPrivate Declare Function CreateCompatibleDC Lib "gdi32" (ByVal hdc As Long) As LongPrivate Declare Function CreateCompatibleBitmap Lib "gdi32" (ByVal hdc As Long, ByVal nWidth As Long, ByVal nHeight As Long) As LongPrivate Declare Function CloseClipboard Lib "user32" () As LongPrivate Declare Function CreateDC Lib "gdi32" Alias "CreateDCA" (ByVal lpDriverName As String, ByVal lpDeviceName As String, ByVal lpOutput As String, lpInitData As Long) As Long以上是下面要用到的API的声明代码是复制过来的,所以这些API是干什么要的,我不怎么了解,Command1按钮按下后,效果就是抓取屏幕,且显示在Picture1上面,谁来解释下Sub Command1_Click()各代码做的是什么事情?Private Sub Command1_Click()SourceDC = CreateDC("DISPLAY", 0, 0, 0)DestDC = CreateCompatibleDC(SourceDC)Bhandle = CreateCompatibleBitmap(SourceDC, 400, 300)         '显示区域设置SelectObject DestDC, BhandleBitBlt DestDC, 100, 100, 400, 300, SourceDC, 0, 0, &HCC0020      '设置抓图区域Wnd = Screen.ActiveForm.hwndOpenClipboard WndEmptyClipboardSetClipboardData 2, BhandleCloseClipboardDeleteDC DestDCReleaseDC Dhandle, SourceDCPicture1.Picture = Clipboard.GetData()End SubSourceDC = CreateDC("DISPLAY", 0, 0, 0)DestDC = CreateCompatibleDC(SourceDC)Bhandle = CreateCompatibleBitmap(SourceDC, 800, 600)         '显示区域设置SelectObject DestDC, BhandleBitBlt DestDC, 0, 0, 800, 600, SourceDC, 0, 0, &HCC0020      '设置抓图区域Wnd = Screen.ActiveForm.hwndOpenClipboard WndEmptyClipboardSetClipboardData 2, BhandleCloseClipboardDeleteDC DestDCReleaseDC Dhandle, SourceDCPicture1.Picture = Clipboard.GetData()
最佳答案
才疏学浅,只能粗略讲一下啦SourceDC = CreateDC("DISPLAY", 0, 0, 0)'以屏幕为源建立一个设备场景DestDC = CreateCompatibleDC(SourceDC)'在内存中建立一个与刚才建立的设备场景一致的设备场景Bhandle = CreateCompatibleBitmap(SourceDC, 400, 300) '显示区域设置'在内存中建立一幅与刚建立的设备场景相兼容的位图SelectObject DestDC, Bhandle'这句难理解一点,不乱说了,回头给你看API说明BitBlt DestDC, 100, 100, 400, 300, SourceDC, 0, 0, &HCC0020 '设置抓图区域'在两个设备场景(DestDC和SourceDC)间复制位图Wnd = Screen.ActiveForm.hwndOpenClipboard WndEmptyClipboardSetClipboardData 2, BhandleCloseClipboard'这一段是对剪贴板的操作,我的API工具中没有相关说明'大体意思应该是把刚才在内存中建立的位图放到剪贴板中DeleteDC DestDC'删除一个设备场景ReleaseDC Dhandle, SourceDC'在内存中释放掉一个设备场景Picture1.Picture = Clipboard.GetData()'这句不用解释了吧,把剪贴板中的位图下载到Picture1中========================下面是我在API工具中查到的相关说明,但愿对你有帮助CreateDC【说明】为专门设备创建设备场景【返回值】Long,新设备场景句柄,若出错则为零【其它】在绘制之前,先要为该设备场景选定一个位图。不再需要时,该设备场景可用DeleteDC函数删除。删除前,其所有对象应回复初始状态。若有设备初始设置可用DocumentPropertiesAPI函数载入DEVMODE结构。使用屏幕设备场景(DISPLAY)时要小心,因为它会干扰其他应用程序的外观示例:靠近屏幕左上角画一个矩形dc&  = CreateDCBynum("DISPLAY", vbNullString,vbNullString, 0)dl&  = Rectangle(dc& , 5, 5, 100, 100)【参数表】lpDriverName ---  String,用vbNullString传递null值给该参数,除非:1、用DISPLAY,是获取整个屏幕的设备场景;2、用WINSPOOL,则是访问打印驱动lpDeviceName ---  String,所用专门设备的名称。该名由打印管理器分配显示lpOutput -------  String,用vbNullString传递null值给该参数lpInitData -----  DEVMODE,这个结构保存初始值。用CreateDCBynum传递0(NULL)值则适用默认设置CreateCompatibleDC【说明】创建一个与特定设备场景一致的内存设备场景【返回值】Long,新设备场景句柄,若出错则为零【其它】在绘制之前,先要为该设备场景选定一个位图。不再需要时,该设备场景可用DeleteDC函数删除。删除前,其所有对象应回复初始状态【参数表】hdc ------------  Long,设备场景句柄。新的设备场景将与它一致。也可能为0以创建一个与屏幕一致的设备场景CreateCompatibleBitmap【说明】创建一幅与设备有关位图,它与指定的设备场景兼容【返回值】Long,执行成功返回位图句柄,零表示失败【其它】内存设备场景即与彩色位图兼容,也与单色位图兼容。这个函数的作用是创建一幅与当前选入hdc中的场景兼容。对一个内存场景来说,默认的位图是单色的。倘若内存设备场景有一个DIBSection选入其中,这个函数就会返回DIBSection的一个句柄。如hdc是一幅设备位图,那么结果生成的位图就肯定兼容于设备(也就是说,彩色设备生成的肯定是彩色位图)如果nWidth和nHeight为零,返回的位图就是一个1×1的单色位图一旦位图不再需要,一定用DeleteObject函数释放它占用的内存及资源【参数表】hdc ------------  Long,设备场景的句柄nWidth ---------  Long,位图宽度,以像素为单位nHeight --------  Long,位图高度,以像素为单位SelectObject【说明】每个设备场景都可能有选入其中的图形对象。其中包括位图、刷子、字体、画笔以及区域等等。一次选入设备场景的只能有一个对象。选定的对象会在设备场景的绘图操作中使用。例如,当前选定的画笔决定了在设备场景中描绘的线段颜色及样式【返回值】Long,与以前选入设备场景的相同hObject类型的一个对象的句柄,零表示出错。如选定的对象是一个区域(Region),结果就是下列常数之一:SIMPLEREGION,COMPLEXREGION 或 NULLREGION 对区域进行描述, GDI_ERROR 表示出错【其它】返回值通常用于获得选入DC的对象的原始值。绘图操作完成后,原始的对象通常选回设备场景。在清除一个设备场景前,务必注意恢复原始的对象【参数表】hdc ------------  Long,一个设备场景的句柄hObject --------  Long,一个画笔、位图、刷子、字体或区域的句柄BitBlt【说明】将一幅位图从一个设备场景复制到另一个。源和目标DC相互间必须兼容【返回值】Long,非零表示成功,零表示失败。会设置GetLastError【其它】在NT环境下,如在一次世界传输中要求在源设备场景中进行剪切或旋转处理,这个函数的执行会失败如目标和源DC的映射关系要求矩形中像素的大小必须在传输过程中改变,那么这个函数会根据需要自动伸缩、旋转、折叠、或切断,以便完成最终的传输过程【参数表】hDestDC --------  Long,目标设备场景x,y ------------  Long,对目标DC中目标矩形左上角位置进行描述的那个点。用目标DC的逻辑坐标表示nWidth,nHeight -  Long,欲传输图象的宽度和高度hSrcDC ---------  Long,源设备场景。如光栅运算未指定源,则应设为0xSrc,ySrc ------  Long,对源DC中源矩形左上角位置进行描述的那个点。用源DC的逻辑坐标表示dwRop ----------  Long,传输过程要执行的光栅运算(插一句:&HCC0020应该是一个光栅运算的常数vbSrcCopy)DeleteDC【说明】删除专用设备场景或信息场景,释放所有相关窗口资源。不要将它用于GetDC函数取回的设备场景【返回值】Long,执行成功则为非零,失败则为零【其它】若有对象被选入设备场景,则在调用本函数前应将它们选出。为此,可将初始对象回选入DC,也可用SaveDC, RestoreDC函数对回复DC为其创建时的状态在vb里使用不要将它用于由vb hdc属性获取的设备场景句柄【参数表】hdc ------------  Long,将要删除的设备场景ReleaseDC【说明】释放由调用GetDC或GetWindowDC函数获取的指定设备场景。它对类或私有设备场景无效(但这样的调用不会造成损害)【返回值】Long,执行成功为1,否则为0【其它】对那些用CreateDC一类的DC创建函数生成的设备场景,不要用本函数【参数表】hwnd -----------  Long,要释放的设备场景相关的窗口句柄hdc ------------  Long,要释放的设备场景句柄