控件随对话框窗体大小而变化
2013-08-21 18:50
281 查看
.h文件中:
POINT m_OldPoint;
.cpp文件中:
BOOL
CPicturesShowDlg::OnInitDialog()
{
CDialog::OnInitDialog();
CRect
rect;
GetClientRect(&rect);
//取客户区大小
m_OldPoint.x=rect.right-rect.left;
m_OldPoint.y=rect.bottom-rect.top;
……
return
TRUE;
}
void
CPicturesShowDlg::OnSize(UINT
nType, int
cx, int cy)
{
CDialog::OnSize(nType,
cx, cy);
// TODO: Add your message handler code here
if(nType==SIZE_RESTORED||nType==SIZE_MAXIMIZED)//窗体大小发生变动。处理函数resize
{
ResizeFrm();
}
}
void
CPicturesShowDlg::ResizeFrm()
{
float
fsp[2];
POINT
Newp; //获取现在对话框的大小
CRect
recta;
GetClientRect(&recta);
//取客户区大小
Newp.x=recta.right-recta.left;
Newp.y=recta.bottom-recta.top;
fsp[0]=(float)Newp.x/m_OldPoint.x;
fsp[1]=(float)Newp.y/m_OldPoint.y;
CRect
Rect;
int
woc;
CPoint
OldTLPoint,TLPoint;
//左上角
CPoint
OldBRPoint,BRPoint;
//右下角
HWND
hwndChild=::GetWindow(m_hWnd,GW_CHILD);
//列出所有控件
while(hwndChild)
{
woc=::GetDlgCtrlID(hwndChild);//取得ID
GetDlgItem(woc)->GetWindowRect(Rect);
ScreenToClient(Rect);
OldTLPoint =
Rect.TopLeft();
TLPoint.x =
long(OldTLPoint.x*fsp[0]);
TLPoint.y =
long(OldTLPoint.y*fsp[1]);
OldBRPoint =
Rect.BottomRight();
BRPoint.x =
long(OldBRPoint.x *fsp[0]);
BRPoint.y =
long(OldBRPoint.y *fsp[1]);
Rect.SetRect(TLPoint,BRPoint);
GetDlgItem(woc)->MoveWindow(Rect,TRUE);
hwndChild=::GetWindow(hwndChild,
GW_HWNDNEXT);
}
m_OldPoint=Newp;
}
如果你的父窗口是基于Formview的,那么只需要变化下面代码:
CRect rect;
GetClientRect(&rect);
//取客户区大小
m_OldPoint.x=rect.right-rect.left;
m_OldPoint.y=rect.bottom-rect.top;
从OnInitDialog()函数到OnDraw函数即可,然后
void
CKTLXFunction::OnSize(UINT
nType, int
cx, int cy)
{
CFormView::OnSize(nType, cx, cy);
if((nType==SIZE_RESTORED||nType==SIZE_MAXIMIZED) &&
m_bIsInit)//窗体大小发生变动。处理函数resize
{
int
woc;
HWND
hwndChild=::GetWindow(m_hWnd,GW_CHILD);
//列出所有控件
while(hwndChild)
{
CRect
Rect;
woc=::GetDlgCtrlID(hwndChild);//取得ID
GetDlgItem(woc)->GetWindowRect(&Rect);
ScreenToClient(&Rect);
Rect.left=Rect.left*cx/m_rect.Width();//调整控件大小
Rect.right=Rect.right*cx/m_rect.Width();
Rect.top=Rect.top*cy/m_rect.Height();
Rect.bottom=Rect.bottom*cy/m_rect.Height();
GetDlgItem(woc)->MoveWindow(Rect);//设置控件大小
hwndChild=::GetWindow(hwndChild, GW_HWNDNEXT); //不要忘了这一条哦,否则,就会。。。。
}
}
}
POINT m_OldPoint;
.cpp文件中:
BOOL
CPicturesShowDlg::OnInitDialog()
{
CDialog::OnInitDialog();
CRect
rect;
GetClientRect(&rect);
//取客户区大小
m_OldPoint.x=rect.right-rect.left;
m_OldPoint.y=rect.bottom-rect.top;
……
return
TRUE;
}
void
CPicturesShowDlg::OnSize(UINT
nType, int
cx, int cy)
{
CDialog::OnSize(nType,
cx, cy);
// TODO: Add your message handler code here
if(nType==SIZE_RESTORED||nType==SIZE_MAXIMIZED)//窗体大小发生变动。处理函数resize
{
ResizeFrm();
}
}
void
CPicturesShowDlg::ResizeFrm()
{
float
fsp[2];
POINT
Newp; //获取现在对话框的大小
CRect
recta;
GetClientRect(&recta);
//取客户区大小
Newp.x=recta.right-recta.left;
Newp.y=recta.bottom-recta.top;
fsp[0]=(float)Newp.x/m_OldPoint.x;
fsp[1]=(float)Newp.y/m_OldPoint.y;
CRect
Rect;
int
woc;
CPoint
OldTLPoint,TLPoint;
//左上角
CPoint
OldBRPoint,BRPoint;
//右下角
HWND
hwndChild=::GetWindow(m_hWnd,GW_CHILD);
//列出所有控件
while(hwndChild)
{
woc=::GetDlgCtrlID(hwndChild);//取得ID
GetDlgItem(woc)->GetWindowRect(Rect);
ScreenToClient(Rect);
OldTLPoint =
Rect.TopLeft();
TLPoint.x =
long(OldTLPoint.x*fsp[0]);
TLPoint.y =
long(OldTLPoint.y*fsp[1]);
OldBRPoint =
Rect.BottomRight();
BRPoint.x =
long(OldBRPoint.x *fsp[0]);
BRPoint.y =
long(OldBRPoint.y *fsp[1]);
Rect.SetRect(TLPoint,BRPoint);
GetDlgItem(woc)->MoveWindow(Rect,TRUE);
hwndChild=::GetWindow(hwndChild,
GW_HWNDNEXT);
}
m_OldPoint=Newp;
}
如果你的父窗口是基于Formview的,那么只需要变化下面代码:
CRect rect;
GetClientRect(&rect);
//取客户区大小
m_OldPoint.x=rect.right-rect.left;
m_OldPoint.y=rect.bottom-rect.top;
从OnInitDialog()函数到OnDraw函数即可,然后
void
CKTLXFunction::OnSize(UINT
nType, int
cx, int cy)
{
CFormView::OnSize(nType, cx, cy);
if((nType==SIZE_RESTORED||nType==SIZE_MAXIMIZED) &&
m_bIsInit)//窗体大小发生变动。处理函数resize
{
int
woc;
HWND
hwndChild=::GetWindow(m_hWnd,GW_CHILD);
//列出所有控件
while(hwndChild)
{
CRect
Rect;
woc=::GetDlgCtrlID(hwndChild);//取得ID
GetDlgItem(woc)->GetWindowRect(&Rect);
ScreenToClient(&Rect);
Rect.left=Rect.left*cx/m_rect.Width();//调整控件大小
Rect.right=Rect.right*cx/m_rect.Width();
Rect.top=Rect.top*cy/m_rect.Height();
Rect.bottom=Rect.bottom*cy/m_rect.Height();
GetDlgItem(woc)->MoveWindow(Rect);//设置控件大小
hwndChild=::GetWindow(hwndChild, GW_HWNDNEXT); //不要忘了这一条哦,否则,就会。。。。
}
}
}
相关文章推荐
- 让对话框内的控件在窗体大小发生变化时随之变化
- C#中怎样使控件随着窗体一起变化大小(常见困难以及修正)[转]
- vs2013 窗体应用编程—控件大小随窗体变化(通过代码实现)
- 控件函数对话框上的控件的大小和位置随着对话框的大小的改变而变化
- 在CFormView中如何让对话框内的控件大小跟随单文档的大小变化
- 窗体控件大小随窗体大小变化而变化(VB.NET)
- winform控件随窗体大小变化而变化
- MFC多个控件在对话框上的大小变化
- MFC中控件大小随对话框大小动态变化
- 如何实现控件随对话框大小变化而自动调整大小和位置
- [MFC] 控件大小跟随对话框大小比例变化 [大三TJB_708]
- MFC中让控件随窗体大小变化而变化中需要注意的问题
- C#中怎样使控件随着窗体一起变化大小(常见困难以及修正)
- MFC对话框控件随对话框的大小变化
- 【NCRE】——Winform窗体控件随窗体大小而变化
- C# ——窗体和控件随着分辨率的变化自适应大小
- 让控件随窗体大小变化而变化~WinForms控件自适应窗体大小
- MFC对话框内控件大小随着对话框大小变化
- 对话框控件随着对话框变化大小
- C#中怎样使控件随着窗体一起变化大小(常见困难以及修正)