对话框客户区实现拖动

参考文章:http://tech.sina.com.cn/s/2006-07-25/09051053460.shtml

响应WM_NCHITTEST消息

函数实现如下:

//////////////////
// Non-client hit-test handler to move window by its client area.
// If the user clicks anywhere on the client area, pretend it's the
// caption. Windows does the rest!
UINT CMyDialog::OnNcHitTest(CPoint pt)
{
 CRect rc;
 GetClientRect(&rc);
 ClientToScreen(&rc);
 return rc.PtInRect(pt) ? HTCAPTION : CDialog::OnNcHitTest(pt);
}

时间: 2024-07-30 13:52:10

对话框客户区实现拖动的相关文章

用C#实现在客户区拖动窗体

当你设计一个应用程序时,或许你希望用户能够通过客户区来拖动窗体,比如:当窗体没有标题栏或创建的是不规则的窗体时,就只有通过客户区来拖动窗体了. 一个发生在我们身边很好的例子就是Microsoft Windows Media Player.Media Player有项功能是根据用户的爱好可以随意换掉外观(换肤),这个时候标题栏就隐藏了,但是你能够通过客户区来拖动窗体. 好了,言归正传,开始我们的旅程吧 首先必须了解Windows的消息传递机制,当有鼠标活动消息时,系统发送WM_NCHITTEST

再谈客户区对话框拖动操作

<无标题对话框的拖动>,示范了如何用鼠标点击窗口或对话框背景(即客户区)进行拖动操作,文章中提供的解决方法在没有上下文菜单的情况下运行很正常,一旦有上下文菜单时,文中所提供的方法便显现出了缺陷--上下文菜单无法显示出来.本文将针对这个问题对前一篇提出的方法进行改进. 当初实现拖动的基本思路是改写 OnNcHitTest 例程,让鼠标在客户区中的点击始终返回 HTCAPTION 而不是 HTCLIENT,从而诱使 Windows 实现拖动操作.没想到这样做使上下文菜单的操作出现了混乱,原因是如果

VS2010 VB.net Splitter 在拖动的时候会在客户区留下一条竖线,是条阴影坚线

问题描述 问题如题目,拖动时会留下一条坚的阴影线. 解决方案 解决方案二:拖动完留下的还是拖动的时候有?解决方案三:有阴影不是挺好的?难不成你想搞成透明的解决方案四:拖动过后留下的,想去掉这条线,各位前辈有什么好的办法?解决方案五:没有人能回答这个问题吗?解决方案六:应该是客户区重绘的问题

mfc-MFC怎么将客户区变成非客户区

问题描述 MFC怎么将客户区变成非客户区 我用BCG库的停靠窗口在顶部创建了一个窗口,然后隐藏了原来的标题栏,菜单和工具栏,然后我想让在顶部的那个停靠窗口成为新的标题栏形势的非客户区,请问该怎么做,OnNCHitTest改写没用 解决方案 请详细描述你的问题呢.... 解决方案二: 你创建的是什么窗口?CDockablePane?

VC 窗体非客户区的绘制

VC 窗体非客户区的绘制 OnNcPaint(UINT message, WPARAM wParam, LPARAM lParam) . void CSkinAndLangDlg::OnNcPaint(UINT message, WPARAM wParam, LPARAM lParam) { HDC WindowDC = ::GetWindowDC(m_hWnd); // //取得整个窗体矩形 RECT WindowRect; GetWindowRect(&WindowRect); Offset

Delphi中把窗体客户区图像保存到文件或剪切板

unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; Button2: TButton; Button3: TButton; procedure Button1Click(Sender: TObject); procedu

轻松实现非客户区按钮

一.简介 有时我们需要在非客户区(例如:标题栏)添加按钮,并对按钮作出响应,如下图所示: 为此我封装了两个类CNCButton和CNCButtonManager,CNCButton主要用于按钮绘制,CNCButtonManager用于按钮的管理并对非客户区的消息进行处理.如下是几个主要的非客户区消息: WM_NCHITTEST WM_NCACTIVATE WM_NCPAINT

如何按非客户区移动窗体

看到一介绍如何按非客户区移动窗体,既重载WM_NCHITTEST,返回HTCAPTION.但我认为有一点不妥就是没有了鼠标右键功能.这里我介绍一种方法,即可已在客户区移动窗体又可以实现鼠标右键功能. 1.新建一工程DLG.采用默认设置. 2.添加消息处理函数: void CDlgDlg::OnLButtonDown(UINT nFlags, CPoint point) { PostMessage(WM_NCLBUTTONDOWN,HTCAPTION,MAKELPARAM(point.x,poin

wpf 能不能直接在非客户区绘图

问题描述 如题,非客户区,除了Hook,能不能通过drawvisual绘制?还有,现在我用了Hook,用c++写的,用了双缓冲,BitBlt直接拷贝的,但是调整窗体大小时会闪烁,换成gdiplus会好很多,调整过于平凡也会偶尔闪烁.还有没有别的解决办法? 解决方案 解决方案二:非客户区难不成不是值的标题栏?边框?