最笨的方法大概就是OnSize中 按照新旧大小的比例算一下 然后MoveWindow
我在实际过程中碰见一个问题就是调整Crichedit时出错,后来才知道WM_SIZE执行在WM_CREATE前面.
所以调整Crichedit时要加判断条件
if (IsWindow(m_testrich2.GetSafeHwnd()))
{
m_testrich2.MoveWindow(crect,true);
}
--------------------------最后贴一下我的工程中部分代码-----------------------
void CTalkDlg::OnSize(UINT nType, int cx, int cy)
{
CRect crect;
crect.left=5;
crect.right=cx-117;
crect.top=(300*cy)/410+2;//这些按照原先的比例计算出新的大小
crect.bottom=cy-30;
if (IsWindow(m_testrich.GetSafeHwnd()))//调整输入框
{ //m_testrich.ShowWindow(SW_HIDE);
m_testrich.MoveWindow(crect,true);
}
crect.top=5;
crect.bottom=(300*cy)/410-24-2;
if (IsWindow(m_testrich2.GetSafeHwnd()))//调整显示框
{// m_testrich2.ShowWindow(SW_HIDE);
m_testrich2.MoveWindow(crect,true);
}
crect.left=cx-175;
crect.top=cy-28;
crect.bottom=cy-5;
crect.right=cx-117;
m_btSend.MoveWindow(crect,true);//调整发送按钮
crect.left=cx-175-80;
crect.right=cx-117-80;
m_close.MoveWindow(crect,true);//调整关闭按钮
crect.top=(300*cy)/410-24;
crect.bottom=(300*cy)/410;
crect.right=cx-117-80+3;
m_fstp.MoveWindow(crect,true);//调整发送图片按钮
...........略
========================================================================
方法2,使用别人写的类(我下了,还没用过,有需要的朋友如果下不了,可以留邮箱向我要)
http://download.csdn.net/source/1070512
使用时,将其中的ControlPos.cpp和ControlPos.h文件引入工程中
然后根据以下步骤进行操作:
1:在需要处理的对画框的类定义中,定义一个操作对象(别忘了包含头文件ControlPos.h)
class CYourDlg: public CDialog
{
............
CControlPos m_cControlPos;
}
2:在该对话框的OnInitDialog中添加如下代码
m_cControlPos.SetParent(this);
3:接下来为每个要改变大小、位置的控件进行注册(自己编的词)
m_cControlPos.AddControl(IDC_BUTTON1,CP_MOVE_HORIZONTAL) //使控件IDC_BUTTON1根据窗体大小的改变自动水平移动(其他样式见最后的“样式控制表”)
4:最后,在该对话框的OnSize事件处理函数中添加如下代码:
m_cControlPos.MoveControls();
控制样式表:(4种样式可以任意组合)
CP_MOVE_VERTICAL //垂直移动
CP_MOVE_HORIZONTAL //水平移动
CP_RESIZE_HORIZONTAL //改变宽度
CP_RESIZE_VERTICAL //改变高度