Пикчербокс нестандартной формы - не работает - VB

Узнай цену своей работы

Формулировка задачи:

Здравствуйте! С Новым Годом всех! Скачал пример из сети - PictureBox нестандартной формы. Но не работает. Подскажите, в чём моя ошибка?
Листинг программы
  1. Option Explicit
  2. Private Declare Function CreateEllipticRgn Lib "gdi32" (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long
  3. Private Declare Function SetWindowRgn Lib "user32" (ByVal hwnd As Long, ByVal hRgn As Long, ByVal bRedraw As Boolean) As Long
  4. Private Declare Function CreatePolygonRgn Lib "gdi32" (lpPoint As POINTAPI, ByVal nCount As Long, ByVal nPolyFillMode As Long) As Long
  5. Private Type POINTAPI
  6. X As Long
  7. Y As Long
  8. End Type
  9. Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
  10. Private Declare Sub ReleaseCapture Lib "user32" ()
  11. Dim P(50) As POINTAPI
  12. Dim Rgn As Long
  13. Private Sub cmdCreatePolygon_Click()
  14. P(0).X = 132: P(0).Y = 6
  15. P(1).X = 173: P(1).Y = 64
  16. P(2).X = 303: P(2).Y = 71
  17. P(3).X = 213: P(3).Y = 123
  18. P(4).X = 291: P(4).Y = 241
  19. P(5).X = 157: P(5).Y = 154
  20. P(6).X = 5: P(6).Y = 239
  21. P(7).X = 78: P(7).Y = 103
  22. P(8).X = 10: P(8).Y = 58
  23. P(9).X = 100: P(9).Y = 60
  24. P(10).X = 132: P(10).Y = 6
  25. Rgn = CreatePolygonRgn(P(0), 11, 0)
  26. Call SetWindowRgn(Picture1.hwnd, Rgn, True)
  27. End Sub
  28. Private Sub cmdCreateEllipse_Click()
  29. Call SetWindowRgn(Picture1.hwnd, CreateEllipticRgn(0, 0, 299, 200), True)
  30. End Sub
  31. Private Sub Picture1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
  32. If Button = 1 Then
  33. Call ReleaseCapture
  34. Call SendMessage(Picture1.hwnd, &HA1, 2, 0&)
  35. End If
  36. End Sub
SetWindowRgn с CreateEllipticRgn работает нормально, а вот с CreatePolygonRgn - ноль реакции

Решение задачи: «Пикчербокс нестандартной формы - не работает»

textual
Листинг программы
  1. Option Explicit
  2.     Private Declare Function CreateEllipticRgn Lib "gdi32" (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long
  3.     Private Declare Function SetWindowRgn Lib "user32" (ByVal hwnd As Long, ByVal hRgn As Long, ByVal bRedraw As Boolean) As Long
  4.     Private Declare Function CreatePolygonRgn Lib "gdi32" (lpPoint As POINTAPI, ByVal nCount As Long, ByVal nPolyFillMode As Long) As Long
  5.     Private Declare Function CreateRectRgn Lib "gdi32" (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long
  6.     Private Declare Function CombineRgn Lib "gdi32" (ByVal hDestRgn As Long, ByVal hSrcRgn1 As Long, ByVal hSrcRgn2 As Long, ByVal nCombineMode As Long) As Long
  7.     Private Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long
  8.     Private Type POINTAPI
  9.         X As Long
  10.         Y As Long
  11.     End Type
  12.     Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
  13.     Private Declare Sub ReleaseCapture Lib "user32" ()
  14.     Dim P(50) As POINTAPI
  15.     Dim Rgn As Long
  16.  
  17.     Private Sub cmdCreatePolygon_Click()
  18.         P(0).X = 132: P(0).Y = 6
  19.         P(1).X = 173: P(1).Y = 64
  20.         P(2).X = 303: P(2).Y = 71
  21.         P(3).X = 213: P(3).Y = 123
  22.         P(4).X = 291: P(4).Y = 241
  23.         P(5).X = 157: P(5).Y = 154
  24.         P(6).X = 5: P(6).Y = 239
  25.         P(7).X = 78: P(7).Y = 103
  26.         P(8).X = 10: P(8).Y = 58
  27.         P(9).X = 100: P(9).Y = 60
  28.         P(10).X = 132: P(10).Y = 6
  29.         Dim i As Integer, rNew
  30.         Rgn = CreatePolygonRgn(P(0), 11, 1)
  31.         For i = 1 To 10
  32.            rNew = CreatePolygonRgn(P(i), 11, 1)
  33.            CombineRgn Rgn, Rgn, rNew, 2
  34.            DeleteObject rNew
  35.         Next i
  36.         Call SetWindowRgn(Picture1.hwnd, Rgn, True)
  37.     End Sub

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 4.1 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут