MFC 对话框拖动

随风—— 2012-05-11 09:07:36
//CHN 设置对话框可拖动
LRESULT CMainKeyboardDlg::OnNcHitTest(CPoint point)
{
CDialogEx::OnNcHitTest(point);
return HTCAPTION;
}
我用这个函数设置的对话框拖动,请问高手一下我怎么处理可以让对话框不能拖动到屏幕之外去(包括上下左右)四个方向。
谢谢
...全文
274 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
随风—— 2012-05-11
  • 打赏
  • 举报
回复
呵呵谢谢,用你的方式解决了 不过你的不是有点点不问题,处理放的位置不对
我把我的贴出来
OnMoving(UINT fwSide, LPRECT pRect)
{
//CHN 鼠标移动时确定对话框在屏幕内
//CHN 取得对话框的客户区大小
CRect rctDlgClient;
GetWindowRect(&rctDlgClient);
int nWidth = rctDlgClient.Width();
int nHight = rctDlgClient.Height();
////CHN 取得屏幕大小
HWND hWnd;
CRect screenRect;
hWnd = ::GetDesktopWindow();
::GetClientRect(hWnd, &screenRect);
//CHN 左边
if (pRect->left <= screenRect.left)
{
pRect->left = screenRect.left;
pRect->right = pRect->left+ nWidth;
}
//CHN 上边
if (pRect->top <= 0)
{
pRect->top = screenRect.top;
pRect->bottom = pRect->top + nHight;
}
//CHN 右边
if (pRect->right >= screenRect.right)
{
pRect->right = screenRect.right;
pRect->left = pRect->right - nWidth;
}
//CHN 下边
if (pRect->bottom >= screenRect.bottom)
{
pRect->bottom = screenRect.bottom;
pRect->top = pRect->bottom - nHight;
}
CDialogEx::OnMoving(fwSide, pRect);
}
[Quote=引用 6 楼 的回复:]

抱歉,没看清楚,想当然了
C/C++ code

void Ctest2Dlg::OnMoving(UINT fwSide, LPRECT pRect)
{
CDialog::OnMoving(fwSide, pRect);

CRect rect;
GetWindowRect(&rect);
int nWith = rect.Width();
……
[/Quote]
dahaiI0 2012-05-11
  • 打赏
  • 举报
回复
抱歉,没看清楚,想当然了

void Ctest2Dlg::OnMoving(UINT fwSide, LPRECT pRect)
{
CDialog::OnMoving(fwSide, pRect);

CRect rect;
GetWindowRect(&rect);
int nWith = rect.Width();
if (rect.left<0)
{
pRect->left = 0;
pRect->right = pRect->left+nWith;
}
// TODO: 在此处添加消息处理程序代码
}
这是一部分代码,不让窗口拖出左边范畴,上下右,稍微加点代码就可以
wtbike 2012-05-11
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

你这个处理不正确,Point是在鼠标按下时的坐标,是判断能不能拖动而非要鼠标移动时坐标引用 2 楼 的回复:

GetSystemMetrics获取屏幕的宽和高,point是屏幕坐标,直接判断这个点是否在屏幕内,如果不在就别返回HTCAPTION
[/Quote]
这个思路的话,只需要再加一点计算就可以了.
鼠标点与对话框边框的距离是可以计算的,在移动对话框的时候,判断鼠标点与屏幕边界的距离,保证鼠标点与对话框边框的距离不大于鼠标点与屏幕边界的距离就可以了.四个方向都做一下判断.
笨笨仔 2012-05-11
  • 打赏
  • 举报
回复
设置对话框为子窗口,则永远跑不出主窗口的范围。
随风—— 2012-05-11
  • 打赏
  • 举报
回复
你这个处理不正确,Point是在鼠标按下时的坐标,是判断能不能拖动而非要鼠标移动时坐标[Quote=引用 2 楼 的回复:]

GetSystemMetrics获取屏幕的宽和高,point是屏幕坐标,直接判断这个点是否在屏幕内,如果不在就别返回HTCAPTION
[/Quote]
dahaiI0 2012-05-11
  • 打赏
  • 举报
回复
GetSystemMetrics获取屏幕的宽和高,point是屏幕坐标,直接判断这个点是否在屏幕内,如果不在就别返回HTCAPTION
ouyh12345 2012-05-11
  • 打赏
  • 举报
回复
自己判断边界条件

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧