答案 0 :(得分:1)
我认为这些是尝试这样做的要点:
弹出窗口是顶级窗口,与控件具有相同的父级。 (即弹出窗口不是控件的子窗口。它根本不是子窗口;它是顶层窗口,但没有厚窗口边框等,所以它看起来不像普通的顶层窗口级别窗口。)这就是它可以扩展到控件边界之外的原因。
创建弹出窗口时,会使用ShowWindow(hWndPopup,SW_SHOWNA)显示弹出窗口,以便它不会占用输入焦点。这可以防止父窗口变为非活动状态。
创建弹出窗口时,使用SetCapture捕获鼠标。然后,您可以跟踪鼠标的位置,并在鼠标与其重叠时突出显示弹出窗口中的项目。单击鼠标按钮时,您可以对鼠标下的任何内容进行操作(如果鼠标根本没有,则取消弹出窗口)。请记住响应WM_CAPTURECHANGED,以防其他东西捕获鼠标。完成后请记住ReleaseCapture。
弹出窗口应该通过返回MA_NOACTIVATEANDEAT来处理WM_MOUSEACTIVATE。