响应WM_NCHITTEST消息
ON_WM_NCHITTEST()UINT CMailDlg::OnNcHitTest(CPoint point)
{
// 非用户区移动窗口
UINT nHitTest = CDialog::OnNcHitTest(point);
return(nHitTest == HTCLIENT) ? HTCAPTION : nHitTest;
}
ON_WM_NCHITTEST()UINT CMailDlg::OnNcHitTest(CPoint point)
{
// 非用户区移动窗口
UINT nHitTest = CDialog::OnNcHitTest(point);
return(nHitTest == HTCLIENT) ? HTCAPTION : nHitTest;
}
其一,当用户在客户区域双击时,窗口将变成最大;
其二,它不适合于包含几个视窗的主框架窗口。
还有一种方法,当用户按下鼠标左键使主框架窗口认为鼠标在其窗口标题上,使用ClassWizard在视窗中处理WM_LBUTTODOWN信息并向主框架窗口发送一个WM_NCLBUTTONDOWN信息和一个单击测试HTCAPTION。
void CSampleView::OnLButtonDown(UINT nFlags, CPoint point)
{
CView::OnLButtonDown(nFlags, point);// Fool frame window into thinking someone clicked on
// its caption bar
GetParentFrame( )->PostMessage(WM_NCLBUTTONDOWN,
HTCAPTION,
MAKELPARAM(point.x, point.y));
}
该技术也适用于对话框和基于对话框的应用程序,只是不必调用CWnd::GetParentFrame( )。void CSampleDialog::OnLButtonDown(UINT nFlags, CPoint point)
{
CDialog::OnLButtonDown(nFlags, point);
// Fool dialog into thinking someone clicked on
// its caption bar
PostMessage(WM_NCLBUTTONDOWN,
HTCAPTION,
MAKELPARAM(point.x, point.y));
}