我用 MSHFlexGrid 显示数据表,想在表格上再划辅助线,但line控件总在表格后层,移不到前层来,用窗体的ling划线功能也不行,请问该如何实现?谢谢。
解决方案 »
- 为什么mscorlib组件用户不能添加
- 我将sql server7的数据备份还原导sql server 2000,中文数据都成乱码了,查询分析器查询时 中文数据又显示正常 怎么回事
- 可否在ActiveReports中将同一条记录打印很多份?
- datareport报表宽度问题
- 这个Systray代码的特性为何不像MSN MSG那样智能呢?
- 请问是否有比较简便的方法可以知道,程序中哪些变量定义完后根本不用?
- 如何监视Windows剪贴板?
- 校园网用免费代理软件玩网游
- 我机器上没有vb,哪位朋友帮我编译一下。
- 求程序---------------*****-----------大家帮帮忙亚!
- 怎么限制编辑框只能输入数字?大家给点代码参考参考吧?
- 大家谁帮我改一下下面这代码,改得效率高点
x As Long
y As Long
End Type
Private Declare Function GetWindowDC Lib "user32" (ByVal hwnd As Long) As LongPrivate Sub Command1_Click()
Dim hdc As Long
Dim p As POINTAPI
hdc = GetWindowDC(MSHFlexGrid1.hwnd)
MoveToEx hdc, 30, 30, p
LineTo hdc, 100, 100
End Sub画一条(30,30)-(100,100)的斜线
Public Type POINTAPI
x As Long
y As Long
End Type
Public Declare Function CreatePen Lib "gdi32" (ByVal nPenStyle As Long, ByVal nWidth As Long, ByVal crColor As Long) As Long
Public Declare Function MoveToEx Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, lpPoint As POINTAPI) As Long
Public Declare Function LineTo Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long) As Long
Public Declare Function SelectObject Lib "gdi32" (ByVal hdc As Long, ByVal hObject As Long) As Long
Public Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long窗体:Private Declare Function GetWindowDC Lib "user32" (ByVal hwnd As Long) As Long
Private Sub Command1_Click()
Dim old As Long
Dim p As Long
Dim a As POINTAPI
Dim hdc As Long
hdc = GetWindowDC(MSHFlexGrid1.hwnd)
p = CreatePen(0, 3, vbRed)
old = SelectObject(hdc, p)MoveToEx hdc, 0, 0, a: LineTo hdc, 200, 200
MoveToEx hdc, 0, 0, a: LineTo hdc, 30, 400SelectObject hdc, old
DeleteObject p
End Sub
用上面方法可以实现在表格上画图了,但如何才能清除所划的线条?
清除....好象有这么个API,,,忘记TNND了.....你看看API声明上,用特定方法再次调用可以清除
==================================================================================
我也忘光光了,以前可以在表格上画很多东西的
都忘了,一点都想不起来了
至于清除,调用表格的Refresh方法应该可以清除所有的线条
忘记了,晕死了快
R2_BLACK vbBlackness 黑色
R2_WHITE vbWhitness 白色
R2_NOP vbNop 不变
R2_NOT vbInvert 当前显示颜色的反色
R2_COPYPEN vbCopyPen 画笔颜色
R2_NOTCOPYPEN vbNotCopyPen R2_COPYPEN的反色
R2_MERGEPENNOT vbMergePenNot 显示颜色的反色与画笔颜色进行OR运算
R2_MASKPENNOT vbMaskPenNot 显示颜色的反色与画笔颜色进行AND运算
R2_MERGENOTPEN vbMergeNotPen 画笔颜色的反色与显示颜色进行OR运算
R2_MASKNOTPEN vbMaskNotPen 画笔颜色的反色与显示颜色进行AND运算
R2_MERGEPEN vbMergePen 画笔颜色与显示颜色进行OR运算
R2_NOTMERGEPEN vbNotMergePen R2_MERGEPEN的反色
R2_MASKPEN vbMaskPen 显示颜色与画笔颜色进行AND运算
R2_NOTMASKPEN vbNotMaskPen R2_MASKPEN的反色
R2_XORPEN vbXorPen 显示颜色与画笔颜色进行异或运算
R2_NOTXORPEN vbNotXorPen R2_XORPEN的反色
'=============================================================================
'反复按command1可以看到清除效果
Private Type POINTAPI
x As Long
y As Long
End Type
Private Declare Function CreatePen Lib "gdi32" (ByVal nPenStyle As Long, ByVal nWidth As Long, ByVal crColor As Long) As Long
Private Declare Function MoveToEx Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, lpPoint As POINTAPI) As Long
Private Declare Function LineTo Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long) As Long
Private Declare Function SelectObject Lib "gdi32" (ByVal hdc As Long, ByVal hObject As Long) As Long
Private Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As LongPrivate Declare Function GetWindowDC Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function SetROP2 Lib "gdi32" (ByVal hdc As Long, ByVal nDrawMode As Long) As LongPrivate Const R2_XORPEN = 7 ' DPx
Private Sub Command1_Click()
Dim old As Long
Dim p As Long
Dim a As POINTAPI
Dim hdc As Long
hdc = GetWindowDC(MSHFlexGrid1.hwnd)
SetROP2 hdc, R2_XORPEN
p = CreatePen(0, 3, vbRed)
old = SelectObject(hdc, p)MoveToEx hdc, 0, 0, a: LineTo hdc, 200, 200
MoveToEx hdc, 0, 0, a: LineTo hdc, 30, 400SelectObject hdc, old
DeleteObject p
End Sub