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)也不管用,应该怎么做才好?


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

求大侠帮忙给点建议,解决立马给分,在线等............
...全文
516 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
  • 打赏
  • 举报
回复
自己顶一下,除了版主就没人看见这个问题吗 没人遇到过吗
VS2010-MFC编程入门之前言-软件开发-鸡啄米 VS2010-MFC编程入门之二(利用MFC向导生成单文档应用程序框架)-软件开发-鸡啄米 VS2010-MFC编程入门之三(VS2010应用程序工程中文件的组成结构)鸡啄米 VS2010-MFC编程入门之四(MFC应用程序框架分析)-软件开发-鸡啄米 VS2010-MFC编程入门之五(MFC消息映射机制概述)-软件开发-鸡啄米 VS2010-MFC编程入门之六(对话框:创建对话框模板和修改对话框属性)鸡啄米 VS2010-MFC编程入门之七(对话框:为对话框添加控件)-软件开发-鸡啄米 VS2010-MFC编程入门之八(对话框:创建对话框类和添加控件变量) VS2010-MFC编程入门之九(对话框:为控件添加消息处理函数)-软件开发-鸡啄米 VS2010-MFC编程入门之十(对话框:设置对话框控件的Tab顺序)-软件开发-鸡啄米 VS2010-MFC编程入门之十一(对话框模态对话框及其弹出过程)-软件开发-鸡啄米 VS2010-MFC编程入门之十二(对话框模态对话框的创建及显示)-软件开发-鸡啄米 VS2010-MFC编程入门之十三(对话框:属性页对话框及相关类的介绍)-软件开发-鸡啄米 VS2010-MFC编程入门之十四(对话框:向导对话框的创建及显示)-软件开发-鸡啄米 VS2010-MFC编程入门之十五(对话框:一般属性页对话框的创建及显示)-软件开发-鸡啄米 VS2010-MFC编程入门之十六(对话框:消息对话框)-软件开发-鸡啄米 VS2010-MFC编程入门之十七(对话框:文件对话框)-软件开发-鸡啄米 VS2010-MFC编程入门之十八(对话框:字体对话框)-软件开发-鸡啄米 VS2010-MFC编程入门之十九(对话框:颜色对话框)-软件开发-鸡啄米 VS2010-MFC编程入门之二十(常用控件:静态文本框)-软件开发-鸡啄米 VS2010-MFC编程入门之二十一(常用控件:编辑框Edit Control)-软件开发-鸡啄米 VS2010-MFC编程入门之二十二(常用控件:按钮控件Button、Radio Button和Check Box)-软件开发-鸡啄米 VS2010-MFC编程入门之二十三(常用控件:按钮控件的编程实例)-软件开发-鸡啄米 VS2010-MFC编程入门之二十四(常用控件:列表框控件ListBox)-软件开发-鸡啄米 VS2010-MFC编程入门之二十五(常用控件:组合框控件Combo Box)-软件开发-鸡啄米 VS2010-MFC编程入门之二十六(常用控件:滚动条控件Scroll Bar)-软件开发-鸡啄米 VS2010-MFC编程入门之二十七(常用控件:图片控件Picture Control)-软件开发-鸡啄米 VS2010-MFC编程入门之二十八(常用控件:列表视图控件List Control 上)-软件开发-鸡啄米 VS2010-MFC编程入门之二十九(常用控件:列表视图控件List Control 下)-软件开发-鸡啄米 VS2010-MFC编程入门之三十(常用控件:树形控件Tree Control 上)-软件开发-鸡啄米 VS2010-MFC编程入门之三十一(常用控件:树形控件Tree Control 下)-软件开发-鸡啄米 VS2010-MFC编程入门之三十二(常用控件:标签控件Tab Control 上)-软件开发-鸡啄米 VS2010-MFC编程入门之三十三(常用控件:标签控件Tab Control 下)-软件开发-鸡啄米
一、VS2010/MFC编程入门教程之目录 第一部分:VS2010/MFC开发环境 VS2010/MFC编程入门之前言 VS2010/MFC编程入门之一(VS2010与MSDN安装过程图解) 第二部分:VS2010/MFC应用程序框架 VS2010/MFC编程入门之二(利用MFC向导生成单文档应用程序框架) VS2010/MFC编程入门之三(VS2010应用程序工程中文件的组成结构) VS2010/MFC编程入门之四(MFC应用程序框架分析) VS2010/MFC编程入门之五(MFC消息映射机制概述) 第三部分:对话框 VS2010/MFC编程入门之六(对话框:创建对话框模板和修改对话框属性) VS2010/MFC编程入门之七(对话框:为对话框添加控件) VS2010/MFC编程入门之八(对话框:创建对话框类和添加控件变量) VS2010/MFC编程入门之九(对话框:为控件添加消息处理函数) VS2010/MFC编程入门之十(对话框:设置对话框控件的Tab顺序) VS2010/MFC编程入门之十一(对话框模态对话框及其弹出过程) VS2010/MFC编程入门之十二(对话框模态对话框的创建及显示) VS2010/MFC编程入门之十三(对话框:属性页对话框及相关类的介绍) VS2010/MFC编程入门之十四(对话框:向导对话框的创建及显示) VS2010/MFC编程入门之十五(对话框:一般属性页对话框的创建及显示) VS2010/MFC编程入门之十六(对话框:消息对话框) VS2010/MFC编程入门之十七(对话框:文件对话框) VS2010/MFC编程入门之十八(对话框:字体对话框) VS2010/MFC编程入门之十九(对话框:颜色对话框) 第四部分:常用控件 VS2010/MFC编程入门之二十(常用控件:静态文本框) VS2010/MFC编程入门之二十一(常用控件:编辑框Edit Control) VS2010/MFC编程入门之二十二(常用控件:按钮控件Button、Radio Button和Check Box) VS2010/MFC编程入门之二十三(常用控件:按钮控件的编程实例) VS2010/MFC编程入门之二十四(常用控件:列表框控件ListBox) VS2010/MFC编程入门之二十五(常用控件:组合框控件Combo Box) VS2010/MFC编程入门之二十六(常用控件:滚动条控件Scroll Bar) VS2010/MFC编程入门之二十七(常用控件:图片控件Picture Control) VS2010/MFC编程入门之二十八(常用控件:列表视图控件List Control 上) VS2010/MFC编程入门之二十九(常用控件:列表视图控件List Control 下) VS2010/MFC编程入门之三十(常用控件:树形控件Tree Control 上) VS2010/MFC编程入门之三十一(常用控件:树形控件Tree Control 下) VS2010/MFC编程入门之三十二(常用控件:标签控件Tab Control 上) VS2010/MFC编程入门之三十三(常用控件:标签控件Tab Control 下) 第五部分:菜单、工具栏与状态栏 VS2010/MFC编程入门之三十四(菜单:VS2010菜单资源详解) VS2010/MFC编程入门之三十五(菜单:菜单及CMenu类的使用) VS2010/MFC编程入门之三十六(工具栏:工具栏资源及CToolBar类) VS2010/MFC编程入门之三十七(工具栏:工具栏的创建、停靠与使用) VS2010/MFC编程入门之三十八(状态栏的使用详解) 第六部分:文档、视图和框架 VS2010/MFC编程入门之三十九(文档、视图和框架:概述) VS2010/MFC编程入门之四十(文档、视图和框架:各对象之间的关系) VS2010/MFC编程入门之四十一(文档、视图和框架:分割窗口) 第七部分:MFC常用类 VS2010/MFC编程入门之四十二(MFC常用类:CString类) VS2010/MFC编程入门之四十三(MFC常用类:CTime类和CTimeSpan类) VS2010/MFC编程入门之四十四(MFC常用类:定时器Timer) VS2010/MFC编程入门之四十五(MFC常用类:CFile文件操作类) VS2010/MFC编程入门之四十六(MFC常用类:MFC异常处理) 第八部分:字体和文本输出 VS2010/MFC编程入门之四十七(字体和文本输出:CFont字体类) VS2010/MFC编程入门之四十八(字体和文本输出:文本输出) 第九部分:图形图像 VS2010/MFC编程入门之四十九(图形图像:CDC类及其屏幕绘图函数) VS2010/MFC编程入门之五十(图形图像:GDI对象之画笔CPen) VS2010/MFC编程入门之五十一(图形图像:GDI对象之画刷CBrush) 第十部分:Ribbon界面开发 VS2010/MFC编程入门之五十二(Ribbon界面开发:创建Ribbon样式的应用程序框架) VS2010/MFC编程入门之五十三(Ribbon界面开发:为Ribbon Bar添加控件) VS2010/MFC编程入门之五十四(Ribbon界面开发:使用更多控件并为控件添加消息处理函数) 本文来源于鸡啄米 http://www.jizhuomi.com/ , 原文地址:http://www.jizhuomi.com/software/257.html

15,980

社区成员

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

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