谈无标题窗口的拖放

来源(中国DotNet俱乐部)

From: http://www.chinaaspx.com/archive/VC/22119.htm

从微软的站点看到一个简单的方法实现,不必计算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下编译,运行良好。

Link: http://www.asm32.net/article_details.aspx?id=481


浏览次数 314 发布时间 2006/4/29 15:58:56 从属分类 VC++ 【评论】【 】【打印】【关闭
 
| www.asm32.net | 2006版 | 资料中心 | linux | asm/asm32 | C/C++ | VC++ | java | Python | 书签 | ASP.Net书签 | 京ICP备09029108号-1