• MFC无边框的窗体实现用鼠标拖动窗体边缘实现窗体大小变化
无边框窗体如何实现用鼠标拖动窗体边缘实现窗体大小变动呢？下面介绍一种方法，通过以下几个步骤即可实现：
1.实现WM_NCHITTEST消息，实现四条边框的模拟
2.实现WM_NCLBUTTONDOWN，发送窗体拖曳变化的消息

具体阐述如下：
1.实现WM_NCHITTEST消息，实现四条边框的模拟
参考代码如下：
LRESULT CNoBorderWndChangeSizeDlg::OnNcHitTest(CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
CRect rect;
GetWindowRect(&rect);
CRect rect1 = rect;
rect1.DeflateRect(10, 10, -10, -10);
rect1.NormalizeRect();
if (point.x <= rect.left+3)
return HTLEFT;
else if (point.x >= rect.right-3)
return HTRIGHT;
else if (point.y <= rect.top+3)
return HTTOP;
else if (point.y >= rect.bottom-3)
return HTBOTTOM;
else if (point.x <= rect.left+10 && point.y <= rect.top+10)
return HTTOPLEFT;
else if (point.x >= rect.right-10 && point.y <= rect.top+10)
return HTTOPRIGHT;
else if (point.x <= rect.left+10 && point.y >= rect.bottom-10)
return HTBOTTOMLEFT;
else if (point.x >= rect.right-10 && point.y >= rect.bottom-10)
return HTBOTTOMRIGHT;
else if (!rect.IsRectEmpty())
{
LRESULT uRet = CWnd::OnNcHitTest(point);
uRet = (uRet == HTCLIENT) ? HTCAPTION : uRet;
return uRet;
}
else
{
return CWnd::OnNcHitTest(point);
}
return 0;
}

2.实现WM_NCLBUTTONDOWN，发送窗体拖曳变化的消息
void CNoBorderWndChangeSizeDlg::OnNcLButtonDown(UINT nHitTest, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
if (nHitTest == HTTOP)
{
SendMessage( WM_SYSCOMMAND, SC_SIZE | WMSZ_TOP, MAKELPARAM(point.x, point.y));
}
else if (nHitTest == HTBOTTOM)
SendMessage( WM_SYSCOMMAND, SC_SIZE | WMSZ_BOTTOM, MAKELPARAM(point.x, point.y));
else if (nHitTest == HTLEFT)
SendMessage( WM_SYSCOMMAND, SC_SIZE | WMSZ_LEFT, MAKELPARAM(point.x, point.y));
else if (nHitTest == HTRIGHT)
SendMessage( WM_SYSCOMMAND, SC_SIZE | WMSZ_RIGHT, MAKELPARAM(point.x, point.y));
else if (nHitTest == HTTOPLEFT)
SendMessage( WM_SYSCOMMAND, SC_SIZE | WMSZ_TOPLEFT, MAKELPARAM(point.x, point.y));
else if (nHitTest == HTTOPRIGHT)
SendMessage( WM_SYSCOMMAND, SC_SIZE | WMSZ_TOPRIGHT, MAKELPARAM(point.x, point.y));
else if (nHitTest == HTBOTTOMLEFT)
SendMessage( WM_SYSCOMMAND, SC_SIZE | WMSZ_BOTTOMLEFT, MAKELPARAM(point.x, point.y));
else if (nHitTest == HTBOTTOMRIGHT)
SendMessage(WM_SYSCOMMAND, SC_SIZE | WMSZ_BOTTOMRIGHT, MAKELPARAM(point.x, point.y));
else if (nHitTest==HTCAPTION)
SendMessage(WM_SYSCOMMAND, SC_MOVE | 4, MAKELPARAM(point.x, point.y));
}
通常，使用上述的代码即可实现要求。

我们进行一下扩展。在窗体大小发生变化时，有两种表现形式：一种是出现虚线框，一种没有。这个选择依赖于操作系统，你可以右击桌面/属性/外观/效果中通过选择或取消“拖动时显示窗口内容”来表现这两种形式。那么如何在程序中实现而不依赖于当前机器的设置呢（这里的意思是不依赖手动选择“拖动时显示窗口内容”项），我们可以在OnNcLButtonDown函数中通过加入如下的代码实现:
if(nHitTest == HTTOP)
{
SystemParametersInfo(SPI_SETDRAGFULLWINDOWS, TRUE, NULL, 0);
SendMessage(WM_SYSCOMMAND, SC_SIZE | WMSZ_TOP, MAKELPARAM(point.x, point.y));
SystemParametersInfo(SPI_SETDRAGFULLWINDOWS, FALSE, NULL, 0);
}
这段代码意思是在拖动上边缘动作之前，设置“拖动时显示窗口内容”，当该动作结束后，恢复原来的设置。当然，更好的做法是你首先获取机器当前的选项是什么，函数依旧是SystemParametersInfo，只是选项变化，具体查看MSDN即可。
（文章中的有些代码参考了网上的代码，整理的匆忙，忘记出处了，再找时候有很多地方都有该代码，也不知道源头是哪里，请原作者见谅）
展开全文
• 无边框窗体如何实现用鼠标拖动窗体边缘实现窗体大小变动呢？下面介绍一种方法，通过以下几个步骤即可实现： 1.实现WM_NCHITTEST消息，实现四条边框的模拟 2.实现WM_NCLBUTTONDOWN，发送窗体拖曳变化的消息 具体...
无边框窗体如何实现用鼠标拖动窗体边缘实现窗体大小变动呢？下面介绍一种方法，通过以下几个步骤即可实现：
1.实现WM_NCHITTEST消息，实现四条边框的模拟
2.实现WM_NCLBUTTONDOWN，发送窗体拖曳变化的消息
具体阐述如下：
1.实现WM_NCHITTEST消息，实现四条边框的模拟
参考代码如下：

LRESULT CUserForm::OnNcHitTest(CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
CRect rect;
GetWindowRect(&rect);
CRect rect1 = rect;
rect1.DeflateRect(10, 10, -10, -10);//缩小矩形
rect1.NormalizeRect();//规范化矩形确保非0或负
if (point.x <= rect.left+3)
return HTLEFT;
else if (point.x >= rect.right-3)
return HTRIGHT;
else if (point.y <= rect.top+3)
return HTTOP;
else if (point.y >= rect.bottom-3)
return HTBOTTOM;
else if (point.x <= rect.left+10 && point.y <= rect.top+10)
return HTTOPLEFT;
else if (point.x >= rect.right-10 && point.y <= rect.top+10)
return HTTOPRIGHT;
else if (point.x <= rect.left+10 && point.y >= rect.bottom-10)
return HTBOTTOMLEFT;
else if (point.x >= rect.right-10 && point.y >= rect.bottom-10)
return HTBOTTOMRIGHT;
else if (!rect.IsRectEmpty())
{
LRESULT uRet = CWnd::OnNcHitTest(point);
uRet = (uRet == HTCLIENT) ? HTCAPTION : uRet;//客户区转换成非客户区
return uRet;
}
else
{
return CWnd::OnNcHitTest(point);
}
return 0;
}

2.实现WM_NCLBUTTONDOWN，发送窗体拖曳变化的消息

void CUserForm::OnNcLButtonDown(UINT nHitTest, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
if (nHitTest == HTTOP)
{
SendMessage( WM_SYSCOMMAND, SC_SIZE | WMSZ_TOP, MAKELPARAM(point.x, point.y));
}
else if (nHitTest == HTBOTTOM)
SendMessage( WM_SYSCOMMAND, SC_SIZE | WMSZ_BOTTOM, MAKELPARAM(point.x, point.y));
else if (nHitTest == HTLEFT)
SendMessage( WM_SYSCOMMAND, SC_SIZE | WMSZ_LEFT, MAKELPARAM(point.x, point.y));
else if (nHitTest == HTRIGHT)
SendMessage( WM_SYSCOMMAND, SC_SIZE | WMSZ_RIGHT, MAKELPARAM(point.x, point.y));
else if (nHitTest == HTTOPLEFT)
SendMessage( WM_SYSCOMMAND, SC_SIZE | WMSZ_TOPLEFT, MAKELPARAM(point.x, point.y));
else if (nHitTest == HTTOPRIGHT)
SendMessage( WM_SYSCOMMAND, SC_SIZE | WMSZ_TOPRIGHT, MAKELPARAM(point.x, point.y));
else if (nHitTest == HTBOTTOMLEFT)
SendMessage( WM_SYSCOMMAND, SC_SIZE | WMSZ_BOTTOMLEFT, MAKELPARAM(point.x, point.y));
else if (nHitTest == HTBOTTOMRIGHT)
SendMessage(WM_SYSCOMMAND, SC_SIZE | WMSZ_BOTTOMRIGHT, MAKELPARAM(point.x, point.y));
else if (nHitTest==HTCAPTION)
SendMessage(WM_SYSCOMMAND, SC_MOVE | 4, MAKELPARAM(point.x, point.y));
}

通常，使用上述的代码即可实现要求。
我们进行一下扩展。在窗体大小发生变化时，有两种表现形式：一种是出现虚线框，一种没有。这个选择依赖于操作系统，你可以右击桌面/属性/外观/效果中通过选择或取消“拖动时显示窗口内容”来表现这两种形式。那么如何在程序中实现而不依赖于当前机器的设置呢

if(nHitTest == HTTOP)
{
SystemParametersInfo(SPI_SETDRAGFULLWINDOWS, TRUE, NULL, 0);
SendMessage(WM_SYSCOMMAND, SC_SIZE | WMSZ_TOP, MAKELPARAM(point.x, point.y));
SystemParametersInfo(SPI_SETDRAGFULLWINDOWS, FALSE, NULL, 0);
}

WM_SYSCOMMAND

当用户从窗口菜单选择一个命令或当用户选择最大化按钮，最小化按钮，复原按钮或关闭按钮时，一个窗口将会接收该消息
Syntax
WM_SYSCOMMAND
WPARAM wParam
LPARAM lParam;

参数
wParam
指定系统命令的类型。该参数可以是下列值之一：
SC_CLOSE
关闭窗口
SC_CONTEXTHELP
将光标改为一个问题标识样式。如果用户之后点击了对话框中的一个控件，该控件会收到一个WM_HELP消息。
SC_DEFAULT
当用户双击窗口菜单时，选择默认的条目。
SC_HOTKEY
以应用程序指定的热键激活窗口。lParam参数标识了所要激活的窗口。
SC_HSCROLL
水平滚动。
键盘的敲击返回窗口菜单。
SC_MAXIMIZE
最大化窗口
SC_MINIMIZE
最小化窗口
SC_MONITORPOWER
设置显示状态。该命令支持具有节电特性的设备，如电池供电的个人电脑。
lParam参数可以具有下列值：
-1 - 显示设备打开
1 - 显示设备将要进入节电模式。
2 - 显示设备将要被关闭
鼠标单击返回窗口菜单。
SC_MOVE
移动窗口
SC_NEXTWINDOW
移到下一个窗口
SC_PREVWINDOW
移到前一个窗口
SC_RESTORE
将窗口复原到原始的位置和大小。
SC_SCREENSAVE
执行System.ini文件里[boot]部分指定的屏幕保护程序。
SC_SIZE
改变窗口大小。
激活【开始】菜单。
SC_VSCROLL
垂直滚动。
lParam
如果一个窗口命令被鼠标选中，低位字指定光标的水平位置。否则该参数不被使用。
如果一个窗口命令被鼠标选中，高位字指定光标的垂直位置。如果使用系统加速键选择的命令，则该参数为-1，如果使用助记符的话，则该参数为0.
返回值
如果成功处理该消息，则返回值为0.
备注
获得屏幕坐标系下的位置坐标，可以使用下面的代码：
xPos = GET_X_LPARAM(lParam); // horizontal position
yPos = GET_Y_LPARAM(lParam); // vertical position

参考文章：http://blog.csdn.net/zjtchow/article/details/6122320
参考文章：http://baike.baidu.com/link?url=mwSXzuAO5-zjQ7Oyhgr8WfVNGsEkIdLCNJtdlHxd32JXRj_JydBjcIEq3vy-kUw3mZ8aa9c6W6ESwk-xmgX0t_
展开全文
• C#210鼠标拖动窗体，源代码
• 1.鼠标在客户区拖动窗口 重载消息函数 procedure WMNCHitTest(var Message: TWMNCHitTest); message WM_NCHITTEST; procedure TForm1.WMNCHitTest(var Message: TWMNCHitTest); begin inherited; //不可缺少 if (=...
1.鼠标在客户区拖动窗口  重载消息函数 procedure WMNCHitTest(var Message: TWMNCHitTest); message WM_NCHITTEST;  procedure TForm1.WMNCHitTest(var Message: TWMNCHitTest);  begin    inherited;  //不可缺少    if (=Message.Result = HTCLIENT) then      Message.Result := HTCAPTION;  end; 2.鼠标在 Panel 上拖动窗口  在 Panel 的 OnMouseMove 事件中写入下代码：  procedure TForm1.Panel1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);  begin    ReleaseCapture;    SendMessage(Self.Handle, WM_SYSCOMMAND, SC_MOVE + 1, 0);  end;
转载于:https://www.cnblogs.com/spiritofcloud/p/3978330.html
展开全文
• 简单方法实现用鼠标拖动无标题栏HTML类对话框
• MS office 用鼠标拖动窗口时卡顿的问题 这个问题一直有人反馈，可是微软并没有承认这个问题。而网上的解决方法有如下： 独显启动office，提高渲染效率。治标不治本。 降低鼠标的回报率。买了一个好鼠标，为了一...
MS office 用鼠标拖动窗口时卡顿的问题

这个问题一直有人反馈，可是微软并没有承认这个问题。而网上的解决方法有如下：

用独显启动office，提高渲染效率。治标不治本。
降低鼠标的回报率。买了一个好鼠标，为了一个office，降低鼠标的性能，得不偿失。
windows设置拖动窗口时不显示内容。同样，为了一个应用降低整体使用体验。

我的解决办法在我自己身上有用。
在设置里找到office，点修改。

然后点快速修复。

一两分钟就能修复好。然后有明显改善。
个人觉得如果没用的话，可以尝试一下联机修复。


展开全文
• C#鼠标拖动窗体代码
• C# 程序启动后 鼠标拖动窗体控件源码 可用来实现动态布局窗体等。
• 首先，在程序.Designer.cs中添加以下两句：   this.MouseDown += new System.Windows.Forms.MouseEventHandler(Form1_MouseDown); this.MouseMove += new System.Windows.Forms.MouseEventHandler(Form1_...
• 其实只需用鼠标拖动窗体的客户区就可以了。方法一　以下是完成上述功能最普通的方法：在窗体的private声明部分加入以下过程声明：　procedure WMNCHitTest(var Msg:TWMNCHitTest);message WM_NCHITTEST;　然后在...
• 可以使用鼠标拖动窗口内组件的位置，也可以使用键盘的上、下、左、右键移动窗口内组件的位置.
• 我是想做QQ登录界面，去了边框加了splitContainer分成了上下两部分，要做到鼠标拖动窗口
• 1、无标题栏，自定义边框，可以根据需要修改，做的简单； 2、像QQ面板一样，需要时...3、可以拖动修改大小，拖动移动位置； 4、2种效果比较，demo_02是最终效果，有点小问题，就是左、上拉伸时，右、下有点小小的抖动；
• 摘要:VC/C++源码,数据库应用,窗体拖动　WindowKiller：鼠标拖动指定窗体，并向其PostMessage发送WM_CLOSE消息将其关闭。运行于VC++.net环境的源代码。
• 用鼠标拖动一个窗口，鼠标已经显示到一个位置了，但是窗口还没到那个位置，会缓慢的飘过去，请问解决方法
• c++应用程序，实现用鼠标拖动方式在窗口中画自由曲线，在鼠标拖动画线过程中，当光标设置为十字形。
• /* 鼠标拖动窗口 */ void mouseMoveEvent(QMouseEvent *event); void mousePressEvent(QMouseEvent *event); /* 记录窗口当前的位置 */ QPoint StartPos;  .cpp 文件内： voi...
• 主要介绍了C#实现Winform鼠标拖动窗口大小时设定窗口最小尺寸的方法,涉及WinForm改变窗口大小时动态判断当前窗口尺寸的相关技巧,非常简单实用,需要的朋友可以参考下
• labview程序，通过使用winAPI函数GetMessagePos，在无标题栏的情况下使用鼠标拖动，移动窗口位置。
• 窗体移动 privatePointmouseOffset;privateboolisMouseDown=false;privatevoidForm1_MouseDown(objectsender,MouseEventArgse){intyOffset,xOffset;if...
• QT自定义Widget实现鼠标拖动窗口移动位置及鼠标拖拽窗口边缘窗口大小改变 通过setWindowFlags(Qt::FramelessWindowHint);可以隐藏掉Qt自带的窗口...如果我既想自定义窗体，也想要让自定义的窗体，兼具鼠标拖动窗口移动
• //// 利用Windows 的 API 函数：SendMessage 和 ReleaseCapture //const uint WM_SYSCOMMAND = 0x0112; //const uint SC_MOVE = 0xF010; //const uint HTCAPTION = 0x0002; //[Dl...

...