- 注册时间
- 2011-3-6
- 最后登录
- 1970-1-1
该用户从未签到
|
AutoAdapt.h
#pragma once
class CAutoAdapt
{
public:
CAutoAdapt(void);
virtual ~CAutoAdapt(void);
public:
void ReSize(HWND m_hWnd);
void InitSize(HWND m_hWnd);
POINT old;
private:
};
[/code]
AutoAdapt.cpp
#include "stdafx.h"
#include "AutoAdapt.h"
/*
MFC控件自适应窗口大小
使用方法:
在目标类中添加此类成员
在目标初始化函数中调用InitSize函数//这个看自己需求
在WM_SIZE消息处理函数中调用ReSize
*/
CAutoAdapt::CAutoAdapt(void)
{
}
CAutoAdapt::~CAutoAdapt(void)
{
}
//此函数也可以不调用,看自己需求,如果是子窗口 比如tableCtrl中的窗口,调用这个函数 就填满tableCtrl大小
//在初始化函数中添加此函数
void CAutoAdapt::InitSize(HWND m_hWnd)
{
CRect rect;
GetClientRect(m_hWnd,&rect); //取客户区大小
old.x=rect.right-rect.left;
old.y=rect.bottom-rect.top;
int cx = GetSystemMetrics(SM_CXFULLSCREEN);
int cy = GetSystemMetrics(SM_CYFULLSCREEN);
CRect rt;
SystemParametersInfo(SPI_GETWORKAREA,0,&rt,0);
cy = rt.bottom;
MoveWindow(m_hWnd,0, 0, cx, cy,TRUE);
}
//在WM_SIZE消息处理函数中添加这个函数
void CAutoAdapt::ReSize(HWND m_hWnd)
{
float fsp[2];
POINT Newp; //获取现在对话框的大小
CRect recta;
GetClientRect(m_hWnd,&recta); //取客户区大小
Newp.x=recta.right-recta.left;
Newp.y=recta.bottom-recta.top;
//获得倍数
fsp[0]=(float)Newp.x/old.x;
fsp[1]=(float)Newp.y/old.y;
CRect Rect;
int woc; //控件标示
CPoint OldTLPoint,TLPoint; //左上角
CPoint OldBRPoint,BRPoint; //右下角
HWND hwndChild=::GetWindow(m_hWnd,GW_CHILD); //列出所有控件
while(hwndChild)
{
woc=::GetDlgCtrlID(hwndChild);//取得ID
HWND hCtrl = GetDlgItem(m_hWnd,woc);
GetWindowRect(hCtrl,&Rect);
//处理左上角坐标
POINT point;
point = Rect.TopLeft();
ScreenToClient(m_hWnd,&point);
OldTLPoint = point;
TLPoint.x = long(OldTLPoint.x*fsp[0]);
TLPoint.y = long(OldTLPoint.y*fsp[1]);
//处理右下角坐标
point = Rect.BottomRight();
ScreenToClient(m_hWnd,&point);
OldBRPoint = point;
BRPoint.x = long(OldBRPoint.x *fsp[0]);
BRPoint.y = long(OldBRPoint.y *fsp[1]);
Rect.SetRect(TLPoint,BRPoint);
MoveWindow(hCtrl,TLPoint.x,TLPoint.y,BRPoint.x-TLPoint.x,BRPoint.y-TLPoint.y,TRUE);
hwndChild=::GetWindow(hwndChild, GW_HWNDNEXT);
}
old=Newp;
}
[/code] |
|