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

标签 windows user-interface gdi+ gdi winapi

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

最佳答案

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

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

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

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

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

关于windows - 组合框下拉窗口可以显示在组合框窗口之外,如何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4312612/

相关文章:

c++ - 模拟后从映射的驱动器号获取 UNC 路径

c# - 在 Windows 窗体上拖动时调整矩形大小

c# - Image.Save(..) 抛出 GDI+ 异常

windows - 如何在 Windows 中锁定屏幕?

html - 溢出时 Cordova WebView 渲染失败

python - 在没有 conda 的 Windows 上 pip install fbprophet

c++ - giuliani framework做拖拽功能

java - 不能引用非最终变量

android - 关于Android上的UI编程

api - GDI+如何查询像素