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


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

求大侠帮忙给点建议,解决立马给分,在线等............
...全文
569 20 打赏 收藏 举报
写回复
用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
  • 打赏
  • 举报
回复
自己顶一下,除了版主就没人看见这个问题吗 没人遇到过吗
本资源提供2000—2025年贵阳市(每5年间隔)建成区矢量分布数据,系统整理贵阳市不同年份建成区空间范围及扩展变化信息,包含可编辑MXD工程文件、标准Shapefile矢量文件以及标准成图TIF文件,可用于城市扩张、土地利用变化及城市空间格局等相关研究。 数据基于多源遥感影像构建,综合利用Landsat中分辨率光学影像、Sentinel-1合成孔径雷达影像和Sentinel-2高分辨率多光谱影像,充分发挥不同传感器在光谱、空间及全天候观测方面的优势,提高建成区识别的稳定性。在此基础上引入随机森林分类算法,通过大量样本训练建立不透水面识别模型,自动提取遥感影像中的城市不透水面信息,并形成不同年份的建成区初步识别结果。 为提高建成区空间边界的完整性和合理性,在初步分类结果基础上进一步结合人口密度数据及空间连通性规则进行结果精炼,过滤零散分布的非城市化噪声像元,优化不透水面斑块的空间连接关系,最终形成连续、完整且具有较好空间一致性的城市建成区范围,从而较为直观地反映2000—2025年(每5年间隔)贵阳市城市空间扩展过程。 标准Shapefile文件支持建成区边界的空间查询、面积统计、属性筛选、叠加分析及专题制图;可编辑MXD工程文件已完成不同年份建成区图层组织、符号配置、标注及地图版式设置,可直接在ArcGIS中进行编辑和二次制图。标准成图TIF可用于科研论文、项目报告、城市规划专题图及教学展示。 该数据可广泛应用于贵阳市城市扩张、建成区演变、土地利用变化、城市规划、生态环境评价及城市空间格局研究,可通过多年份建成区边界叠加分析城市扩展方向、扩张速度及空间形态变化,为城市发展与相关GIS空间分析提供基础数据支撑。

15,976

社区成员

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

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