level 1
请问有人会拦截当用户用鼠标操作窗体的边框和标题栏的消息吗?就是当用户点击标题栏、按下鼠标并移动窗体、操作边框调整窗体大小时的这此操作?
2006年07月28日 06点07分
1
level 1
大家应该知道,当一个窗体被用户激活时,系统将此窗体放到所有非顶层窗口的最上面,并重画窗体上的标题栏和边框,画完了后才会发出WM_PAINT的消息重画用户区域,而此消息是可以消息处理函数中拦截并有权决定是否要画用户区域,但在这之前的如激活窗体、将窗体放到所有非顶层窗口的最上面、重画窗体的标题栏和边框这些动作又如何拦截并决定是否要画呢?我们能不能决定和操作这些消息呢?
2006年07月28日 07点07分
2
level 1
WM_PAINT消息当然可以,但窗体重画标题栏的动作可以拦截吗?应该拦截什么消息?您帖出来让大家学学
2006年07月28日 11点07分
4
level 1
试试用WINAPI能不能截取消息;SetWindowLong GetWindowLongCallWindowProc'将窗体的WndProc函数换成自己的WndProc函数;'然后在里面截取想要的消息;PreWinProc = GetWindowLong(hwnd, GWL_WNDPROC)ret = SetWindowLong(hwnd, GWL_WNDPROC, AddressOf WndProc)'====================================================='自定的WinProc函数:Private Function WndProc(ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long Dim lp As taLong, i2 As t2Int' WriteData Msg'这里筛选你所需要的消息; Select Case Msg Case WM_HOTKEY: MsgBox "WM_HOTKEY" Case WM_COMMAND: MsgBox "WM_COMMAND" Case WM_MOVE: MsgBox "WM_MOVE" Case WM_MOUSEMOVE: MsgBox "WM_MOUSEMOVE" End Select'没有处理的消息就传给原来的窗口函数 WndProc = CallWindowProc(PreWinProc, hwnd, Msg, wParam, lParam)End Function
2006年07月28日 11点07分
5
level 1
具体拦截什么消息我不太清楚;你可以查看MSDN;或看看apiview里有没有定义这样的消息常量;
2006年07月28日 11点07分
6
level 1
还有一种方法就是用局部Hook也可以做到;上面的代码只是利用Api来调用窗口的回调函数来实现截取消息的;
2006年07月28日 11点07分
7
level 1
您帖的我知道啊,但不知道拦截哪个消息来阻止标题栏的重画
2006年07月28日 11点07分
8