VC 无标题栏窗口移动

网上大多数类似下面写法:

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::OnLButtonDown(UINT nFlags,CPoint point)

{

      SendMessage(WM_NCLBUTTONDOWN,HTCAPTION,MAKELPARAM(point.x,point.y));//添加

      PostMessage(WM_LBUTTONUP,NULL,MAKELPARAM(point.x,point.y));//添加

 

      CDialog::OnLButtonDown(nFlags,point);

}

添加上述两行即可。

其实个人已经不推崇用mfc写界面了,推荐用些成熟界面库。让专业的人做专业的事。

你可能感兴趣的:(VC 无标题栏窗口移动)