從微軟的站點看到一個簡單的方法實現,不必計算RECT,不必處理鼠標消息的細節和窗口繪制,就能輕松實現沒有標題欄的窗口移動的問題,就是使用OnNcHitTest消息。
手工增加該消息映射:
用classwizard是無法增加該消息的,在BEGIN_MESSAGE_MAP中加入消息ON_WM_NCHITTEST(),然後在頭文件中加入
afx_msg UINT OnNcHitTest(CPoint point);
在實現文件中,加入LBUTTONDOWN消息函數
void CClyzDlg::OnLButtonDown(UINT nFlags, CPoint point)
{
CTranDialog::OnLButtonDown(nFlags, point);//把CTranDialog改成你的基類
PostMessage( WM_NCLBUTTONDOWN, HTCAPTION, MAKELPARAM( point.x, point.y));
}
加入NCHITTEST消息函數
UINT CClyzDlg::OnNcHitTest(CPoint point)
{
UINT nHitTest = CTranDialog::OnNcHitTest( point );//把CTranDialog改成你的基類
return (nHitTest == HTCLIENT) ? HTCAPTION : nHitTest;
}
編譯運行,沒有出錯就完成了,前後不到十行代碼。
我用基於對話框的應用程序,在vc6.0,winnt4.0下編譯,運行良好。