请问日期控件那个日期选择窗口是如何做到用鼠标点其它任何位置的时候,就会隐藏起来。我用hook鼠标单击的事件,可以实现点我那个用户控件所在的窗口时自己隐藏,但点任务栏切换窗口时或其它程序的窗体时没有隐藏。应如何实现?
系统的DTPicker和那个ComboBox的下拉框都可以实现这样的功能。

解决方案 »

  1.   

    DTPicker和ComboBox使用的不一样的技术,区别在于 DTPicker 的日期选择窗口可以获取焦点。
    要实现 DTPicker 的这种效果要比 ComboBox 容易得多,可以用一个窗体来模拟下拉窗口,然后处理该窗体的 WM_ACTIVATE 消息即可,WM_ACTIVATE 消息的 wParam 参数低位表示是获得焦点还是丢失焦点。 如:frmDropDown.show     ' 显示下拉窗口' 子类处理窗口消息
    SetWindowLong frmDropDown.hWnd,GWL_WNDPROC,Addressof WndProc' 窗口函数
    public function WndProc(byval hWnd as long,byval msg as long,byval wParam as long,byval lParam as long) as long
       
       select case msg
          case WM_ACTIVATE 
              if LoWord(wParam) = WA_INACTIVE then    ' 丢失焦点,隐藏下拉窗口
                  frmDropDown.hide
              end if
       end select
       
       WndProc = CallOriginalWndProc(hWnd,msg,wParam,lParam)
       
    end function
      

  2.   

    不是很明白你的意思
    “我用hook鼠标单击的事件,可以实现点我那个用户控件所在的窗口时自己隐藏,但点任务栏切换窗口时或其它程序的窗体时没有隐藏。应如何实现?”
    这是你现在自己只能实现到这一步
    还是你所要的功能是你这一步的东西 
      

  3.   

    我的方法可以完全模拟DTPicker的效果