有是高分问题:Bitblt,还有点问题。

NIRVANAIII NIRVANAIII 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
问题:你在picturebox里装上一幅图片,只要一点击窗体标题栏的位置,就看到问题了
怎么去掉那条线?
另外做skin应该用什么方法较好?
谁知道Winamp是怎么做到的?

'////////////Module////////////
Option Explicit

Declare Function BitBlt Lib "gdi32" (ByVal hDestDC 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 dwRop As Long) As Long
Declare Function GetWindowRect Lib "user32" (ByVal hwnd As Long, lpRect As RECT) As Long
Declare Function GetWindowDC Lib "user32" (ByVal hwnd As Long) As Long
Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Declare Function WindowFromDC Lib "user32" (ByVal hdc As Long) As Long

Private Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type

Dim PrevProc As Long

Private Const STRETCH_ANDSCANS = 1
Private Const STRETCH_DELETESCANS = 3
Private Const STRETCH_HALFTONE = 4
Private Const STRETCH_ORSCANS = 2

Private Const WM_ACTIVATE = &H6
Private Const WM_SETFOCUS = &H7
Private Const WM_KILLFOCUS = &H8
Private Const WM_SETREDRAW = &HB
Private Const WM_PAINT = &HF
Private Const WM_ERASEBKGND = &H14
Private Const WM_SHOWWINDOW = &H18
Private Const WM_CHILDACTIVATE = &H22


Private Const GWL_WNDPROC = (-4)

Public frm_hDC As Long
Public img_hDC As Long

Public Sub Paint1()
BitBlt frm_hDC, 0, 0, frmMain.Width, frmMain.Height, img_hDC, 24, 0, vbSrcCopy
End Sub


Function funWinPro(ByVal hwnd As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
funWinPro = CallWindowProc(PrevProc, hwnd, uMsg, wParam, lParam)

Select Case (uMsg)
Case WM_ACTIVATE
Paint1
Case WM_PAINT
Paint1
Case WM_ERASEBKGND
Paint1
Case Else
End Select

End Function

Public Sub funTest()
PrevProc = SetWindowLong(WindowFromDC(frm_hDC), GWL_WNDPROC, AddressOf funWinPro)
End Sub

Public Sub UnHook()
SetWindowLong WindowFromDC(frm_hDC), GWL_WNDPROC, PrevProc
End Sub

'//////////////////frmMain.frm////////////////////
'窗体上有一个图片框
Option Explicit

Private Sub Form_Load()
frm_hDC = GetWindowDC(Me.hwnd)
img_hDC = Picture1.hdc
Me.ScaleMode = 3

funTest

End Sub

...全文

相关推荐

评论 6
收藏 已收藏
分享
返回顶部
NIRVANAIII
VB基础类 7,788 成员 197,583 内容