代码之家  ›  专栏  ›  技术社区  ›  lovespring

组合框下拉窗口可以在组合框窗口之外显示,如何显示?

  •  3
  • lovespring  · 技术社区  · 15 年前

    在windows中,如何使父窗口之外的子窗口始终处于活动状态(GetActiveWindow()return parent),就像组合框下拉窗口一样。

    1 回复  |  直到 15 年前
        1
  •  1
  •   Leo Davidson    15 年前

    我认为这是尝试做到这一点的要点:

    • 弹出窗口是一个顶级窗口,它与控件具有相同的父级。(即弹出窗口不是控件的子控件。它根本不是子窗口;它是顶级窗口,但没有厚窗口边框等,因此看起来不像普通的顶级窗口。)这就是它可以扩展到控件边界之外的原因。

    • 当弹出窗口被创建时,它将使用ShowWindow(hwndpoppup,SW_SHOWNA)显示,这样它就不会占用输入焦点。这样可以防止父窗口变为非活动窗口。

    • 创建弹出窗口时,可以使用SetCapture捕获鼠标。然后跟踪鼠标的位置,并在鼠标重叠时突出显示弹出窗口中的项目。单击鼠标按钮时,可以对鼠标下的任何内容执行操作(如果鼠标根本不在其上,则取消弹出窗口)。记住对WM_CAPTURECHANGED做出响应,以防其他东西捕获鼠标。当你完成的时候记得释放捕捉。

    • 弹出窗口应通过返回MA_NOACTIVATEANDEAT来处理WM_MOUSEACTIVATE。

    推荐文章