易语言中如何在信息框d窗中显示图片?

易语言中如何在信息框d窗中显示图片?,第1张

参数值由以下几组常量值组成,在将这些常量值相加以生成参数值时,每组值只能取用一个数字(第五组除外):第一组(描述对话框中显示按钮的类型与数目):0、#确认钮; 1、#确认取消钮; 2、#放弃重试忽略钮; 3、#取消是否钮; 4、#是否钮; 5、#重试取消钮第二组(描述图标的样式):16、#错误图标; 32、#询问图标; 48、#警告图标; 64、#信息图标 补充: .版本 2.子程序 __启动窗口_创建完毕信息框 (“信息框有3组参数,这组是提示文本”, #错误图标 + #取消是否钮, “信息框标题”) ' 中间那个参数就是图标的,这个可以调用自带提示图标' 如果要用其他的图标,如你所说,可以用载入命令,自己制作一个窗口提示追问: 额,谢谢你, 之前还不知道中间的参数是图标参数, 又学会点东西了。 不过我是希望d窗出来的是自己设定的一张图片, 请问这个可以实现么? 回答: 那就自己仿制作一个信息框呐 追问: 恩,谢谢你啊, 我回家研究看看。

1、这个窗体的背景图片不可以直接修改,VB不支持这么做

2、如果你非要改的话,需要API钩子来完成,具体方法如下:

先创建一个窗体,窗体上添加一个picturebox并把这个picturebox的picture属性设置成你要的图片背景,然后粘贴如下代码

Private Sub Form_Load()

Me.Show

MsgBoxEx "你好"

End Sub

第二部,增加一个模块,添加如下代码

Private Type CWPSTRUCT

lParam As Long

wParam As Long

message As Long

hWnd As Long

End Type

Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)

Private Declare Function SetWindowsHookEx Lib "user32" Alias "SetWindowsHookExA" (ByVal idHook As Long, ByVal lpfn As Long, ByVal hmod As Long, ByVal dwThreadId As Long) As Long

Private Declare Function CallNextHookEx Lib "user32" (ByVal hHook As Long, ByVal nCode As Long, ByVal wParam As Long, lParam As Any) As Long

Private Declare Function UnhookWindowsHookEx Lib "user32" (ByVal hHook As Long) As Long

Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long

Private 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

Private Declare Function GetClassName Lib "user32" Alias "GetClassNameA" (ByVal hWnd As Long, ByVal lpClassName As String, ByVal nMaxCount As Long) As Long

Private Declare Function SetTextColor Lib "gdi32" (ByVal hdc As Long, ByVal crColor As Long) As Long

Private Declare Function GetSysColor Lib "user32" (ByVal nIndex As Long) As Long

Private Declare Function SetBkMode Lib "gdi32" (ByVal hdc As Long, ByVal nBkMode As Long) As Long

Private Declare Function CreatePatternBrush Lib "gdi32" (ByVal hBitmap As Long) As Long

'透明处理

Public Const TRANSPARENT = 1

Private Const WH_CALLWNDPROC = 4

Private Const GWL_WNDPROC = (-4)

Private Const WM_CTLCOLORBTN = &H135

Private Const WM_DESTROY = &H2

Private Const WM_SETTEXT = &HC

Private Const WM_CREATE = &H1

' System Color Constants

Private Const COLOR_BTNFACE = 15

Private Const COLOR_BTNTEXT = 18

' Windows Messages

Private Const WM_CTLCOLORSTATIC = &H138

Private Const WM_CTLCOLORDLG = &H136

Private lHook As Long

Private lPrevWnd As Long

Private lForecolor As Long

Public Function SubMsgBox(ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long

Dim sText As String

Select Case Msg

'对话框颜色和标签颜色Message

Case WM_CTLCOLORDLG, WM_CTLCOLORSTATIC

Debug.Print wParam &":Wparam"

'Set Font Back 透明 和改变颜色。

If Msg = WM_CTLCOLORSTATIC Then

Call SetBkMode(wParam, TRANSPARENT)

End If

Call SetTextColor(wParam, lForecolor)

'Set BackGround Picture。

SubMsgBox = CreatePatternBrush(Form1.Picture1.Picture.Handle)

Exit Function

Case WM_DESTROY

'Remove the MsgBox Subclassing

Call SetWindowLong(hWnd, GWL_WNDPROC, lPrevWnd)

End Select

SubMsgBox = CallWindowProc(lPrevWnd, hWnd, Msg, wParam, ByVal lParam)

End Function

Private Function HookWindow(ByVal nCode As Long, ByVal wParam As Long, ByVal lParam As Long) As Long

Dim tCWP As CWPSTRUCT

Dim sClass As String

'This is where you need to Hook the Messagebox

CopyMemory tCWP, ByVal lParam, Len(tCWP)

If tCWP.message = WM_CREATE Then

sClass = Space(255)

sClass = Left(sClass, GetClassName(tCWP.hWnd, ByVal sClass, 255))

If sClass = "#32770" Then

'Subclass the Messagebox as it's created

lPrevWnd = SetWindowLong(tCWP.hWnd, GWL_WNDPROC, AddressOf SubMsgBox)

End If

End If

HookWindow = CallNextHookEx(lHook, nCode, wParam, ByVal lParam)

End Function

Public Function MsgBoxEx(ByVal Prompt As String, Optional ByVal Buttons As VbMsgBoxStyle, Optional ByVal Title As String, Optional ByVal HelpFile As String, Optional ByVal Context As Long, Optional ByVal ForeColor As ColorConstants = -1) As Long

Dim lReturn As Long

lHook = SetWindowsHookEx(WH_CALLWNDPROC, AddressOf HookWindow, App.hInstance, App.ThreadID)

'Set the Defaults

If Len(Title) = 0 Then Title = App.Title

lForecolor = GetSysColor(COLOR_BTNTEXT)

If ForeColor >= 0 Then lForecolor = ForeColor

'Show the Modified MsgBox

lReturn = MsgBox(Prompt, Buttons, Title, HelpFile, Context)

Call UnhookWindowsHookEx(lHook)

MsgBoxEx = lReturn

End Function

------------------------------------------------

方法非常复杂 建议你自己建立一个小窗口仿造它做一个

这个对话框是由 *** 作系统提供的,不是VB自身的(你可以发现其他软件中d出的对话框样式也是完全一样的),因此VB对其是没有控制权的。

你可以自己用窗体设计一个,这样你就可以任意设置它的样式。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/8018648.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-12
下一篇 2023-04-12

发表评论

登录后才能评论

评论列表(0条)

保存