原理:
在WM_HITTEST对应的消息处理函数OnNcHitTest中直接返回TRUE, 或者返回客户区的值HTCLIENT,欺骗系统我点的位置是客户区,客户区默认是不能拖动动话框的
例子:
UINT CMyDlg::OnNcHitTest(CPoint point)
{
// TODO: Add your message handler code here and/or call default
return HTCLIENT;
//return CDialog::OnNcHitTest(point);
}
以上做法是可以禁止拖动对话框,但是随之而来的是连最大化,最小化,关闭这些按钮都被忽略了,所有系统按钮菜单都用不了了。
解决办法,需要判断当前HITTEST的位置,如果是系统按钮,菜单,就返回正常值,否则一律返回HTCLIENT
LRESULT CMyDlg::OnNcHitTest(CPoint point){
// TODO: 在此添加消息处理程序代码和/或调用默认值
LRESULT lResult= CDialog::OnNcHitTest(point);
BOOL bIngor = FALSE;
switch(lResult)
{
case HTNOWHERE :
break;
case HTCLIENT :
break;
case HTCAPTION :
break;
case HTSYSMENU :
bIngor = TRUE;
break;
case HTGROWBOX :
break;
case HTMENU :
bIngor = TRUE;
case HTHSCROLL :
break;
case HTVSCROLL :
break;
case HTMINBUTTON :
bIngor = TRUE;
break;
case HTMAXBUTTON :
bIngor = TRUE;
break;
case HTLEFT :
break;
case HTRIGHT :
break;
case HTTOP :
break;
case HTTOPLEFT :
break;
case HTTOPRIGHT :
break;
case HTBOTTOM :
break;
case HTBOTTOMLEFT :
break;
case HTBOTTOMRIGHT :
break;
case HTBORDER :
break;
case HTOBJECT :
break;
case HTCLOSE :
bIngor = TRUE;
break;
case HTHELP :
break;
}
if (!bIngor)
{
lResult = HTCLIENT;
}
return lResult;
//return CDialog::OnNcHitTest(point);
//}
}
298

被折叠的 条评论
为什么被折叠?



