“区域”为何不能重复使用呢???

fzn0621 2002-12-06 04:32:36
请大家看我以下这段实验代码:
Private Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long
Private Declare Function SetWindowRgn Lib "user32" (ByVal hwnd As Long, ByVal hRgn As Long, ByVal bRedraw As Boolean) As Long
Private Declare Function CreateRectRgn Lib "gdi32" (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long
Private ElfRgn(2) As Long
Private Sub Command1_Click()
SetWindowRgn Picture1.hwnd, ElfRgn(1), True
End Sub
Private Sub Command2_Click()
SetWindowRgn Picture1.hwnd, ElfRgn(2), True
End Sub
Private Sub Form_Load()
ElfRgn(1) = CreateRectRgn(100, 100, 200, 200)
ElfRgn(2) = CreateRectRgn(0, 0, 200, 200)
End Sub
Private Sub Form_Unload(Cancel As Integer)
DeleteObject ElfRgn(1)
DeleteObject ElfRgn(2)
End Sub

第一次点击那两个按钮的任意一个,都没问题。而第二次就不行了。完全没反应了。
好象区域消失了??请大家帮我指点迷经!!
...全文
19 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
fzn0621 2002-12-08
  • 打赏
  • 举报
回复
我是想做一个类似桌面精灵的那种程序。
需要按图片不断变化变化窗体。我想先把所有的图片区域创建好,窗体卸载的时候再一起删除。
junwhj 2002-12-07
  • 打赏
  • 举报
回复
Option Explicit

Private Declare Function SetWindowRgn Lib "user32" (ByVal hwnd As Long, ByVal hRgn As Long, ByVal bRedraw As Boolean) As Long
Private Declare Function CreateRectRgn Lib "gdi32" (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long

Private Sub Command1_Click()
SetWindowRgn Picture1.hwnd, CreateRectRgn(100, 100, 200, 200), True
End Sub

Private Sub Command2_Click()
SetWindowRgn Picture1.hwnd, CreateRectRgn(0, 0, 200, 200), True
End Sub
zyl910 2002-12-07
  • 打赏
  • 举报
回复
CombineRgn

VB声明
Declare Function CombineRgn Lib "gdi32" Alias "CombineRgn" (ByVal hDestRgn As Long, ByVal hSrcRgn1 As Long, ByVal hSrcRgn2 As Long, ByVal nCombineMode As Long) As Long
说明
将两个区域组合为一个新区域
返回值
Long,下列常数之一:
COMPLEXREGION:区域有互相交叠的边界
SIMPLEREGION:区域边界没有互相交叠
NULLREGION:区域为空
ERRORAPI:不能创建组合区域
参数表
参数 类型及说明
hDestRgn Long,包含组合结果的区域句柄
hSrcRgn1 Long,源区域1
hSrcRgn2 Long,源区域2
nCombineMode Long,组合两区域的方法。可设为下述常数
RGN_AND hDestRgn被设置为两个源区域的交集
RGN_COPY hDestRgn被设置为hSrcRgn1的拷贝
RGN_DIFF hDestRgn被设置为hSrcRgn1中与hSrcRgn2不相交的部分
RGN_OR hDestRgn被设置为两个区域的并集
RGN_XOR hDestRgn被设置为除两个源区域OR之外的部分
fzn0621 2002-12-07
  • 打赏
  • 举报
回复
原来是这样啊。。
那有办法保留多个区域吗?(为的是加快速度不重负创建区域。)
zyl910 2002-12-07
  • 打赏
  • 举报
回复
SetWindowRgn后
系统会管理区域句柄
如果再用SetWindowRgn设置区域的话
原来的区域会自动删除

1,486

社区成员

发帖
与我相关
我的任务
社区描述
VB API
社区管理员
  • API
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧