{ WM_NCHITTEST, 0, 0, 0, AfxSig_l_p,
(AFX_PMSG)(AFX_PMSGW)
(static_cast< UINT (AFX_MSG_CALL CWnd::*)(CPoint) > (&ThisClass :: OnNcHitTest)) },
zHackLeX писал(а):Во-первых, кто мешает полностью нарисовать png, содержащий и фон, и полупрозрачные картинки?
zHackLeX писал(а):Во-вторых, на всякий случай, http://www.codeproject.com/KB/GDI/pxalphablend.aspx
Здесь рабочий пример в точности того, что тебе требуется, но на С++. Если языкового
барьера нет - легко увидишь, как что сделано. Если нет аккаунта на CP и не можешь
скачать, прилагаю аттач.
В любом случае, если надумаешь компилить сабж (компилить лучше в vs2005+) и
компилер заругается (а он заругается на строчке ON_WM_NCHITTEST() ),
замени её (это #define-макрос) на
- Код: Выделить всё
{ WM_NCHITTEST, 0, 0, 0, AfxSig_l_p,
(AFX_PMSG)(AFX_PMSGW)
(static_cast< UINT (AFX_MSG_CALL CWnd::*)(CPoint) > (&ThisClass :: OnNcHitTest)) },
запятая в конце - должна быть, это нормально. После этого пример запустится.
В статье автор указал, где ключевые моменты реализации, куда смотреть в код.
Надеюсь, чем-то помог... в 4 часа ночи уже залипаю, сил нет.
zHackLeX писал(а):Что, нет редакторов PNG, работающих с альфа-каналом? 0_о
Или UpdateLayeredWindow даже ОДНУ БОЛЬШУЮ png не натянет на форму так, чтобы альфа-канал png определял степень прозрачности каждого отдельного пикселя формы?
...Согласен, VB6 - простой язык, и слезть с него на что-то более сложное без посторонней помощи тяжело. Но, вообще-то, надо. Не для того, чтобы выкинуть VB6, но для того, чтобы иметь выбор.
xaser писал(а):Не... обрезать-то обрезало, но "криво"!
вот результат:
Me.PaintPicture P.Picture, 50, 50, Me.ScaleWidth - 50 + 230 / IIf(Me.ScaleMode = vbPixels, 15, 1), Me.ScaleHeight - 50 + 230 / IIf(Me.ScaleMode = vbPixels, 15, 1), 0, 0, P.Width, P.Height, vbSrcCopy
Private Declare Function StretchBlt Lib "gdi32" (ByVal hDC As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal nSrcWidth As Long, ByVal nSrcHeight As Long, ByVal dwRop As Long) As Long
Private Declare Function SetStretchBltMode Lib "gdi32" (ByVal hDC As Long, ByVal hStretchMode As Long) As Long
Call SetStretchBltMode(Me.hDC, vbPaletteModeNone)
Call StretchBlt(Me.hDC, 50, 50, Me.ScaleWidth - 50 + 230 / IIf(Me.ScaleMode = vbPixels, 15, 1), Me.ScaleHeight - 50 + 230 / IIf(Me.ScaleMode = vbPixels, 15, 1), P.hDC, 0, 0, 122, 77, vbSrcCopy)
Call GdipLoadImageFromFile(StrConv(strPNGFile, vbUnicode), hImage(0))
Call GdipGetImageHeight(hImage(0), H)
Call GdipGetImageWidth(hImage(0), W)
Call GdipDrawImageRect(hGraphics, hImage(0), 0, 0, W, H)
Call GdipLoadImageFromStream(Picture1.Picture, hImage(0))
Call GdipGetImageHeight(hImage(0), H)
Call GdipGetImageWidth(hImage(0), W)
Call GdipDrawImageRect(hGraphics, hImage(0),0, 0, W, H)
Сейчас этот форум просматривают: Google-бот и гости: 3