把一个 dialog 的 Title Bar 设置为false(没有标题栏,没有最大化最小化,关闭按钮)我如何去实现窗口的拖曳功能了
解决方案 »
- VC access 连接的相对路径
- 关于richedit,如何实现当按下回车时,richedit响应的却是shift+回车
- 怎样关闭其他已经打开的程序?
- help~!DAO数据库怎么打开多个不同的表~!~
- Win2003 Server上,调用ODBC函数出异常,1000分请高手帮忙。
- 考研好还是搞计算机技术好(续)????
- 如何在FormView中实现属性页呀!
- 请问有谁知道vc程序在脱离vc编译环境是需要哪些库才能运行?请告知!
- 如何能屏蔽鼠标的消息,而在我需要的时候发送呢?
- MFC线程中使用SendMessage导致几秒的未响应
- 一个关于头文件添加的基础问题
- vc2005对话框中视频处理的问题
{
CRect rc;
GetClientRect(&rc);
ClientToScreen(&rc);
return rc.PtInRect(pt) ? HTCAPTION : CDialog::OnNcHitTest(pt);
}
方法一:添加WM_NCHITTEST消息响应
UINT CXXXDialog::OnNcHitTest(CPoint point)
{
CRect rc;
GetClientRect(&rc);
CRect rcTitle(0,0,rc.Width(),TITLE_HEIGHT);//rcTitle为虚拟标题栏,即能通过鼠标拖动窗口
//的区域,高度为TITLE_HEIGHT
ClientToScreen(&rcTitle);
return rcTitle.PtInRect(point) ? HTCAPTION : CDialog::OnNcHitTest(point);
}
//方法二:添加WM_LBUTTONDOWN、WM_LBUTTONUP、WM_MOUSEMOVE消息响应移动窗口,大致如下
void CBTFDialog::OnMouseMove(CPoint point)
{
if (!m_bDragTitle)
{
return;
} int offleft = point.x - m_pointDown.x;
int offtop = point.y - m_pointDown.y; CRect wrc;
GetWindowRect(&wrc); wrc.OffsetRect(offleft, offtop);
MoveWindow(&wrc, TRUE );
}void CBTFDialog::OnLButtonDown(CPoint point)
{
if (point.y < 0 || point.y > TITLE_HEIGHT)
{
return;
}
m_bDragTitle = TRUE;
m_pointDown = point;
SetCapture();
}void CBTFDialog::OnLButtonUp(CPoint point)
{
if (!m_bDragTitle)
{
return;
}
m_bDragTitle = FALSE;
ReleaseCapture();
}
void CXXXDlg::OnLButtonDown(UINT nFlags, CPoint point)
{
PostMessage(WM_NCLBUTTONDOWN, HTCAPTION, MAKELPARAM(point.x, point.y));
CDialog::OnLButtonDown(nFlags, point);
}
加上一个OnNcHitTest()消息处理函数:
UINT CMainWnd::OnNcHitTest(CPoint point)
{
UINT nHitTest = CWnd::OnNcHitTest(point);
if(nHitTest == HTCLIENT)
nHitTest = HTCAPTION;
return nHitTest;
}