禁止对话框的拖动

 原理:

  在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);
 //}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值