鼠标点击vb窗体的标题栏触发什么事件

yu3350360 2010-03-30 02:30:40
鼠标点击标题栏的时候,调用一个函数
如何实现?
...全文
702 19 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
yu3350360 2010-04-01
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 bestbadgod 的回复:]
引用 14 楼 zgklem 的回复:
O(∩_∩)O哈哈~,算了,也许她弄错了吧!

问一下,你的那个msg=161,msg=164从哪儿弄到的?有没有参考资料分享?

自己试出来的。
[/Quote]
我也是帮别人的,呵呵。
我的那个朋友也问我,怎么没有查到这方面的资料。这回有答案了
倒大霉的上帝 2010-04-01
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 zgklem 的回复:]
O(∩_∩)O哈哈~,算了,也许她弄错了吧!

问一下,你的那个msg=161,msg=164从哪儿弄到的?有没有参考资料分享?
[/Quote]
自己试出来的。
yu3350360 2010-04-01
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 bestbadgod 的回复:]
引用 14 楼 zgklem 的回复:
O(∩_∩)O哈哈~,算了,也许她弄错了吧!

问一下,你的那个msg=161,msg=164从哪儿弄到的?有没有参考资料分享?

自己试出来的。
[/Quote]
'怎么没有去我新发的帖子里,踩一下啊:)

鼠标点击vb窗体的标题栏触发什么事件(补偿分数的,其他勿扰) [VB 基础类] 40 yu3350360


yu3350360 2010-03-31
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 bestbadgod 的回复:]
下面代码放在窗体中,窗体名称为Form1

VB code

Option Explicit
Private Sub Form_Load()
prevWndProc = GetWindowLong(Me.hwnd, GWL_WNDPROC)
SetWindowLong Me.hwnd, GWL_WNDPROC, AddressOf WndProc
End Sub
……
[/Quote]
用鼠标右键控制,并且窗体没有最大最小化和关闭按钮,该怎么实现呢?
yu3350360 2010-03-31
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 bestbadgod 的回复:]
引用 12 楼 yu3350360 的回复:
引用 11 楼 bestbadgod 的回复:
想右键点击标题栏后执行自己的函数,需要吃掉系统的弹出菜单功能。

thanks a lot

忙了半天分全跑别人口袋了。
[/Quote]
真的不好意思 是弄错了 太着急了
我在发个帖子,关注一下吧 :)
zgklem 2010-03-31
  • 打赏
  • 举报
回复
子处理这个消息就可以了!WM_NCRBUTTONDOWN

The WM_NCRBUTTONDOWN message is posted when the user presses the right mouse button while the cursor is within the nonclient area of a window. This message is posted to the window that contains the cursor. If a window has captured the mouse, this message is not posted.
zgklem 2010-03-31
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 bestbadgod 的回复:]
引用 12 楼 yu3350360 的回复:
引用 11 楼 bestbadgod 的回复:
想右键点击标题栏后执行自己的函数,需要吃掉系统的弹出菜单功能。

thanks a lot

忙了半天分全跑别人口袋了。
[/Quote]
O(∩_∩)O哈哈~,算了,也许她弄错了吧!

问一下,你的那个msg=161,msg=164从哪儿弄到的?有没有参考资料分享?
倒大霉的上帝 2010-03-31
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 yu3350360 的回复:]
引用 11 楼 bestbadgod 的回复:
想右键点击标题栏后执行自己的函数,需要吃掉系统的弹出菜单功能。

thanks a lot
[/Quote]
忙了半天分全跑别人口袋了。
yu3350360 2010-03-31
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 bestbadgod 的回复:]
想右键点击标题栏后执行自己的函数,需要吃掉系统的弹出菜单功能。
[/Quote]
thanks a lot
倒大霉的上帝 2010-03-31
  • 打赏
  • 举报
回复
想右键点击标题栏后执行自己的函数,需要吃掉系统的弹出菜单功能。
倒大霉的上帝 2010-03-31
  • 打赏
  • 举报
回复
模块中的代码:

Option Explicit

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 SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Public Const GWL_WNDPROC = (-4)
Public prevWndProc As Long '窗口程序地址

Public Function WndProc(ByVal hwnd As Long, ByVal msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
On Error GoTo ms:

If wParam = 2 And msg = 161 Then 'msg=161 鼠标单击 wParam:2 鼠标在标题栏上;8鼠标在最小化按钮上 9鼠标在最大化阿牛上 20 鼠标在关闭按钮上。
ClickFunction msg, wParam
Else
If msg = 164 Then
Call RightClick(msg, wParam)
Else
WndProc = CallWindowProc(prevWndProc, hwnd, msg, wParam, lParam)
End If

End If

Exit Function
ms:
MsgBox Err.Source & "-" & Err.Description
End Function

Public Function ClickFunction(ByVal msg As Long, ByVal l As Long)
Form1.Print "左键点击了标题栏,msg值为:" & msg & " wParam值为:" & l
End Function
Public Function RightClick(ByVal msg As Long, ByVal para As Long)
Form1.Print "点击了右键,Msg值为:" & msg & " wParam值为:" & para
End Function
倒大霉的上帝 2010-03-31
  • 打赏
  • 举报
回复
右键点击标题栏,系统已经默认弹出菜单。不过也可以去试试插入执行一个函数。
至于没有最大化和最小化按钮,则有2种方法选择
1:使着三个按钮都变灰 不可用即可。
2:使用图片覆盖住这三个按钮。(换皮肤就是这么干的,拿图片覆盖住。)
yu3350360 2010-03-31
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 yu3350360 的回复:]
引用 1 楼 bestbadgod 的回复:
下面代码放在窗体中,窗体名称为Form1

VB code

Option Explicit
Private Sub Form_Load()
prevWndProc = GetWindowLong(Me.hwnd, GWL_WNDPROC)
SetWindowLong Me.hwnd, GWL_WNDPROC, AddressOf Wn……
用鼠标右键控制,并且窗体没有最大最小化和关闭按钮,该怎么实现呢?
[/Quote]
顶一下哎。。。
makerj 2010-03-30
  • 打赏
  • 举报
回复
正好学习。顶!
贝隆 2010-03-30
  • 打赏
  • 举报
回复
UPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUP
小泽zz 2010-03-30
  • 打赏
  • 举报
回复
Mark
yu3350360 2010-03-30
  • 打赏
  • 举报
回复
谢谢咯。。。
threenewbee 2010-03-30
  • 打赏
  • 举报
回复
subclass WM_NCHITTEST消息即可。
倒大霉的上帝 2010-03-30
  • 打赏
  • 举报
回复
下面代码放在窗体中,窗体名称为Form1

Option Explicit
Private Sub Form_Load()
prevWndProc = GetWindowLong(Me.hwnd, GWL_WNDPROC)
SetWindowLong Me.hwnd, GWL_WNDPROC, AddressOf WndProc
End Sub

Private Sub Form_Unload(Cancel As Integer)
SetWindowLong Me.hwnd, GWL_WNDPROC, prevWndProc
End Sub


下面代码放在模块中

Option Explicit

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 SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Public Const GWL_WNDPROC = (-4)
Public prevWndProc As Long '窗口程序地址

Public Function WndProc(ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
On Error GoTo ms:

If wParam = 2 And Msg = 161 Then 'msg=161 鼠标单击 wParam:2 鼠标在标题栏上;8鼠标在最小化按钮上 9鼠标在最大化阿牛上 20 鼠标在关闭按钮上。
ClickFunction (wParam)
Else
WndProc = CallWindowProc(prevWndProc, hwnd, Msg, wParam, lParam)
End If

Exit Function
ms:
MsgBox Err.Source & "-" & Err.Description
End Function

Public Function ClickFunction(ByVal l As Long) '所要调用的函数。
Form1.Print "点击了标题栏:" & l
End Function


然后点击鼠标试试。

7,785

社区成员

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

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