设置控件随窗口大小而改变
2014-02-24 13:29
429 查看
第一步:在类中加入成员函数和成员变量
[cpp] view
plaincopy
public:
void SetControlInfo(WORD CtrlId);
protected:
int m_old_cx,m_old_cy;
CDWordArray m_control_info;
第二步 在类的构造函数中初始化变量
[cpp] view
plaincopy
CgdiDlg::CgdiDlg(CWnd* pParent /*=NULL*/)
: CDialog(CgdiDlg::IDD, pParent)
{
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
m_old_cx=m_old_cy=0;
}
注意: 是在类的构造函数中初始化,不是在类的Init函数中进行初始化
第三步 定义实现成员函数SetControlInfo(WORD CtrlId)
[cpp] view
plaincopy
void CgdiDlg::SetControlInfo(WORD CtrlId)
{
m_control_info.Add(CtrlId);
}
第四步 修改OnSize消息函数
[cpp] view
plaincopy
void CgdiDlg::OnSize(UINT nType, int cx, int cy)
{
if (cx==0||cy==0)
{
cx=800;
cy=600;
}
CDialog::OnSize(nType, cx, cy);
float dx_percent = (m_old_cx ==0)? 1 : (float)((float)cx/(float)m_old_cx);
float dy_percent = (m_old_cy ==0)? 1 : (float)((float)cy/(float)m_old_cy);
if(m_old_cx)
{
CRect WndRect;
CWnd *pWnd;
for(int i = 0; i < m_control_info.GetSize(); i++)
{
pWnd = GetDlgItem(m_control_info[i]);
if(!pWnd)
{
TRACE( "Control ID - %d NOT FOUND!!\n ",m_control_info[i]);
continue;
}
pWnd-> GetWindowRect(&WndRect);
ScreenToClient(&WndRect);
WndRect.left = (int)(WndRect.left*dx_percent);
WndRect.right = (int)(WndRect.right* dx_percent);
WndRect.bottom = (int)(WndRect.bottom*dy_percent);
WndRect.top = (int)(WndRect.top*dy_percent);
pWnd-> MoveWindow(&WndRect);
}
}
m_old_cx = cx;
m_old_cy = cy;
}
<第五步 在OnInitDialog初始化函数中 加入控件ID
SetControlInfo(IDC_BUTTON1);
参考资料:"http://hi.baidu.com/jues17/blog/item/61d5a7ff289ae3265c60089c.html"
[cpp] view
plaincopy
public:
void SetControlInfo(WORD CtrlId);
protected:
int m_old_cx,m_old_cy;
CDWordArray m_control_info;
第二步 在类的构造函数中初始化变量
[cpp] view
plaincopy
CgdiDlg::CgdiDlg(CWnd* pParent /*=NULL*/)
: CDialog(CgdiDlg::IDD, pParent)
{
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
m_old_cx=m_old_cy=0;
}
注意: 是在类的构造函数中初始化,不是在类的Init函数中进行初始化
第三步 定义实现成员函数SetControlInfo(WORD CtrlId)
[cpp] view
plaincopy
void CgdiDlg::SetControlInfo(WORD CtrlId)
{
m_control_info.Add(CtrlId);
}
第四步 修改OnSize消息函数
[cpp] view
plaincopy
void CgdiDlg::OnSize(UINT nType, int cx, int cy)
{
if (cx==0||cy==0)
{
cx=800;
cy=600;
}
CDialog::OnSize(nType, cx, cy);
float dx_percent = (m_old_cx ==0)? 1 : (float)((float)cx/(float)m_old_cx);
float dy_percent = (m_old_cy ==0)? 1 : (float)((float)cy/(float)m_old_cy);
if(m_old_cx)
{
CRect WndRect;
CWnd *pWnd;
for(int i = 0; i < m_control_info.GetSize(); i++)
{
pWnd = GetDlgItem(m_control_info[i]);
if(!pWnd)
{
TRACE( "Control ID - %d NOT FOUND!!\n ",m_control_info[i]);
continue;
}
pWnd-> GetWindowRect(&WndRect);
ScreenToClient(&WndRect);
WndRect.left = (int)(WndRect.left*dx_percent);
WndRect.right = (int)(WndRect.right* dx_percent);
WndRect.bottom = (int)(WndRect.bottom*dy_percent);
WndRect.top = (int)(WndRect.top*dy_percent);
pWnd-> MoveWindow(&WndRect);
}
}
m_old_cx = cx;
m_old_cy = cy;
}
<第五步 在OnInitDialog初始化函数中 加入控件ID
SetControlInfo(IDC_BUTTON1);
参考资料:"http://hi.baidu.com/jues17/blog/item/61d5a7ff289ae3265c60089c.html"
相关文章推荐
- 设置控件随窗口大小而改变
- C++创建控件并响应三部曲、设置窗口全屏、OnSize实现控件大小改变、跟踪调试顺序
- 设置控件随窗口大小而改变
- Delphi让控件随着窗口的大小而改变
- 当浏览器窗口大小改变时,设置显示内容的高度
- 在DELPHI中让WindowsMediaPlayer控件随窗口改变大小。
- 给对话框加载图片背景,使得窗口大小改变时,控件还在
- 子窗口大小可随父窗口改变了 但怎么使子窗口中的控件也改变?
- mfc中控件随着窗口的大小改变而改变大小
- 随着窗口大小的改变调整控件的位置和大小
- 设置VLC窗口大小不随视频分辨率改变
- QT中如何使控件随窗口改变大小?
- Qt控件随窗口大小变化的设置方法(QTDesigner)
- MFC Dialog子窗口大小随父窗口而能改变,控件随窗口大小而改变
- 让FormView上的控件大小随父窗口改变
- MFC让控件随窗口大小而改变
- delphi 窗口最大化后控件的大小变化怎么设置
- 运行时改变控件的大小(点击后立刻ReleaseCapture,然后计算位移,最后发消息改变位置)——最有趣的是TPanel其实也有窗口标题,因此可发HTCAPTION消息
- WPF 学习笔记-设置属性使窗口不可改变大小
- 创建画线控件窗口大小改变引起的重绘,保存图像问题。