獲取純色圖片作為背景
[計]選項
明確的
'*************************************************************
*模塊:mMsgBoxEx
*功能:改變對話框的字體為彩色,改變圖片的背景。
*調用:MsgBoxEx("改變背景對話框!"
,vbOKOnly,“提示”,,,
vbCyan)
'*************************************************************
私人的
CWPSTRUCT標牌
lParam組件
長的
wParam組件
長的
消息長度
hWnd
壹樣長
結束類型
私有聲明子復制內存庫“kernel32”別名
“RtlMoveMemory”(目標為任意,源為任意,ByVal長度為
龍)
私有聲明函數SetWindowsHookEx Lib“user 32”別名
“SetWindowsHookExA”(ByVal id hook為Long,ByVal lpfn為Long,ByVal hmod為
Long,ByVal dwThreadId壹樣長)壹樣長
私有聲明函數
調用nexthookex Lib“user 32”(ByVal hHook As Long,ByVal nCode As Long,ByVal
wParam壹樣長,lParam壹樣長)
私有聲明函數
unhook windowshookex Lib " user 32 "(ByVal hHook壹樣長)壹樣長
私人的
聲明函數SetWindowLong Lib“user 32”別名“SetWindowLongA”(ByVal hWnd
壹樣長,ByVal nIndex壹樣長,ByVal dwNewLong壹樣長
私人的
聲明函數CallWindowProc Lib“user 32”別名“CallWindowProcA”(ByVal
lpPrevWndFunc為Long,ByVal hWnd為Long,ByVal Msg為Long,ByVal wParam為
Long,ByVal lParam As Long)
私有聲明函數GetClassName Lib
“user32”別名“get class name a”(ByVal hWnd為Long,ByVal lpClassName為String,
ByVal nMaxCount壹樣長)壹樣長
私有聲明函數SetTextColor
lib“GDI 32”(ByVal hdc壹樣長,ByVal crColor壹樣長)壹樣長
私人的
將函數GetSysColor Lib“user 32”(ByVal nIndex壹樣長)聲明為
長的
私有聲明函數SetBkMode Lib " GDI 32 "(ByVal hdc As Long,
ByVal nBkMode壹樣長)壹樣長
私有聲明函數CreatePatternBrush
Lib "gdi32" (ByVal hBitmap壹樣長)壹樣長
透明處理
公共常數透明
= 1
私人常數WH_CALLWNDPROC = 4
私人常數GWL_WNDPROC =
(-4)
私有常量WM _ CTLCOLORBTN = & ampH135
私有常量WM_DESTROY =
& amp氘
私有常量WM _ SETTEXT = & ampHC
私有常量WM_CREATE =
& ampH1
系統顏色常數
私有常量COLOR_BTNFACE =
15
private Const COLOR _ BTN text = 18
Windows消息
私人的
Const WM _ CTLCOLORSTATIC = & ampH138
私有常量WM_CTLCOLORDLG =
& ampH136
列兵長
私有lPrevWnd As
長的
Private lForecolor壹樣長
公共函數SubMsgBox(ByVal
hWnd為Long,ByVal Msg為Long,ByVal wParam為Long,ByVal lParam為Long)
長的
Dim文本為
線
選擇案例
味精
對話框顏色和標簽顏色消息
情況
WM_CTLCOLORDLG,
WM_CTLCOLORSTATIC
調試。打印
wParam & amp
":Wparam "
壹組
字體背面透明度
並且改變顏色。
如果
Msg = WM_CTLCOLORSTATIC
然後
打電話
SetBkMode(wParam,
透明)
結束
如果
打電話
SetTextColor(wParam,
lForecolor)
壹組
背景
圖片.
子消息框
= CreatePatternBrush(LoadResPicture(101,
0).手柄)
LoadResPicture(101,
0).處理
是資源文件中ID為101的圖片。
出口
功能
情況
WM _銷毀
去除
MsgBox
子類
打電話
SetWindowLong(hWnd,GWL_WNDPROC,lPrevWnd)
結束
挑選
SubMsgBox = CallWindowProc(lPrevWnd,hWnd,
Msg,wParam,ByVal lParam)
結束功能
私人功能
HookWindow(ByVal nCode壹樣長,ByVal wParam壹樣長,ByVal lParam壹樣長)作為
長的
Dim tCWP組件
CWPSTRUCT
模糊類別為
線
這是妳需要掛鉤的地方
Messagebox
復制記憶tCWP,ByVal lParam,
Len(tCWP)
如果tCWP.message = WM_CREATE
然後
sClass =
空間(255)
sClass =
Left(sClass,GetClassName(tCWP.hWnd,ByVal sClass,
255))
如果sClass = "#32770 "
然後
亞綱
現有的Messagebox
創造
lPrevWnd
= SetWindowLong(tCWP.hWnd,GWL_WNDPROC,AddressOf
子消息框)
結束
如果
如果…就會結束
HookWindow =
CallNextHookEx(lHook,nCode,wParam,ByVal lParam)
結束功能
公共
函數MsgBoxEx(ByVal提示為字符串,可選ByVal按鈕為
VbMsgBoxStyle,字符串形式的可選ByVal標題,字符串形式的可選ByVal幫助文件
String,可選ByVal Context As Long,可選ByVal ForeColor As
ColorConstants = -1)壹樣長
Dim lReturn As
長的
lHook = SetWindowsHookEx(WH _ CALLWNDPROC
HookWindow的地址,
App。ThreadID)
設置
默認
如果Len(Title) = 0,則Title =
App。標題
lForecolor =
GetSysColor(COLOR_BTNTEXT)
If ForeColor & gt那麽= 0
lForecolor =前景色
顯示修改過的
對話框
lReturn = MsgBox(提示,按鈕,標題,
幫助文件,上下文)
打電話
UnhookWindowsHookEx(lHook)
MsgBoxEx = lReturn
結束
功能
這是壹個公共模塊。但是圖片是固定在資源文件裏的,沒有想到別的辦法。
如果有人想到其他的解決方法,請告訴我,我們可以互相學習。^_^
其中包括:
LoadResPicture(101,
0).處理
是資源文件中ID為101的圖片。
您也可以在表單的圖片框中將其更改為圖片。
比如:form 1 . picture 1 . picture . handle。