网上大多数类似下面写法:
LRESULT C**Dialog::OnNcHitTest(CPoint point)
{
UINT nHitTest = CDialog::OnNcHitTest(point);
if (m_canMove && nHitTest == HTCLIENT &&
::GetAsyncKeyState(MK_LBUTTON) < 0) // 如果鼠标左键按下,GetAsyncKeyState函数的返回值小于0
nHitTest = HTCAPTION;
return nHitTest;
}
这种做法的缺点是:会屏蔽很多鼠标事件,如双击,鼠标右键等等,很不好。
从http://zhhdesigner.blog.163.com/blog/static/130781963200992633622844/上看到一个有效解决上面的问题的做法:
简单实现:鼠标点击移动无标题窗口,添加代码如下:
void CXXXXXDlg::On
{
SendMessage(WM_NCLBUTTONDOWN,HTCAPTION,MAKELPARAM(point.x,point.y));//添加
PostMessage(WM_LBUTTONUP,NULL,MAKELPARAM(point.x,point.y));//添加
CDialog::On
}
添加上述两行即可。
其实个人已经不推崇用mfc写界面了,推荐用些成熟界面库。让专业的人做专业的事。