VB里面这样搞,老是非法操作,而用VC的SDK方式则能通过,哪位老大帮我找找原因的所在,非常感谢哦!
'VB实现代码
Public Declare Function EnumWindows Lib "user32" (ByVal lpEnumFunc As Long, ByVal lParam As Long) As Long
Public Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long
Public Declare Function ReleaseDC Lib "user32" (ByVal hwnd As Long, ByVal hdc As Long) As Long
Public Declare Function Ellipse Lib "gdi32" (ByVal hdc As Long, ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As LongDim lngHWND As Long
Dim lngHDC As LongSub Main()
MsgBox "准备开始了!", vbInformation, "提示"
Call EnumWindows(AddressOf EnumWindowsPro, 0&)
End SubFunction EnumWindowsPro(hwnd As Long, lParam As Long) As Boolean
Debug.Print lParam
lngHWND = hwnd
lngHDC = GetDC(hwnd)
Call Ellipse(hdc, 0, 0, 100, 60)
Call ReleaseDC(hwnd, lngHDC)
EnumWindowsPro = True
End Function
//VC_SDK实现代码
#include <windows.h>BOOL CALLBACK EnumWindowsProc(HWND, LPARAM);int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nShowCmd)
{
EnumDesktopWindows(NULL, EnumWindowsProc, NULL);
return 0;
}BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam)
{
HDC hdc; hdc = GetDC(hwnd); Ellipse(hdc, 0, 0, 100, 40); ReleaseDC(hwnd, hdc);
return TRUE;
}
'VB实现代码
Public Declare Function EnumWindows Lib "user32" (ByVal lpEnumFunc As Long, ByVal lParam As Long) As Long
Public Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long
Public Declare Function ReleaseDC Lib "user32" (ByVal hwnd As Long, ByVal hdc As Long) As Long
Public Declare Function Ellipse Lib "gdi32" (ByVal hdc As Long, ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As LongDim lngHWND As Long
Dim lngHDC As LongSub Main()
MsgBox "准备开始了!", vbInformation, "提示"
Call EnumWindows(AddressOf EnumWindowsPro, 0&)
End SubFunction EnumWindowsPro(hwnd As Long, lParam As Long) As Boolean
Debug.Print lParam
lngHWND = hwnd
lngHDC = GetDC(hwnd)
Call Ellipse(hdc, 0, 0, 100, 60)
Call ReleaseDC(hwnd, lngHDC)
EnumWindowsPro = True
End Function
//VC_SDK实现代码
#include <windows.h>BOOL CALLBACK EnumWindowsProc(HWND, LPARAM);int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nShowCmd)
{
EnumDesktopWindows(NULL, EnumWindowsProc, NULL);
return 0;
}BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam)
{
HDC hdc; hdc = GetDC(hwnd); Ellipse(hdc, 0, 0, 100, 40); ReleaseDC(hwnd, hdc);
return TRUE;
}
解决方案 »
- 【求助】如何复制excel里面的图片粘贴到VB的image控件里面
- 改变子窗口属性后,为什么看不见了
- 怎么样才能扩展OE 的WAB 的工具栏
- 如何用Ado对象访问vfp的数据库(*.dbf),帮忙看看下面的程序。
- 请问各位前辈怎样用VB实现分布式数据库100分?
- VBA(EXCEL)编程结束后如何杀死其在操作系统中的EXCEL进程
- 我真的不想说VB比VC弱 ....(VB高手何在?捍卫VB尊严的时候到了!!!!!)
- 请问在磁盘清理工具中,去删除大小为0的空文件有没有意义?我的意思是删除它是不是节约不了什么空间,反到使得磁盘碎片增多?
- 请多指教:动态表格详细设计说明书
- 有关线程的问题。。。。
- VB中如何获取汉字的声母???
- 请问:w2k如何读写二进制文件?
on error resume next '''加上这个试试
...
Option Explicit
Public Declare Function EnumWindows Lib "user32" (ByVal lpEnumFunc As Long, ByVal lParam As Long) As Long
Public Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long
Public Declare Function ReleaseDC Lib "user32" (ByVal hwnd As Long, ByVal hdc As Long) As Long
Public Declare Function Ellipse Lib "gdi32" (ByVal hdc As Long, ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As LongSub Main()
MsgBox "准备开始了!", vbInformation, "提示"
Call EnumWindows(AddressOf EnumWindowsPro, 0&)
End SubFunction EnumWindowsPro(ByVal hwnd As Long, ByVal lParam As Long) As Long
Dim lngHDC As Long
lngHDC = GetDC(hwnd)
If lngHDC Then
Call Ellipse(lngHDC, 0, 0, 100, 60)
Call ReleaseDC(hwnd, lngHDC)
End If
EnumWindowsPro = 1
End Function
现在我运行这个程序能够把我的一些窗体上画上椭圆。