日本国产亚洲-日本国产一区-日本国产一区二区三区-日本韩国欧美一区-日本韩国欧美在线-日本韩国欧美在线观看

當前位置:雨林木風下載站 > 技術(shù)開發(fā)教程 > 詳細頁面

偵測離開Form進入其他程式

偵測離開Form進入其他程式

更新時間:2022-05-13 文章作者:未知 信息來源:網(wǎng)絡(luò) 閱讀次數(shù):

雖然Form有Activate與DeActivate的Events,但是這兩個Events只對form的Focus是在  
同一個Process不同F(xiàn)orm之間的切換有效,如果我們在Form1,而Click其他的Process,  
則Form1并不會產(chǎn)生DeActivate的Events,相同的,由其他的Process 回到Form1時,也  
不會產(chǎn)生Activate的Events。唯一能得知的便是透過WM_ACTIVATE,其LowWord of wParam  
有以下叁個值:  
  WA_ACTIVE       Activated by some method other than a mouse click  
  WA_CLICKACTIVE  Activated by a mouse click.  
  WA_INACTIVE     Deactivated  
透過Subclassing的技巧便可來解決這個問題  

'以下在.bas  
Option Explicit  

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 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 Const GWL_WNDPROC = (-4)  
Public Const WM_ACTIVATE = &H6  
Public Const WA_ACTIVE = 1  
Public Const WA_CLICKACTIVE = 2  
Public Const WA_INACTIVE = 0  


Public preWinProc As Long  

Public Function wndproc(ByVal hwnd As Long, ByVal Msg As Long, _  
                         ByVal wParam As Long, ByVal lParam As Long) As Long  
Dim fActive As Integer  
If Msg = WM_ACTIVATE Then  
    '取得wParam的LowWord  
    fActive = CInt(wParam And &HFFFF)  
    If fActive = WA_INACTIVE Then  
       Debug.Print "InActive "  
    Else  
       Debug.Print "Active"  
    End If  
End If  
'將之送往原來的Window Procedure  
wndproc = CallWindowProc(preWinProc, hwnd, Msg, wParam, lParam)  
End Function  

'以下在form  
Option Explicit  
Private Sub Form_Activate()  
Debug.Print "Event Activate"  
End Sub  

Private Sub Form_Deactivate()  
Debug.Print "Event DeActivate"  
End Sub  

Private Sub Form_Load()  
Dim ret As Long  
'記錄原本的Window Procedure的位址  
preWinProc = GetWindowLong(Me.hwnd, GWL_WNDPROC)  
'設(shè)定Combo1的window Procedure到wndproc  
ret = SetWindowLong(Me.hwnd, GWL_WNDPROC, AddressOf wndproc)  
End Sub  

Private Sub Form_Unload(Cancel As Integer)  
Dim ret As Long  
'取消Message的截取,而使之又只送往原來的Window Procedure  
ret = SetWindowLong(Me.hwnd, GWL_WNDPROC, preWinProc)  
End Sub

溫馨提示:喜歡本站的話,請收藏一下本站!

本類教程下載

系統(tǒng)下載排行

主站蜘蛛池模板: 操操操综合 | 色综合社区| 亚洲精品国产专区91在线 | 日本在线视频一区二区三区 | 国产成人午夜91精品麻豆剧场 | 欧美高清在线视频一区二区 | 亚洲在线网站 | 99久久99久久免费精品小说 | 婷婷久久综合九色综合绿巨人 | 久久福利青草免费精品 | 特级按摩一级毛片 | 亚洲精品视频一区二区 | 伊人久久99亚洲精品久久频 | 久久精品综合免费观看 | 国产青青| 国产综合精品久久久久成人影 | 国产精品日本不卡一区二区 | 免费国产一级特黄久久 | 天天做天天爱天天做天天吃中 | 视频在线观看一区二区三区 | 久久久久综合国产 | 欧美人与物videos另类 | 欧美精品黄页免费高清在线 | 久久久久久国产视频 | 国产亚洲漂亮白嫩美女在线 | 亚洲国产综合在线 | 免费国产成高清人在线视频 | 亚洲国产剧情在线精品视 | 欧美成a人片免费看久久 | 国产一区二区三区在线影院 | 成人欧美日韩视频一区 | 欧美精品影院 | 亚洲免费区| 日韩欧美一区二区三区不卡 | 男女性高爱潮免费看 | 日本边吃奶边摸边做在线视频 | 国产视频在线观看免费 | 毛片高清视频在线看免费观看 | 日日狠狠久久偷偷四色综合免费 | 最新福利小视频在线播放 | 99在线精品免费视频 |