关于窗体子类化

me4405801 2013-04-15 07:10:00
因为程序需要,我用WORD的VBA中插入了一个用户窗体USERFORM1,并且将该窗体子类化了。

但是程序运行后,窗体的标题栏似乎是一个“禁区”,无论在标题栏鼠标左击、右击,或者左击窗体右上角的关闭按钮,都会导致程序停止响应,包括WORD,我实在就迷茫了,不知道为什么,怎么解决?

跪求各位大神不吝赐教啊~!!~!


相关代码如下:
'在USERFORM1中
Private Sub UserForm_Click()
Unload UserForm1
End Sub

Private Sub UserForm_Initialize()
FrmHwnd = FindWindow(vbNullString, UserForm1.Caption)
lpPrevWndProc = SetWindowLong(FrmHwnd, GWL_WNDPROC, AddressOf WindowProcTest)

End Sub

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
SetWindowLong FrmHwnd, GWL_WNDPROC, lpPrevWndProc
End Sub

'在模块中
Public Const GWL_WNDPROC = -4

Public lpPrevWndProc As Long

Public FrmHwnd As Long

Public Declare Function SetWindowLong _
Lib "user32" _
Alias "SetWindowLongA" (ByVal hwnd As Long, _
ByVal nIndex As Long, _
ByVal dwNewLong As Long) As Long
Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long

Public 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
Public Function WindowProcTest(ByVal hwnd As Long, _
ByVal uMsg As Long, _
ByVal wParam As Long, _
ByVal lParam As Long) As Long


WindowProcTest = CallWindowProc(lpPrevWndProc, hwnd, uMsg, wParam, lParam)

End Function
...全文
162 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
modest4405801 2013-04-22
  • 打赏
  • 举报
回复
算了,还是我给一个解决方法吧,这个方法没有解决问题,而是逃避了问题,就是把窗体的标题栏隐藏。 具体代码如下,在窗体的Initialize事件中插入以下代码。(相应声明请自行补齐) Private Sub UserForm_Initialize() FrmHwnd = FindWindow(vbNullString, UserForm1.Caption) Dim FrmStl As Long FrmStl = GetWindowLong(FrmHwnd, GWL_STYLE) FrmStl = FrmStl - WS_CAPTION + WS_EX_TOOLWINDOW SetWindowLong FrmHwnd, GWL_STYLE, FrmStl DrawMenuBar FrmHwnd lpPrevWndProc = SetWindowLong(FrmHwnd, GWL_WNDPROC, AddressOf WindowProc) End Sub

2,462

社区成员

发帖
与我相关
我的任务
社区描述
VBA(Visual Basic for Applications)是Visual Basic的一种宏语言,是在其桌面应用程序中执行通用的自动化(OLE)任务的编程语言。
社区管理员
  • VBA
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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