gdi+画图问题。
Declare Auto Function GetDC Lib "user32" (ByVal hwnd As Integer) As IntPtr
Declare Function CreatePen Lib "gdi32" Alias "CreatePen" (ByVal nPenStyle As Integer, ByVal nWidth As Integer, ByVal crColor As Integer) As Integer
Declare Function GetROP2 Lib "gdi32" Alias "GetROP2" (ByVal hdc As IntPtr) As Integer
Declare Function SetROP2 Lib "gdi32" Alias "SetROP2" (ByVal hdc As IntPtr, ByVal nDrawMode As Long) As Integer
Declare Function SelectObject Lib "gdi32" Alias "SelectObject" (ByVal hdc As IntPtr, ByVal hObject As IntPtr) As Integer
Declare Function GetStockObject Lib "gdi32" Alias "GetStockObject" (ByVal nIndex As Integer) As IntPtr
Declare Function ReleaseDC Lib "user32" Alias "ReleaseDC" (ByVal hwnd As Integer, ByVal hdc As IntPtr) As IntPtr
Declare Function Rectangle Lib "gdi32" Alias "Rectangle" (ByVal hdc As IntPtr, ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long
Dim slx As Single = -1
Dim sly As Single = -1
Dim slw As Single = -1
Dim slh As Single = -1
Private Sub APIDraw()
Dim p As System.IntPtr = GetDC(0) '取得屏幕
Dim oldrop2, pen, oldpen As Integer
oldrop2 = GetROP2(p) '保存以前的画图方式
SetROP2(p, 7) '设置XOR画笔
SelectObject(p, GetStockObject(5)) '屏蔽画刷
pen = CreatePen(2, 1, System.Drawing.ColorTranslator.ToWin32(System.Drawing.Color.Black)) '新建画笔
oldpen = SelectObject(p, GetStockObject(pen)) '使用画笔
If slx > -1 Then '如果不是出始就第2次异或
Rectangle(p, slx, sly, slw, slh) '画矩形
End If
If HasLayout Then ‘如果拖动
slx = Me.Location.X + mx - lx '保存本次矩形
sly = Me.Location.Y + my - ly
slw = Me.Location.X + mx - lx + Me.Width
slh = Me.Location.Y + my - ly + Me.Height
Rectangle(p, slx, sly, slw, slh) '画矩形
Else
slx = sly = slw = slh = -1 '还原
End If
pen = SelectObject(p, GetStockObject(oldpen)) '还原画笔
SetROP2(p, oldrop2) '还原以前的画图方式
ReleaseDC(0, p) '释放
End Sub
我上面这段代码为什么画不出图形来啊。本来想实现窗体拖动,现在连图形的画不出来。
问题点数:20、回复次数:13Top
1 楼ilove8(千里|你去哪里了,我等了你很久了!)回复于 2006-06-03 13:20:17 得分 0
upTop
2 楼laviewpbt(人一定要靠自己)回复于 2006-06-03 14:01:33 得分 5
你这是gdiTop
3 楼VirtualDesktop(^_^)回复于 2006-06-03 14:26:01 得分 0
晕~你着是gdi啊
你为什么不用.NET内置的gdi+画图Top
4 楼cymandhxl(迷失中)回复于 2006-06-03 16:36:27 得分 0
gdi+能在窗体外画吗,能支持异或画笔吗Top
5 楼zhouhuaikun(怀空)回复于 2006-06-03 16:52:37 得分 5
gdi+不支持异或,
可以调用gdi的异或功能Top
6 楼liujiayu10(活着就好)回复于 2006-06-03 17:21:52 得分 0
不需要调API,直接用VB.net里的Drawing类就行Top
7 楼gezichong(鸽子虫)回复于 2006-06-03 21:27:03 得分 0
顶
.net 里有gdi+ 可以直接画图
根本不用api
Top
8 楼gezichong(鸽子虫)回复于 2006-06-03 21:28:34 得分 0
如:画矩形
graphics.drawrectangle(0,0,24,65)
(0,0)为左上角的顶点;(24,65)为右下角的顶点
Top
9 楼cymandhxl(迷失中)回复于 2006-06-04 19:59:24 得分 0
大家为什么不帮我分析下代码呢.却讨论GDI和GDI+呢.我现在只是想实现我的功能,用什么都无所谓.Top
10 楼sx_lxh(路漫漫)回复于 2006-06-04 21:12:54 得分 0
程序不完整。Top
11 楼sx_lxh(路漫漫)回复于 2006-06-04 21:14:27 得分 10
试着把声明中的long 全改为integerTop
12 楼cymandhxl(迷失中)回复于 2006-06-05 08:29:47 得分 0
只有一个LONG啊。再说把IF去掉就应该放在哪里都可以了。Top
13 楼ybcsqq()回复于 2006-06-05 09:55:10 得分 0
graphics.drawrectangle(0,0,24,65)
(0,0)为左上角的顶点;(24,65)为右下角的顶点
(24,65) 是矩形的宽和高 好不好Top




