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