Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - .NET

Страница: 1 |

 

  Вопрос: Окно произвольного размера. Помогите! Добавлено: 01.02.09 16:40  

Автор вопроса:  AleXandr | ICQ: 490033736 
Как сделать окно произвольного размера, с красивой тенью как в висте. есть png картинка у которой центр непрозрачный,а края полупрозрачные и углы закругленные как наложить ее на форму чтобы просвечивался задний план там где картинка полупрозрачна. Помогите!!! Заранее спасибо.

Ответить

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

Номер ответа: 1
Автор ответа:
 VβÐ



Вопросов: 15
Ответов: 194
 Web-сайт: www.homacosoft.com
 Профиль | | #1
Добавлено: 01.02.09 17:29
http://www.vbnet.ru/forum/show.aspx?id=174947&page=1

Ответить

Номер ответа: 2
Автор ответа:
 AleXandr



ICQ: 490033736 

Вопросов: 15
Ответов: 21
 Профиль | | #2 Добавлено: 01.02.09 17:53
Обрезать форму при помощи DeleteDC я немного умею, а как нарисовать за формой красивую тень?

Ответить

Номер ответа: 3
Автор ответа:
 VβÐ



Вопросов: 15
Ответов: 194
 Web-сайт: www.homacosoft.com
 Профиль | | #3
Добавлено: 01.02.09 18:56
  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.  
  68. Private Declare Sub ReleaseCapture Lib "user32" ()
  69. Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" _
  70. (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wparam As Integer, ByVal iparam As Long) As Long
  71. Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
  72. Private Declare Function DestroyWindow Lib "user32" (ByVal hwnd As Long) As Long
  73. Private Function MakeTrans(pngPath As String) As Boolean
  74. Dim tempBI As BITMAPINFO
  75. Dim lngHeight As Long
  76. Dim lngWidth As Long
  77. Dim curWinLong As Long
  78. Dim img As Long
  79. Dim graphics As Long
  80. Dim winSize As Size
  81. Dim srcPoint As POINTAPI
  82.     With tempBI.bmiHeader
  83.         .biSize = Len(tempBI.bmiHeader)
  84.         .biBitCount = 32
  85.         .biHeight = ScaleHeight 'Не забываем ставить у формы ScaleMode = vbPixels,
  86.         .biWidth = ScaleWidth   'иначе будет *жрать* память нещадно :)
  87.         .biPlanes = 1
  88.         .biSizeImage = .biWidth * .biHeight * (.biBitCount / 8)
  89.     End With
  90.         mDC = CreateCompatibleDC(hdc)
  91.         mainBitmap = CreateDIBSection(mDC, tempBI, DIB_RGB_COLORS, ByVal 0, 0, 0)
  92.         oldBitmap = SelectObject(mDC, mainBitmap)
  93.         Call GdipCreateFromHDC(mDC, graphics)
  94.         Call GdipLoadImageFromFile(StrConv(pngPath, vbUnicode), img)
  95.         Call GdipGetImageHeight(img, lngHeight)
  96.         Call GdipGetImageWidth(img, lngWidth)
  97.         Call GdipDrawImageRect(graphics, img, 0, 0, lngWidth, lngHeight)
  98.         curWinLong = GetWindowLong(hwnd, GWL_EXSTYLE)
  99.         SetWindowLong hwnd, GWL_EXSTYLE, curWinLong Or WS_EX_LAYERED
  100.         SetWindowPos hwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE
  101.         srcPoint.X = 0
  102.         srcPoint.Y = 0
  103.         winSize.cx = ScaleWidth
  104.         winSize.cy = ScaleHeight
  105.     With blendFunc32bpp
  106.         .AlphaFormat = AC_SRC_ALPHA
  107.         .BlendFlags = 0
  108.         .BlendOp = AC_SRC_OVER
  109.         .SourceConstantAlpha = 255
  110.     End With
  111. Call GdipDisposeImage(img)
  112. Call GdipDeleteGraphics(graphics)
  113. Call UpdateLayeredWindow(hwnd, hdc, ByVal 0&, winSize, mDC, srcPoint, 0, blendFunc32bpp, ULW_ALPHA)
  114. End Function
  115.  
  116.  



Пример:
  1.  
  2. Private Sub Form_Load()
  3. MakeTrans App.Path & "\Back.png"
  4. End Sub

Ответить

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



Вопросов: 58
Ответов: 4255
 Профиль | | #4 Добавлено: 01.02.09 19:44
VBD, ты, как обычно, несешь полную ахинею..
видимо, наивно полагаешь, что твоя 115-строчная хрень будет работать в NET?

Ответить

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



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #5 Добавлено: 01.02.09 20:50
В WPF делается шикарно... Причем всего десятком строк кода

Ответить

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



ICQ: 490033736 

Вопросов: 15
Ответов: 21
 Профиль | | #6 Добавлено: 02.02.09 11:20
Можно пожалуйста пример. Очень благодарен буду.

Ответить

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



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #7 Добавлено: 02.02.09 16:15
http://downloads.betacode.ru/wpf.png
Исходный код присутствует на скриншоте.

Если у тебя есть картинка то в принципе в чем-то даже проще будет. Картинку хоть покажи.

Ответить

Номер ответа: 8
Автор ответа:
 AleXandr



ICQ: 490033736 

Вопросов: 15
Ответов: 21
 Профиль | | #8 Добавлено: 02.02.09 18:42
Пойдет и так, без картинки. Спасибо. :-) А можно тоже самое сделать на простой .Net форме? Просто интересно.

Ответить

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



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #9 Добавлено: 02.02.09 19:33
Можно конечно. WPF пользуется теми же функциями, которыми можешь воспользоваться и ты. Но сделать это будет непропорционально сложнее чем на WPF. Прийдется мучиться с API и это будет совсе не "десяток строк"

Ответить

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



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #10 Добавлено: 02.02.09 22:55
Вообще до сих пор не пойму - WPF вышел больше года назад. Но в России его похоже вообще никто не использует до сих пор.

Ответить

Страница: 1 |

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



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