组合框下拉窗口可以显示超出组合框窗口,怎么样?

时间:2010-11-30 10:23:50

标签: windows user-interface gdi+ gdi winapi

在Windows中,如何在父窗口之外创建一个“子”窗口,并且父窗口始终处于活动状态(GetActiveWindow()返回父窗口),就像组合框下拉窗口一样。

1 个答案:

答案 0 :(得分:1)

我认为这些是尝试这样做的要点:

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

  • 创建弹出窗口时,会使用ShowWindow(hWndPopup,SW_SHOWNA)显示弹出窗口,以便它不会占用输入焦点。这可以防止父窗口变为非活动状态。

  • 创建弹出窗口时,使用SetCapture捕获鼠标。然后,您可以跟踪鼠标的位置,并在鼠标与其重叠时突出显示弹出窗口中的项目。单击鼠标按钮时,您可以对鼠标下的任何内容进行操作(如果鼠标根本没有,则取消弹出窗口)。请记住响应WM_CAPTURECHANGED,以防其他东西捕获鼠标。完成后请记住ReleaseCapture。

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