关于无标题栏窗口拖动的问题

要使无标题栏窗口实现拖动效果,除了处理OnNCHitTest()函数外;就是在OnLButtonDown()函数中发送虚假消息了。

但是,这儿得注意一下,在OnLButtonDown()函数中如果使用SetCapture()函数后再::SendMessage(m_hWnd,
WM_NCLBUTTONDOWN, HTCAPTION, 0);是不会成功的!必须去掉或在之后使用。

void XWindow::OnLButtonDown(UINT nFlags, CPoint point)

{

XControl* pControl = NULL;

int nSize = m_pChild.size();

for(int i=0; i<nSize; i++)

{

pControl = m_pChild.at(i);

if(pControl->OnHitTest(point))

{

m_pFocusControl = pControl;

break;

}

pControl = NULL;

}

if(NULL != pControl)

{

// 捕获鼠标,即使鼠标移至窗口外部仍能收到WM_LBUTTONUP消息

SetCapture();

m_pFocusControl->OnLButtonDown(nFlags, point);

}

else

{

::SendMessage(m_hWnd, WM_NCLBUTTONDOWN, HTCAPTION, 0);

}

XFrame::OnLButtonDown(nFlags, point);

}

关于无标题栏窗口拖动的问题,码迷,mamicode.com

时间: 2024-10-23 13:19:19

关于无标题栏窗口拖动的问题的相关文章

MFC中无标题栏窗口的移动

原文链接: http://blog.sina.com.cn/s/blog_6288219501015dwa.html 移动标准窗口是通过用鼠标单击窗口标题条来实现的,但对于没有标题条的窗口,就需要用鼠标单击窗口标题条以外区域来移动窗口.有两种方法可以达到这一目标. 方法一:当窗口确定鼠标位置时,Windows向窗口发送WM_NCHITTEST消息,可以处理该消息,使得只要鼠标在窗口内,Windows便认为鼠标在标题条上.这需要重载CWnd类处理WM_NCHITTEST消息的OnNcHitTest

winform无边框窗口拖动

无边框的窗口想拖动,只需要在置顶的容器上添加对应的mousedown 和 mousemove 事件就可以实现了.代码如下: 1 //拖动窗口 2 private Point mPoint = new Point(); 3 4 private void panel1_MouseDown(object sender, MouseEventArgs e) 5 { 6 mPoint.X = e.X; 7 mPoint.Y = e.Y; 8 } 9 10 private void panel1_Mouse

QT_无边框窗口拖动缩放

public: int countFlag(QPoint p, int row); void setCursorType(int flag); int countRow(QPoint p); protected: void mousePressEvent(QMouseEvent *event); void mouseReleaseEvent(QMouseEvent *event); void mouseDoubleClickEvent(QMouseEvent *event); void mous

WTL中最简单的实现窗口拖动的方法(转)

目前,很多基于对话框的应用程序中对话框都是不带框架的,也就是说对话框没有标题栏.众所周知,窗口的移动都是通过鼠标拖动窗口的标题栏来实现的,那么现在应用程序中的对话框没有了标题栏,用户如何移动对话框呢?本实例针对这个问题提出解决的办法. 一.实现方法 解决无标题栏窗口的拖动问题有两种方案,一种方案是使用常规思路来处理鼠标拖拽事件,当窗口获得WM_LBUTTONDOWN(OnLButtonDown)时,通过设置标志并调用CWnd::SetCapture()函数来让当前窗口捕捉鼠标消息,应用程序进入移

141107●Winform拖动无边框窗口、播放音频、启动外部exe程序

鼠标拖动无边框窗口 1. //鼠标拖动 Point downpoint = new Point(); //事件,鼠标按下,获取当前坐标 private void panel1_MouseDown(object sender, MouseEventArgs e) { downpoint.X = -e.X; downpoint.Y = -e.Y; } //事件,鼠标移动,赋值新坐标 private void panel1_MouseMove(object sender, MouseEventArgs

【Qt编程】无边框窗口的拖动

在上一篇文章中,我们讲述了如何进行无边框窗口的缩放与拖动,而在一些情况下,我们的窗口只需要进行拖动也不需要改变其大小,比如:QQ的登录窗口.本来在上一篇文章中已经讲述了如何进行窗口的拖动,但是却与窗口的缩放相关的程序放在一起,下面专门单独分离出来. 窗口的拖放只涉及到鼠标事件:按下操作.释放操作和移动操作,因此只需要重写这三个函数.由于程序比较简单,并且注释也比较详细,就不作过多介绍.新建一个基类为QWidget的Qt Gui应用程序,只需修改widget.h和widget.cpp文件如下: 1

【Qt编程】无边框窗口的缩放与拖动

在现在,绝大多数软件都向着简洁,时尚发展.就拿有道的单词本和我做的单词本来说,绝大多数用户肯定喜欢我所做的单词本(就单单界面,关于颜色搭配和布局问题,大家就不要在意了). 有道的单词本: 我所做的单词本: 很明显,两者的主要区别就是周围的边框问题.你可以对比QQ以前的版本和这几年的版本,就会发现都倾向于下面这种窗口模式.下面我们就说说如何用Qt实现无边框窗口的缩放与拖动. 对于无边框窗口的拖动其实很简单,其基本思想是,在鼠标移动前后记录鼠标的坐标,然后将窗口移动这两个坐标之差的距离即可,具体实现

MFC无标题栏对话框移动的处理方法

很多时候,为了界面的美观,我们会隐藏标题栏,而在客户区通过自绘模拟标题栏.但是这样处理,会导致窗体无法移动.下面提供几种移动方法: 1.采用欺骗的方式.即当鼠标点击客户区的时候,我们欺骗windows,让windows认为我们点击在了标题栏,这样,拖动过程就通过windows进行处理了.因此可以大大减少我们的代码量.具体方法如下: 响应鼠标左键按下消息WM_LBUTTONDOWN,相应函数中,直接发送欺骗消息: PostMessage(WM_NCLBUTTONDOWN, HTCAPTION, M

MFC小知识一:将对话框设置为无边框无标题栏初始最大化样式

今天公司新开始的一个项目.界面模式为无边框无标题栏初始最大化样式.其实本来可以直接在属性里面将默认的Resizing换成none就可以了,那么我想如何用代码来实现呢?于是就百度了一下.找到了两种方式,但其实两种方式思想是一样的.即修改样式--ModifyStyle.直接将以下代码加在OnInitDialog()即可实现. 第一种: 1 // 去掉标题栏 2 ModifyStyle(WS_CAPTION, 0); 3 // 去掉边框 4 ModifyStyleEx(WS_EX_DLGMODALFR