MFC对话框中的控件移动问题

待续_1006 2017-03-01 12:10:56
//实际获取的就是控件大小0,0,100,,26
((CComboBox*)GetDlgItem(IDC_COMBO1))->GetClientRect(&rect1);

//得到的控件相对于整个屏幕原点的距离
((CComboBox*)GetDlgItem(IDC_COMBO1))->ClientToScreen(&rect1);

//移动窗口
((CComboBox*)GetDlgItem(IDC_COMBO1))->MoveWindow(&rect1);

//获取控件相对于整个屏幕原点的距离
((CComboBox*)GetDlgItem(IDC_COMBO1))->GetWindowRect(&rect3);
为什么rect1 不等于rect3l了??????????
不要仅仅回答是坐标转换问题,这个我也知道,我想知道怎么做换的,MoveWindow需要什么坐标,客户区域?整个屏幕区域?
用了ClientToScreen或是screentocleent都没得到我想要的效果,我想做的就是控制控件移动
...全文
303 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
顾小白xx 2020-05-13
  • 打赏
  • 举报
回复
不要用movewindo 用setwindowspost最后一个参数加上SWPNOSIZE
待续_1006 2017-03-01
  • 打赏
  • 举报
回复
引用 2 楼 oyljerry 的回复:
http://blog.csdn.net/afxid/article/details/899019
控件移动没问题了,为什么移动一次控件大小缩小一次?最后没了
待续_1006 2017-03-01
  • 打赏
  • 举报
回复
引用 3 楼 zgl7903 的回复:
MoveWindow 需要父窗口的 客户区坐标

  CComboBox *pBox = (CComboBox *)GetDlgItem(IDC_COMBO1);
  CRect rcRect;
  pBox->GetWindowRect(&rcRect);
  ScreenToClient(&rcRect);

  rcRect.OffsetRect(0, 40);
  pBox->MoveWindow(rcRect);
控件移动没问题了,为什么移动一次控件大小缩小一次?最后没了
待续_1006 2017-03-01
  • 打赏
  • 举报
回复
引用 5 楼 shiyanbo_1006 的回复:
[quote=引用 3 楼 zgl7903 的回复:] MoveWindow 需要父窗口的 客户区坐标

  CComboBox *pBox = (CComboBox *)GetDlgItem(IDC_COMBO1);
  CRect rcRect;
  pBox->GetWindowRect(&rcRect);
  ScreenToClient(&rcRect);

  rcRect.OffsetRect(0, 40);
  pBox->MoveWindow(rcRect);
你这种做法是叫控件跑到0,40的位置去了 我的目的是获取一个控件的问题,然后动态的去改变他的位置[/quote] 弄错了ScreenToClient(&rcRect);应该像你这么写,而我是用控件调用的这个方法,获取的区域不同,蠢啊
worldy 2017-03-01
  • 打赏
  • 举报
回复
The MoveWindow function changes the position and dimensions of the specified window. For a top-level window, the position and dimensions are relative to the upper-left corner of the screen. For a child window, they are relative to the upper-left corner of the parent window's client area.
待续_1006 2017-03-01
  • 打赏
  • 举报
回复
引用 3 楼 zgl7903 的回复:
MoveWindow 需要父窗口的 客户区坐标

  CComboBox *pBox = (CComboBox *)GetDlgItem(IDC_COMBO1);
  CRect rcRect;
  pBox->GetWindowRect(&rcRect);
  ScreenToClient(&rcRect);

  rcRect.OffsetRect(0, 40);
  pBox->MoveWindow(rcRect);
你这种做法是叫控件跑到0,40的位置去了 我的目的是获取一个控件的问题,然后动态的去改变他的位置
待续_1006 2017-03-01
  • 打赏
  • 举报
回复
引用 2 楼 oyljerry 的回复:
http://blog.csdn.net/afxid/article/details/899019
文章看了,对我来说没有意义 我的目的是获取一个控件的问题,然后动态的去改变他的位置
zgl7903 2017-03-01
  • 打赏
  • 举报
回复
MoveWindow 需要父窗口的 客户区坐标

  CComboBox *pBox = (CComboBox *)GetDlgItem(IDC_COMBO1);
  CRect rcRect;
  pBox->GetWindowRect(&rcRect);
  ScreenToClient(&rcRect);

  rcRect.OffsetRect(0, 40);
  pBox->MoveWindow(rcRect);
oyljerry 2017-03-01
  • 打赏
  • 举报
回复
http://blog.csdn.net/afxid/article/details/899019
  • 打赏
  • 举报
回复
ScreenToClient()

15,979

社区成员

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

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