`
dqifa
  • 浏览: 116978 次
社区版块
存档分类
最新评论

如何实现一个可拖动的无标题栏窗口

阅读更多

无标题栏窗口的实现很简单。先将窗口从wxMiniFrame继承,然后在窗口的构造函数中设置一下窗口的样式。

MainFrame::MainFrame(const wxPoint& pos, const wxSize& size)
   : wxMiniFrame(NULL, wxID_ANY, wxEmptyString, pos, size)
{
    SetWindowStyleFlag(wxFRAME_NO_TASKBAR | wxNO_BORDER);
}

 

但是,窗口的移动通常都是通过鼠标点住标题栏拖动窗口来实现的,那么现在没有了标题栏,该如何移动窗口呢?我们知道,当鼠标拖动窗口时,它在窗口中的位置是始终不变的。所以如果能够在鼠标移动过程中,通过改变窗口在桌面上的坐标,并且始终保持鼠标相对于窗口的坐标不变,即可实现鼠标的拖动效果。

在具体的设计中,先在鼠标的MouseDown事件中记录下鼠标相对于窗口的偏移,在鼠标的MouseMove事件中根据鼠标在桌面上的位置实时设置窗口的位置,即可达到鼠标拖动窗口的操作。利用此方法实现鼠标拖动,与常规的标题栏鼠标拖动在效果上有一点区别。通过标题栏拖动时,鼠标移动过程中不重画窗口,只有松开鼠标后才在固定位置重画窗口,因此其速度较快。而采用本方法的拖动过程中,每移动一步都需要重画窗口,因此对速度稍有影响,在慢一些的机器上可能会出现轻微的拖尾现象。

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

 

void MainFrame::OnMouseLeftDown(wxMouseEvent& event)
{
    CaptureMouse();
    wxPoint pt = ClientToScreen(event.GetPosition());
    wxPoint origin = GetPosition();
    int dx = pt.x - origin.x;
    int dy = pt.y - origin.y;
    m_delta = wxPoint(dx, dy);
}

 

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

 

 

from:http://hi.baidu.com/zshua_404/blog/item/e73dea0baefdda1895ca6ba2.html

分享到:
评论

相关推荐

    qt 无边框无标题栏可拖动窗口的实现

    总的来说,创建一个无边框、无标题栏且可拖动的Qt窗口涉及到窗口属性的设置、鼠标事件的处理以及可能的额外功能实现。通过理解这些基本概念和技巧,你可以根据项目需求定制出各种风格独特的用户界面。

    Labview 无标题栏鼠标拖动窗口

    在这个特定的案例中,我们关注的是在LabVIEW程序中实现无标题栏窗口的鼠标拖动功能。通常,带有标题栏的Windows应用程序可以通过点击并拖动标题栏来移动窗口。然而,当LabVIEW界面设计为无标题栏时,这种默认的移动...

    用鼠标拖动无标题栏HTML对话框窗口

    对于一个没有标题栏的对话框来说,实现鼠标拖动功能变得稍微复杂一些,因为传统的通过标题栏拖动的方式不再适用。在这种情况下,我们需要捕获鼠标的左键按下事件,并且在该事件发生时模拟一个系统级别的消息,告诉...

    拖动没有标题栏的窗口

    通过分析和运行这个代码,可以更好地理解拖动无标题栏窗口的实现细节。 总的来说,"拖动没有标题栏的窗口"这一技术涉及到Windows操作系统底层的消息处理、窗口样式设置、以及图形绘制。开发者需要对Windows API有...

    C#实现拖动无标题栏的窗体

    在C#编程中,创建一个没有标题栏但仍然可以被用户拖动的窗体是一个常见的需求,这通常用于实现自定义界面或者为了提供更简洁的用户体验。本篇将详细讲解如何利用API函数来实现这一功能。 首先,我们需要了解API调用...

    qt无标题栏无边框 拖动 改变窗体大小完美实现

    在Qt框架下,创建一个没有标题栏和边框的窗口是一项常见的需求,这通常用于自定义界面设计或者创建更简洁的用户体验。这个“qt无标题栏无边框 拖动 改变窗体大小完美实现”的主题涉及到几个关键的技术点,我们将详细...

    VC 无标题栏窗口的拖动实现.rar

    这个例子展示了如何在VC++中实现无标题栏窗口的拖动,使得用户可以通过鼠标在窗口顶部或者其他自定义区域按住并移动来改变窗口的位置。这种方法适用于那些需要自定义界面的程序,可以提供更灵活的设计空间。同时,这...

    delphi无标题栏窗口的拖动

    delphi无标题栏窗口的拖动 一般情况下,移动一个窗体需要将鼠标放置在标题栏上才能拖动窗体,为什么非要使用标题栏呢?其实我们可以使用一个巧妙的方法来实现将鼠标放置在窗体上按下就可拖动窗体

    无标题栏窗口

    总之,实现无标题栏窗口需要对Windows API有深入的理解,包括窗口类、消息处理和窗口样式。C++提供了直接调用Windows API的能力,使得开发者可以自定义用户界面,实现特定的需求。在设计这样的窗口时,需要注意用户...

    VB实现无标题栏靠拖动窗体移动窗体源码

    在VB(Visual Basic)编程中,创建一个没有标题栏的窗口可以使应用程序看起来更加简洁和现代。然而,没有标题栏的窗口通常无法通过标准的方式进行移动,因为用户通常依赖标题栏来拖动窗体。为了解决这个问题,我们...

    BCB中无标题栏可拖动的窗口的四种方法

    在BCB(Borland C++ Builder)中创建一个无标题栏且可拖动的窗口,可以通过多种方式实现。第一种方法是通过消息接收的方式。具体做法是在窗体的头文件中定义一个新的消息处理器`WMNCHitTest`: ```cpp // 在 TForm1...

    拖动无标题窗口的软件源码

    在IT领域,特别是编程与软件开发中,"拖动无标题窗口的软件源码"这一主题涉及了如何在没有标准标题栏的情况下实现窗口的移动功能。这种技术在创建自定义界面或特殊应用时非常有用,因为传统的窗口管理控件可能不满足...

    C#演示拖动无标题栏的窗体.zip

    总之,C#中的窗体拖动无标题栏是一个涉及窗体样式设置和鼠标事件处理的编程任务。通过设置窗体样式来移除标题栏,然后编写代码处理鼠标事件,实现用户可以通过鼠标拖动窗体的功能。通过这样的实践,可以提升你在C#...

    C#无标题栏拖动及调整窗口大小

    2. **无标题栏窗口大小调整**: - 想要在没有系统默认边框的情况下调整窗口大小,我们需要手动实现这一功能。这通常通过在窗体边缘绘制可点击的区域来实现。 - 可以在Paint事件中绘制代表边框的线条,并在鼠标Down...

    不用标题栏就可实现Delphi窗口拖动..rar

    标题栏通常包含了窗口的最小化、最大化和关闭按钮,以及窗口标题,但如果我们想要一个简洁的界面设计或者有特殊的需求,就可能需要自己实现窗口拖动的功能。本文将详细讲解如何在Delphi中实现这种功能。 首先,我们...

    VC++移动无标题栏窗口

    在无标题栏窗口中,程序可能定义了一个名为`DragMoveDlg`的函数或类,用于处理鼠标消息,实现窗口的拖动功能。这个函数会在鼠标按下时记录当前窗口位置,然后在鼠标移动时计算新的窗口位置并更新。 7. **客户区**:...

    计算机软件-商业源码-实例126 鼠标拖动无标题栏窗口.zip

    在计算机软件开发中,尤其是涉及到用户界面(UI)设计时,如何实现无标题栏窗口的鼠标拖动功能是一项常见的需求。这个"实例126 鼠标拖动无标题栏窗口.zip"压缩包文件提供了一个商业源码示例,用于帮助开发者理解和...

    QWidget无标题窗口,可随意缩放拖动

    本文将深入探讨如何使用C++和Qt库创建一个无标题、可自由缩放和拖动的窗口。 首先,让我们了解`QWidget`。`QWidget`是所有Qt界面对象的基类,它可以是一个简单的窗口,也可以是复杂用户界面的一部分,如按钮、...

    拖动没有标题栏的对话框

    在Windows操作系统中,通常对话框会有一个明显的标题栏,用户可以通过点击并拖动标题栏来移动对话框的位置。然而,有些对话框或者自定义窗口可能为了界面设计的简洁或者特殊功能的需求,会省略标题栏。这就需要通过...

Global site tag (gtag.js) - Google Analytics