您的位置:程序门 -> vb -> 基础类



在窗体变成不是当前窗体时,怎么不发生deactivate()或lostfocus()事件


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


在窗体变成不是当前窗体时,怎么不发生deactivate()或lostfocus()事件
发表于:2007-03-28 15:49:34 楼主
当当前窗体变为不是当前窗体时,激发了窗体的什么事件?
当窗体变为当前窗体时,又激发了窗体的什么事件呢?

谢谢!
发表于:2007-03-28 16:06:371楼 得分:0
deactivate
activate
发表于:2007-03-28 16:14:202楼 得分:0
老兄,这个不行,这个只是在同一应用程序的多窗体却换时才发生的
发表于:2007-03-28 16:24:033楼 得分:0
应用程序间切换,vb不管,若需要,你可自已拦截wm_activateapp消息
发表于:2007-03-28 16:34:524楼 得分:0
回复   homezj(小吉)  

能否详细一点呢?对拦截不了解啊
发表于:2007-03-28 16:39:175楼 得分:0
你百度一下setwindowhookex
发表于:2007-03-28 16:46:316楼 得分:0
找到个如下的,但有问题,程序运行时动不了,出现错误:“缺少对象”

    hook      
    public       declare       function       setwindowlong       lib       "user32 "       alias       "setwindowlonga "       (byval       hwnd       as       long,       byval       nindex       as       long,       byval       dwnewlong       as       long)       as       long      
    public       const       wm_activate       =       &h6      
    public       const       gwl_wndproc       =       (-4)      

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

    form_load时      
    prevwndproc       =       setwindowlong(me.hwnd,       gwl_wndproc,       addressof       wndproc)      
       
    form_unload时      
    setwindowlong       me.hwnd,       gwl_wndproc,       prevwndproc      
       
       
    public       function       wndproc(byval       hwnd       as       long,       byval       msg       as       long,       byval       wparam       as       long,       byval       lparam       as       long)       as       long      
                    wndproc       =       callwindowproc(prevwndproc,       hwnd,       msg,       wparam,       lparam)      
                    if       msg       =       wm_activate       then      
                                    if       wparam       =       0       then      
                                                    mainform.caption       =       "失去焦点 "      
                                    else      
                                                    maiform.caption       =       "得到焦点 "      
                                    end       if      
                    end       if      
    end       function

不知哪里出错了,或是大家有没有其他的更好解决方法?
发表于:2007-03-28 18:13:207楼 得分:0
到底是maiform还是mainform呀?这么粗心,怎么写代码?

还有wm_activate消息的wparam不是这样处理的,loword才是激活常数,hiword是最小化标志!

获取应用程序的切换,需处理wm_activateapp消息,不是wm_activate


快速检索

最新资讯
热门点击