MFC非模态对话框移动后控件变形问题

ziyue007 2013-05-15 11:12:41
MFC窗体中创建非模态子窗体,设置对话框粘连
CRect rect;
this->GetWindowRect(&rect);
rect.OffsetRect(rect.Width(), 0);
pt->MoveWindow(rect, true);//pt是已经声明的子窗体对象
pt->ShowWindow(SW_SHOW);

移动主窗体的时候OnWindowPosChanging(WINDOWPOS* lpwndpos)
添加
CRect rect;
this->GetWindowRect(&rect);
rect.OffsetRect(rect.Width(), 0);
pt->MoveWindow(rect, true);

这样做移动主窗体,子窗体也会跟着移动;移动子窗体后自动返回原来的位置再粘连上

但是:
1、在别人的机子上这个子窗体以后动不会再返回原位置粘连到主窗体上,不明白为啥?
2、移动子窗体太快了,子窗体中的控件就会变形(所有的控件都往右移动了,出现半边空白在子窗体的左边),我在OnInitDialog()里加上::UpdateWindow(this->m_hWnd)也不管用,应该怎么做才好?


以上这两个问题求大侠给出主意,关键是在我的电脑上不会出现这样的问题,别人的机子有的会出这样的问题,有的不会

求大侠帮忙给点建议,解决立马给分,在线等............
...全文
519 20 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
向立天 2013-07-01
  • 打赏
  • 举报
回复
您好 我是本版版主 此帖已多日无人关注 请您及时结帖 如您认为问题没有解决可按无满意结帖处理 另外本版设置了疑难问题汇总帖 并已在版面置顶 相关规定其帖子中有说明 您可以根据规定提交您帖子的链接 如您目前不想结帖只需回帖说明 我们会删除此结帖通知 见此回复三日内无回应 我们将强制结帖 相关规定详见界面界面版关于版主结帖工作的具体办法
q308865427 2013-05-16
  • 打赏
  • 举报
回复
子窗口中 如果 WM_WINDOWPOSCHANGED 中添加 CRect rect; GetWindowRect( rect ) ; CRect parentRect ; GetParent->GetWindowRect( parentRect ); MoveWindow( parentRect.right , parentRect.bottom ,rect.Width() , rect.Height() ) ; 不需要去掉标题栏 , 效果一样
q308865427 2013-05-16
  • 打赏
  • 举报
回复
我觉得这样用更好一点 去掉标题,贴一个假标题 子窗口 WM_LBUTTONDOWN 中添加 //实现对话框跟随鼠标移动 ::SendMessage (GetSafeHwnd(), WM_SYSCOMMAND, SC_MOVE + HTCAPTION, 0); WM_MOUSEMOVE 中 添加 CRect rect; GetWindowRect( rect ) ; CRect parentRect ; GetParent->GetWindowRect( parentRect ); MoveWindow( parentRect.right , parentRect.bottom ,rect.Width() , rect.Height() ) ; 父窗口中 WM_LBUTTONDOWN 中添加 //实现对话框跟随鼠标移动 ::SendMessage (GetSafeHwnd(), WM_SYSCOMMAND, SC_MOVE + HTCAPTION, 0); WM_WINDOWPOSCHANGED 中添加 if ( childDlg && childDlg->m_hWnd ) { CRect rect; GetWindowRect( rect ) ; CRect childRect ; dlg->GetWindowRect( childRect ); dlg->MoveWindow( rect.right , rect.bottom ,childRect.Width() , childRect.Height() ) ; }
daved2011 2013-05-16
  • 打赏
  • 举报
回复
搜“磁性窗体 VC”
schlafenhamster 2013-05-16
  • 打赏
  • 举报
回复
“不是,是它自己会回去粘连到父窗体上” 那你还能移动吗? 只要一移动 ,自动就回去 !
ziyue007 2013-05-16
  • 打赏
  • 举报
回复
引用 11 楼 schlafenhamster 的回复:
“移动子窗体之后” MouseUp 就回去 ?
不是,是它自己会回去粘连到父窗体上
schlafenhamster 2013-05-16
  • 打赏
  • 举报
回复
“移动子窗体之后” MouseUp 就回去 ?
ziyue007 2013-05-16
  • 打赏
  • 举报
回复
引用 7 楼 q308865427 的回复:
我觉得这样用更好一点 去掉标题,贴一个假标题
我觉得跟标题没什么关系吧,只是在别人的机子上不能实现粘连,移动后窗体内控件没了,变成了空白
引用 8 楼 q308865427 的回复:
用这段代码的方法在我的机子上都出现这种问题了,移动子窗体之后回不去,移动后窗体内控件没了,变成空白了
ziyue007 2013-05-16
  • 打赏
  • 举报
回复
引用 5 楼 duan0783 的回复:
rect.OffsetRect(rect.Width(), 0); 这时什么意思? 矩形向右移动?我觉得子窗口不移动是这个的原因。。。子窗体中的控件就会变形,是不是子窗口变形了?MoveWindow改变了窗口的大小了吧。。用SetWindowPos设置为SWP_NOSIZE就不变形了 改成这样试试, CRect rect; this->GetWindowRect(&rect); pt->SetWindowPos(NULL, rect.left, rect.top, 0, 0, SWP_NOSIZE|SWP_SHOWWINDOW);
rect.OffsetRect(rect.Width(), 0);是为了让子窗体粘到父窗体的右边,两个对话框粘连到一起,窗口变形是里面的控件往右移,甚至有时候整个窗体都空白了。大哥你对这部分代码真的不了解啊 不过我在测试SetWindowPos是否能达到目的
schlafenhamster 2013-05-16
  • 打赏
  • 举报
回复
把你加的代码 先注释掉 试试,拖动 对不对。
ziyue007 2013-05-16
  • 打赏
  • 举报
回复
引用 17 楼 schlafenhamster 的回复:
1.非模态子窗体;子窗体自动跟随父窗体移动的。 2.子窗体移动是 mousemove 和 mousedown 的结果,子窗口如果“自己会回去粘连到父窗体上” 那子窗口怎么能 移动?
那移动后对话框里面的控件变形是怎么回事呢?如果鼠标拖着来回移动,我在里面放的控件就不见了,对话框里都是空白的
schlafenhamster 2013-05-16
  • 打赏
  • 举报
回复
1.非模态子窗体;子窗体自动跟随父窗体移动的。 2.子窗体移动是 mousemove 和 mousedown 的结果,子窗口如果“自己会回去粘连到父窗体上” 那子窗口怎么能 移动?
ziyue007 2013-05-16
  • 打赏
  • 举报
回复
引用 14 楼 daved2011 的回复:
搜“磁性窗体 VC”
找过,我的这个是一种做法,只是不清楚为什么在有的机子上不行
ziyue007 2013-05-16
  • 打赏
  • 举报
回复
引用 13 楼 schlafenhamster 的回复:
“不是,是它自己会回去粘连到父窗体上” 那你还能移动吗? 只要一移动 ,自动就回去 !
这样子窗体才会跟着父窗体一起移动啊
ziyue007 2013-05-15
  • 打赏
  • 举报
回复
引用 1 楼 sha_jinhao 的回复:
非模态子窗体 ------------ 子窗体自动跟随父窗体移动的
我加上上面粘连的代码后,在别人电脑上还不行呢
jimette 2013-05-15
  • 打赏
  • 举报
回复
非模态子窗体 ------------ 子窗体自动跟随父窗体移动的
schlafenhamster 2013-05-15
  • 打赏
  • 举报
回复
“移动子窗体后自动返回原来的位置再粘连上”? 不明白。
小段儿 2013-05-15
  • 打赏
  • 举报
回复
rect.OffsetRect(rect.Width(), 0); 这时什么意思? 矩形向右移动?我觉得子窗口不移动是这个的原因。。。子窗体中的控件就会变形,是不是子窗口变形了?MoveWindow改变了窗口的大小了吧。。用SetWindowPos设置为SWP_NOSIZE就不变形了 改成这样试试, CRect rect; this->GetWindowRect(&rect); pt->SetWindowPos(NULL, rect.left, rect.top, 0, 0, SWP_NOSIZE|SWP_SHOWWINDOW);
ziyue007 2013-05-15
  • 打赏
  • 举报
回复
现在CSDN上基本解决不了问题了啊,都没人了
ziyue007 2013-05-15
  • 打赏
  • 举报
回复
自己顶一下,除了版主就没人看见这个问题吗 没人遇到过吗

15,980

社区成员

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

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