【问题标题】:Prevent frame to go under the taskbar防止框架进入任务栏下方
【发布时间】:2015-01-05 06:11:33
【问题描述】:

我有带有自定义免费图像且没有边框的框架,可以捕获和控制,例如关闭、最小化和最大化。在代码中,我捕获拖动事件并根据新的鼠标坐标移动框架。

当我在任务栏下拖动框架时,我遇到了问题。这一举动无论如何都不会阻止(但标准窗口我不能进入任务栏下无法访问的区域,但我的框架可以)。有没有办法捕捉这种情况并防止光标在任务栏下向下移动?顺便说一句,我可以粘在屏幕边缘吗?

这里是拖拽代码:

void MainFrame::OnMouseLeftDown(wxMouseEvent& event)
{
    CaptureMouse();

    wxPoint pos = ClientToScreen(event.GetPosition());
    wxPoint origin = GetPosition();

    int dx = pos.x - origin.x;
    int dy = pos.y - origin.y;

    m_PosDelta = wxPoint(dx, dy);
}

void MainFrame::OnMouseMove(wxMouseEvent& event)
{
    if (event.Dragging() && event.LeftIsDown())
    {
        wxPoint pos = ClientToScreen(event.GetPosition());
        Move(wxPoint(pos.x - m_PosDelta.x, pos.y - m_PosDelta.y));
    }
}

void MainFrame::OnMouseLeftUp(wxMouseEvent& event)
{
    if (HasCapture()) ReleaseMouse();
}

【问题讨论】:

    标签: c++ windows-7 wxwidgets


    【解决方案1】:

    您需要使用wxDisplay::GetFromPoint() 确定您当前所在的显示器,然后使用wxDisplay::GetClientArea() 找到其上窗口位置的边界并对其进行调整,以使窗口完全适合客户区。

    【讨论】:

    • 谢谢!但我想像标准窗口一样移动我的框架 - 我可以不受限制地左右移动窗口(我的框架默认情况下是这样工作的)并且我不能将 CURSOR 移动到屏幕底部的任务栏上方
    • 或任务栏所在的位置(顶部或左侧或右侧)
    • 因为窗口管理器 (shell) 已经在内部执行此操作。由于您不使用它的大小调整代码,您必须自己做,这里没有魔法。
    • 我完全糊涂了。你能从原始帖子中改进我的代码以实现本机窗口行为吗?我真的很感激,因为我找不到工作代码的例子,而且我自己也做不到
    猜你喜欢
    • 2018-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-28
    • 1970-01-01
    • 2021-06-27
    相关资源
    最近更新 更多