mfc里如何设置两个控件之间保持相对位置不变? SetWindowPos时候只是改变两个控件相对于对话框的位置,但是两个控件的相对位置不发生变化,请问如何实现 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你的意思是对话框的大小改变的情况下把,如果是这样,则在OnSize()里重新计算控件的位置,然后MoveWindow() 两个控件要相互作用, 首先是必须把两个控件都有对方的句柄, 然后任何一个控件接收到移动的消息, 也通知另一个句柄进行相应的移动, 但要注意消息的死循环, 像A在Onsize消息通知了B, B移动后也会有OnSize消息又通知了A, 换句话是指: A和B也好, 只要上一次的OnSize还不退出, 就不应该接收下一个OnSize消息, 而应该直接返回, 这样就可以打破消息的死循环了. init: GetClientRect(&m_rcOldDlg); CRect rcBtn1,rcBtn2; m_Bt1.GetClientRect(&rcBtn1); m_Bt1.MapWindowPoints(this,rcBtn1); m_Bt2.GetClientRect(&rcBtn2); m_Bt2.MapWindowPoints(this,rcBtn2); m_SpaceWid=rcBtn2.left-rcBtn1.left;void CAboutDlg::OnSize(UINT nType, int cx, int cy) { CDialog::OnSize(nType, cx, cy); // TODO: Add your message handler code here if(m_Bt1.m_hWnd && m_Bt2.m_hWnd) { CRect rect;// moving is easier m_Bt1.GetWindowRect(&rect); //屏幕坐标 ScreenToClient(&rect); //转成相对坐标 int incX=cx - m_rcOldDlg.Width(); int incY=cy - m_rcOldDlg.Height();// afxDump << incX << ";" << incY << "\n"; rect.left +=incX; rect.right +=incX; rect.top +=incY; rect.bottom +=incY;// move Button 1 m_Bt1.MoveWindow(rect,TRUE);// offset bt2 rect.left +=m_SpaceWid;// rect.right +=m_SpaceWid; m_Bt2.MoveWindow(rect,TRUE);//Get old again ! GetClientRect(&m_rcOldDlg); }} n年前我写过一个自动布局的类。http://download.csdn.net/detail/sdhexu/593170该类可以实现对话框上面元素的自动布局,可以定义是否自动缩放,也可以定义相对位置。很好用。 codeproject上有一个不错的类 你可以找找 好像叫ResizableDialog 有用啊,就是不太清楚cx,cy什么意思啊? ::std::vector<CStrs> 取得二维数据的行.size,怎么取得列大小? vista下 如何获取当前用户的权限 调整框架窗口size 重分急求!!!!!!! 帮忙提供学习VC资源 包子的小问题!谢各位了~~~~ 急!动态库的调用问题,在线等待. vc下开发的一些类,vb下怎样能用? 一个工程里面再加入一个工程有什么好处? 请教小问题(见笑了) 如何初始化全局dll 用CSplitterWnd取消水平和垂直滚动条共享滚动问题
GetClientRect(&m_rcOldDlg);
CRect rcBtn1,rcBtn2;
m_Bt1.GetClientRect(&rcBtn1);
m_Bt1.MapWindowPoints(this,rcBtn1);
m_Bt2.GetClientRect(&rcBtn2);
m_Bt2.MapWindowPoints(this,rcBtn2);
m_SpaceWid=rcBtn2.left-rcBtn1.left;void CAboutDlg::OnSize(UINT nType, int cx, int cy)
{
CDialog::OnSize(nType, cx, cy);
// TODO: Add your message handler code here
if(m_Bt1.m_hWnd && m_Bt2.m_hWnd)
{
CRect rect;
// moving is easier
m_Bt1.GetWindowRect(&rect); //屏幕坐标
ScreenToClient(&rect); //转成相对坐标
int incX=cx - m_rcOldDlg.Width();
int incY=cy - m_rcOldDlg.Height();
// afxDump << incX << ";" << incY << "\n";
rect.left +=incX;
rect.right +=incX;
rect.top +=incY;
rect.bottom +=incY;
// move Button 1
m_Bt1.MoveWindow(rect,TRUE);
// offset bt2
rect.left +=m_SpaceWid;//
rect.right +=m_SpaceWid;
m_Bt2.MoveWindow(rect,TRUE);
//Get old again !
GetClientRect(&m_rcOldDlg);
}
}
http://download.csdn.net/detail/sdhexu/593170该类可以实现对话框上面元素的自动布局,可以定义是否自动缩放,也可以定义相对位置。很好用。