在windows中,如何使父窗口之外的子窗口始终处于活动状态(GetActiveWindow()return parent),就像组合框下拉窗口一样。
我认为这是尝试做到这一点的要点:
弹出窗口是一个顶级窗口,它与控件具有相同的父级。(即弹出窗口不是控件的子控件。它根本不是子窗口;它是顶级窗口,但没有厚窗口边框等,因此看起来不像普通的顶级窗口。)这就是它可以扩展到控件边界之外的原因。
当弹出窗口被创建时,它将使用ShowWindow(hwndpoppup,SW_SHOWNA)显示,这样它就不会占用输入焦点。这样可以防止父窗口变为非活动窗口。
创建弹出窗口时,可以使用SetCapture捕获鼠标。然后跟踪鼠标的位置,并在鼠标重叠时突出显示弹出窗口中的项目。单击鼠标按钮时,可以对鼠标下的任何内容执行操作(如果鼠标根本不在其上,则取消弹出窗口)。记住对WM_CAPTURECHANGED做出响应,以防其他东西捕获鼠标。当你完成的时候记得释放捕捉。
弹出窗口应通过返回MA_NOACTIVATEANDEAT来处理WM_MOUSEACTIVATE。