有个顶级窗口A,他有两个子窗口b和c,当前状态是c(是个列表(listview类)的窗口)获得输入焦点,当发消息wm_setfocus给b后,b中的光标在闪烁,但是不能输入东西,除非按下tab键切换一下输入焦点。wm_setfocus为什么不能真正切换输入焦点呢?

解决方案 »

  1.   

    b 窗口已经是活动窗口了吗?
    在设置焦点前,或许要formb.show 一下.
      

  2.   

    wm_setfocus是用于通知应用程序已经获得或者失去焦点,而不是用于设置窗口的焦点!
    The WM_SETFOCUS message is sent to a window after it has gained the keyboard focus. 你想设置窗口的焦点应该使用
    VB的,Form.SetFocus
    API的 SetFocus
      

  3.   

    SetActiveWindow
    The SetActiveWindow function activates a window. The window must be associated with the calling thread's message queue. HWND SetActiveWindow(
      HWND hWnd   // handle to window to activate
    );
     
      

  4.   

    我搞定了
    设置子窗口获得焦点用下面两行代码即可,
                 SetForegroundWindow DizhilanWnd    ’这一句即可获得焦点,并可以输入文字
               PostMessage DizhilanWnd, EM_SETSEL, 0, -1  ‘全选里面的文本而用setfocus函数不行,我已经试验过了,只是光标在里面闪烁,却不能输入文字还是谢谢大家了。