*** *** dcappfocus.prg *** * 2006/09/16 10:11:05 * Visual FoxPro 09.00.0000.3504 for Windows *** based on Doug Hennig's article *** ---------------------------------- *** #include include\WinEvents.H DEFINE CLASS frmwinevents AS form Height = 214 Width = 494 ShowWindow = 2 Caption = "Windows Events Test" stevka="" noldproc = 0 nshnotify = 0 Name = "frmWinEvents" PROCEDURE Init * Declare the Windows API functions we'll use. declare integer GetWindowLong in Win32API ; integer hWnd, integer nIndex declare integer CallWindowProc in Win32API ; integer lpPrevWndFunc, integer hWnd, integer Msg, integer wParam, ; integer lParam * Get a handle for the VFP Windows event handler. This.nOldProc = GetWindowLong(_screen.hWnd, GWL_WNDPROC) * Bind to the Windows events we're interested in. bindevent(_vfp.hWnd, WM_ACTIVATE, This, 'HandleEvents') ENDPROC ******************************* PROCEDURE Destroy * Unregister us from receiving shell events, unbind all events from our * window and _vfp, and redisplay VFP. with This unbindevents(_vfp.hWnd) endwith ENDPROC ******************************* PROCEDURE HandleWindowsMessage lparameters hWnd, ; Msg, ; wParam, ; lParam local lnResult lnResult = CallWindowProc(This.nOldProc, hWnd, Msg, wParam, lParam) return lnResult ENDPROC ******************************* PROCEDURE HandleEvents lparameters hWnd, ; Msg, ; wParam, ; lParam local lcCaption, ; lnParm, ; lcPath do case * Handle an activate or deactivate event. case Msg = WM_ACTIVATE do case * Handle a deactivate event. case wParam = WA_INACTIVE this.stevka=_cliptext _cliptext="" * Handle an activate event (task switch or clicking on the title bar). case wParam = WA_ACTIVE IF !EMPTY(_cliptext) ELSE _cliptext=this.stevka endif * Handle an activate event (clicking in the client area of the window). case wParam = WA_CLICKACTIVE IF !EMPTY(_cliptext) ELSE _cliptext=this.stevka endif endcase ENDCASE *-- this plays the role of dodefault(): return This.HandleWindowsMessage(hWnd, Msg, wParam, lParam) ENDPROC ENDDEFINE *