В идеале мне нужно
1) Создать регион.
2) Сохранить регион в переменную.
3) Применить, сохранённый регион на форме.
С созданием региона проблем нет, но вот эту бодягу GetRegionData я никак сломить не могу...

Private Declare Function GetRegionData Lib "GDI32.dll" ( _
ByVal hRgn As Long, ByVal dwCount As Long, ByRef lpRgnData As Any) As Long
Private Type RectAPI
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type
Private Type RgnDataHeader
dwSize As Long
iType As Long
nCount As Long
nRgnSize As Long
rcBound As RectAPI
End Type
Private Type RgnDataVB
rdh As RgnDataHeader
Buffer() As RectAPI
End Type
Private Function GetRegionDataVB(ByVal inRgn As Long) As RgnDataVB
Dim RgnData() As Long, DataSize As Long
Dim HeadSize As Long
Dim RectSize As Long
Dim NumRect As Long
DataSize = GetRegionData(inRgn, 0, ByVal 0&)
If (DataSize > 0) Then ' Get structure sizes
HeadSize = Len(GetRegionDataVB.rdh)
RectSize = Len(GetRegionDataVB.rdh.rcBound)
ReDim RgnData(DataSize \ 4) As Long
Call GetRegionData(inRgn, DataSize, RgnData(0))
NumRect = (DataSize - HeadSize) \ RectSize
If (NumRect = RgnData(2)) Then ' Populate VB UDT with region data
ReDim Preserve GetRegionDataVB.Buffer(NumRect - 1) As RectAPI
Call RtlMoveMemory(GetRegionDataVB.rdh, RgnData(0), HeadSize)
Call RtlMoveMemory(GetRegionDataVB.Buffer(0), _
RgnData(HeadSize \ 4), NumRect * RectSize)
End If
End If
End Function
Declare Sub RtlMoveMemory Lib "kernel32.dll" ( _
ByRef Destination As Any, _
ByRef Source As Any, _
ByVal Length As Long)
SetWindowRgn me.hwnd,RGN(N),true
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5