Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: 32 битное окно. Добавлено: 14.08.09 16:08  

Автор вопроса:  AWP | Web-сайт: xawp.narod.ru | ICQ: 345685652 
Не в курсе как 32 битное окно делается?
Не просто прозрачное.

Ответить

  Ответы Всего ответов: 12  

Номер ответа: 1
Автор ответа:
 UnDeAdZak



Вопросов: 80
Ответов: 476
 Профиль | | #1 Добавлено: 14.08.09 17:28
32 битое окно)))

Ответить

Номер ответа: 2
Автор ответа:
 Дмитрий Юпатов



Вопросов: 4
Ответов: 457
 Web-сайт: cargomaster.at.ua/
 Профиль | | #2
Добавлено: 14.08.09 17:47
А что это такое?

Ответить

Номер ответа: 3
Автор ответа:
 User Unknown



Вечный Юзер!

ICQ: uu@jabber.cz 

Вопросов: 120
Ответов: 3302
 Профиль | | #3 Добавлено: 14.08.09 19:53
Дмитрий Юпатов пишет:
А что это такое?

Я догадываюсь, что автор имеет ввиду 32 битный цвет и всё такое.. чтобы углы не были рваными или что-то в этом роде.

Ответить

Номер ответа: 4
Автор ответа:
 AWP



ICQ: 345685652 

Вопросов: 96
Ответов: 1212
 Web-сайт: xawp.narod.ru
 Профиль | | #4
Добавлено: 14.08.09 20:33
Да, Exactly!

Ответить

Номер ответа: 5
Автор ответа:
 Smith



ICQ: adamis@list.ru 

Вопросов: 153
Ответов: 3632
 Профиль | | #5 Добавлено: 14.08.09 21:13
Форму делаешь больше чем нужно на пару-тройку пикселей, копируешь на неё то, что под ней и поверх рисуешь свою мазню с тенями и другими фифектами.

Ответить

Номер ответа: 6
Автор ответа:
 AWP



ICQ: 345685652 

Вопросов: 96
Ответов: 1212
 Web-сайт: xawp.narod.ru
 Профиль | | #6
Добавлено: 14.08.09 21:35
Как скопировать то что под ней, если форма загараживает все.
Я так понял что ты имеешь ввиду
  1.  
  2.   hDC = GetDC(GetDesktopWindow)



Если так то это сработает, например, да заставки, но не для рабочей формы.

Ответить

Номер ответа: 7
Автор ответа:
 Smith



ICQ: adamis@list.ru 

Вопросов: 153
Ответов: 3632
 Профиль | | #7 Добавлено: 15.08.09 11:27
Все прекрасно работает, проверено.
Сначала копируй потом отображай форму.

Ответить

Номер ответа: 8
Автор ответа:
 VβÐUηìt



Вопросов: 246
Ответов: 3333
 Web-сайт: смекаешь.рф
 Профиль | | #8
Добавлено: 15.08.09 12:07
Буэ... Гадость. Клики тоже вручуню будешь обрабатывать?. К примеру, как такую васю делать из PNG.
В модуль:
  1. Public Type GdiplusStartupInput
  2.     GdiplusVersion As Long
  3.     DebugEventCallback As Long
  4.     SuppressBackgroundThread As Long
  5.     SuppressExternalCodecs As Long
  6. End Type
  7. Public Declare Function GdipDrawImageRect Lib "gdiplus" (ByVal graphics As Long, _
  8. ByVal image As Long, ByVal x As Single, ByVal y As Single, ByVal Width As Single, ByVal Height As Single) As GpStatus
  9. Public Declare Function GdipLoadImageFromFile Lib "gdiplus" (ByVal filename As String, image As Long) As GpStatus
  10. Public Declare Function GdipGetImageWidth Lib "gdiplus" (ByVal image As Long, Width As Long) As GpStatus
  11. Public Declare Function GdipGetImageHeight Lib "gdiplus" (ByVal image As Long, Height As Long) As GpStatus
  12. Public Declare Function GdipDisposeImage Lib "gdiplus" (ByVal image As Long) As GpStatus
  13. Public Declare Function GdiplusStartup Lib "gdiplus" (token As Long, _
  14. inputbuf As GdiplusStartupInput, Optional ByVal outputbuf As Long = 0) As GpStatus
  15. Public Declare Function GdipCreateFromHDC Lib "gdiplus" (ByVal hdc As Long, graphics As Long) As GpStatus
  16. Public Declare Function GdipDeleteGraphics Lib "gdiplus" (ByVal graphics As Long) As GpStatus
  17. Public Enum GpStatus
  18.     Ok = 0
  19.     GenericError = 1
  20.     InvalidParameter = 2
  21.     OutOfMemory = 3
  22.     ObjectBusy = 4
  23.     InsufficientBuffer = 5
  24.     NotImplemented = 6
  25.     Win32Error = 7
  26.     WrongState = 8
  27.     Aborted = 9
  28.     FileNotFound = 10
  29.     ValueOverflow = 11
  30.     AccessDenied = 12
  31.     UnknownImageFormat = 13
  32.     FontFamilyNotFound = 14
  33.     FontStyleNotFound = 15
  34.     NotTrueTypeFont = 16
  35.     UnsupportedGdiplusVersion = 17
  36.     GdiplusNotInitialized = 18
  37.     PropertyNotFound = 19
  38.     PropertyNotSupported = 20
  39. End Enum

В форму:
  1. Option Explicit
  2. Private Const ULW_ALPHA = &H2
  3. Private Const DIB_RGB_COLORS As Long = 0
  4. Private Const AC_SRC_ALPHA As Long = &H1
  5. Private Const AC_SRC_OVER = &H0
  6. Private Const WS_EX_LAYERED = &H80000
  7. Private Const GWL_EXSTYLE As Long = -20
  8. Private Const HWND_TOPMOST As Long = -1
  9. Private Const SWP_NOMOVE As Long = &H2
  10. Private Const SWP_NOSIZE As Long = &H1
  11. Private Type BLENDFUNCTION
  12.     BlendOp As Byte
  13.     BlendFlags As Byte
  14.     SourceConstantAlpha As Byte
  15.     AlphaFormat As Byte
  16. End Type
  17. Private Type Size
  18.     cx As Long
  19.     cy As Long
  20. End Type
  21. Private Type POINTAPI
  22.     x As Long
  23.     y As Long
  24. End Type
  25. Private Type RGBQUAD
  26.     rgbBlue As Byte
  27.     rgbGreen As Byte
  28.     rgbRed As Byte
  29.     rgbReserved As Byte
  30. End Type
  31. Private Type BITMAPINFOHEADER
  32.     biSize As Long
  33.     biWidth As Long
  34.     biHeight As Long
  35.     biPlanes As Integer
  36.     biBitCount As Integer
  37.     biCompression As Long
  38.     biSizeImage As Long
  39.     biXPelsPerMeter As Long
  40.     biYPelsPerMeter As Long
  41.     biClrUsed As Long
  42.     biClrImportant As Long
  43. End Type
  44. Private Type BITMAPINFO
  45.     bmiHeader As BITMAPINFOHEADER
  46.     bmiColors As RGBQUAD
  47. End Type
  48. Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd _
  49. As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
  50. Private Declare Function UpdateLayeredWindow Lib "user32.dll" (ByVal hwnd As Long, _
  51. ByVal hdcDst As Long, pptDst As Any, psize As Any, ByVal hdcSrc As Long, pptSrc As Any, ByVal crKey As Long, ByRef pblend As BLENDFUNCTION, ByVal dwFlags As Long) As Long
  52. Private Declare Function CreateDIBSection Lib "gdi32.dll" (ByVal hdc As Long, _
  53. pBitmapInfo As BITMAPINFO, ByVal un As Long, ByRef lplpVoid As Any, _
  54. ByVal handle As Long, ByVal dw As Long) As Long
  55. Private Declare Function CreateCompatibleDC Lib "gdi32.dll" (ByVal hdc As Long) As Long
  56. Private Declare Function SelectObject Lib "gdi32.dll" (ByVal hdc As Long, _
  57. ByVal hObject As Long) As Long
  58. Private Declare Function SetWindowPos Lib "user32.dll" (ByVal hwnd As Long, _
  59. ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
  60. Private Declare Function GetWindowLong Lib "user32.dll" Alias "GetWindowLongA" _
  61. (ByVal hwnd As Long, ByVal nIndex As Long) As Long
  62. Private mDC As Long
  63. Private mainBitmap As Long
  64. Private blendFunc32bpp As BLENDFUNCTION
  65. Private token As Long
  66. Private oldBitmap As Long
  67. Private Declare Sub ReleaseCapture Lib "user32" ()
  68. Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" _
  69. (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wparam As Integer, ByVal iparam As Long) As Long
  70. Private Sub FormMove(lhWnd As Long)
  71.     ReleaseCapture
  72.     Call SendMessage(lhWnd, &HA1, 2, 0&)
  73. End Sub
  74. Private Sub Form_DblClick()
  75.     Unload Me
  76. End Sub
  77. Private Sub Form_MouseMove(Button As Integer, Shift As Integer, x As Single, y As Single)
  78.     If Button = 1 Then FormMove hwnd
  79. End Sub
  80. Private Sub Form_Initialize()
  81. Dim GpInput As GdiplusStartupInput
  82.     GpInput.GdiplusVersion = 1
  83.     If GdiplusStartup(token, GpInput) <> 0 Then
  84.         MsgBox "Ошибка GDI+!", vbCritical
  85.         Unload Me
  86.     End If
  87.     MakeTrans App.Path & "\pngres.png" 'pngres.png - скин формы
  88. End Sub
  89. '
  90. Private Function MakeTrans(pngPath As String) As Boolean
  91. Dim tempBI As BITMAPINFO
  92. Dim lngHeight As Long
  93. Dim lngWidth As Long
  94. Dim curWinLong As Long
  95. Dim img As Long
  96. Dim graphics As Long
  97. Dim winSize As Size
  98. Dim srcPoint As POINTAPI
  99.     With tempBI.bmiHeader
  100.         .biSize = Len(tempBI.bmiHeader)
  101.         .biBitCount = 32
  102.         .biHeight = ScaleHeight 'Не забываем ставить у формы ScaleMode = vbPixels,
  103.         .biWidth = ScaleWidth   'иначе будет *жрать* память нещадно :)
  104.         .biPlanes = 1
  105.         .biSizeImage = .biWidth * .biHeight * (.biBitCount / 8)
  106.     End With
  107.         mDC = CreateCompatibleDC(hdc)
  108.         mainBitmap = CreateDIBSection(mDC, tempBI, DIB_RGB_COLORS, ByVal 0, 0, 0)
  109.         oldBitmap = SelectObject(mDC, mainBitmap)
  110.         Call GdipCreateFromHDC(mDC, graphics)
  111.         Call GdipLoadImageFromFile(StrConv(pngPath, vbUnicode), img)
  112.         Call GdipGetImageHeight(img, lngHeight)
  113.         Call GdipGetImageWidth(img, lngWidth)
  114.         Call GdipDrawImageRect(graphics, img, 0, 0, lngWidth, lngHeight)
  115.         curWinLong = GetWindowLong(hwnd, GWL_EXSTYLE)
  116.         SetWindowLong hwnd, GWL_EXSTYLE, curWinLong Or WS_EX_LAYERED
  117.         SetWindowPos hwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE
  118.         srcPoint.x = 0
  119.         srcPoint.y = 0
  120.         winSize.cx = ScaleWidth
  121.         winSize.cy = ScaleHeight
  122.     With blendFunc32bpp
  123.         .AlphaFormat = AC_SRC_ALPHA
  124.         .BlendFlags = 0
  125.         .BlendOp = AC_SRC_OVER
  126.         .SourceConstantAlpha = 255
  127.     End With
  128. Call GdipDisposeImage(img)
  129. Call GdipDeleteGraphics(graphics)
  130. Call UpdateLayeredWindow(hwnd, hdc, ByVal 0&, winSize, mDC, srcPoint, 0, blendFunc32bpp, ULW_ALPHA)
  131. End Function

http://forum.vingrad.ru/faq/topic-158155.html

Дальше уже можно играть с альфа каналом и т.п.

Ответить

Номер ответа: 9
Автор ответа:
 AWP



ICQ: 345685652 

Вопросов: 96
Ответов: 1212
 Web-сайт: xawp.narod.ru
 Профиль | | #9
Добавлено: 15.08.09 13:37
О! Сенку!

Ответить

Номер ответа: 10
Автор ответа:
 AWP



ICQ: 345685652 

Вопросов: 96
Ответов: 1212
 Web-сайт: xawp.narod.ru
 Профиль | | #10
Добавлено: 15.08.09 17:14
ТОлько одна проблемка появилась.
Все контролы поверх формы не видны. Это можно как-нибудь исправить?

Ответить

Номер ответа: 11
Автор ответа:
 VβÐUηìt



Вопросов: 246
Ответов: 3333
 Web-сайт: смекаешь.рф
 Профиль | | #11
Добавлено: 15.08.09 18:18
Контролы нужно рисовать вручную внутри буфера и выводить представленным способом.

:)

Ответить

Номер ответа: 12
Автор ответа:
 AWP



ICQ: 345685652 

Вопросов: 96
Ответов: 1212
 Web-сайт: xawp.narod.ru
 Профиль | | #12
Добавлено: 15.08.09 20:05
понятно))

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам