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

NIRVANAIII 2002-07-23 01:54:32
问题:你在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

...全文
33 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
NIRVANAIII 2002-09-20
  • 打赏
  • 举报
回复
谢了.

其实就这麽一句?
竟然解决了.

不明白
dsclub 2002-09-20
  • 打赏
  • 举报
回复
我有dsclub@eyou.com
NIRVANAIII 2002-09-20
  • 打赏
  • 举报
回复
UP
NIRVANAIII 2002-07-23
  • 打赏
  • 举报
回复
up
griefforyou 2002-07-23
  • 打赏
  • 举报
回复
zyl910

你给的例子好是好,可是还有缺陷.

窗体上的最小化/最大化/关闭按钮的背景没有变...

不知道有没有哪个事件是处理"绘制标题栏按钮"的!

zyl910 2002-07-23
  • 打赏
  • 举报
回复
多拦截些消息!

ftp://ftp1.mydown.com/home2/soft23/20206grad.zip
软件名称:grad.zip 更新时间:2000-11-17
软件类型:免费软件
使用平台:null
软件大小:19K
软件开发:
软件评分:★★★☆☆
简单介绍:在 Windows 95 中,实现渐变的标题栏的例子
详细介绍:
  在 Windows 95 中,实现渐变的标题栏的例子


http://go8.163.com/vbchina/downcode/tipback.zip
渐变标题栏
18.8KB 一个实现渐变窗体标题栏的例子 2001/08/21
☆☆☆☆☆ -

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧