static控件下绘制了一坐标曲线,现让其随着对话框的缩放而缩放
static控件上绘制了一坐标曲线,现让其随着对话框的缩放而缩放
我在对话框的static控件上绘制了一坐标曲线,想让其在对话框缩放时能够随着对话框做相应的大小调整,因而我添加了OnSize,但是该控件并没有变化,其他的控件能够随着对话框的改变而改变
void CSpecDlg::OnSize(UINT nType, int cx, int cy)
{
CDialog::OnSize(nType, cx, cy);
for (int i=IDC_COORDINATE1 ;i<=IDC_STATIC11 ;i++) //因为是对话框中的控件,所以这里用了循环
{
CWnd *pWnd;
pWnd =GetDlgItem(i); //获取ID为i的空间的句柄,
if(pWnd) //判断是否为空,因为对话框创建时会调用此函数,而当时控件还未创建
{
CRect rect; //获取控件变化前的大小
pWnd->GetWindowRect(&rect);
ScreenToClient(&rect);//将控件大小转换为在对话框中的区域坐标
if(!cx||!cy)
return; //如果是最小化后再恢复就不要进行调整
else
{
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();
pWnd->MoveWindow(rect);//设置控件大小
}
}
}
GetClientRect(&m_rect);// 将变化后的对话框大小设为旧大小
}
请问我该怎么办????
------解决方案--------------------
完全可以啊。。。
你的 m_rect 应该是对话框类的CRect类型的成员变量,用来记录每次改变之后的对话框大小吧?
你得在OnInitDialog()里面先对m_rect进行初始化:GetClientRect(&m_rect);
------解决方案--------------------
对于是绘制的曲线静态控件,你应该在该控件添加WM_SIZING 消息处理函数. 在这里根据大小重新比例绘制
我在对话框的static控件上绘制了一坐标曲线,想让其在对话框缩放时能够随着对话框做相应的大小调整,因而我添加了OnSize,但是该控件并没有变化,其他的控件能够随着对话框的改变而改变
void CSpecDlg::OnSize(UINT nType, int cx, int cy)
{
CDialog::OnSize(nType, cx, cy);
for (int i=IDC_COORDINATE1 ;i<=IDC_STATIC11 ;i++) //因为是对话框中的控件,所以这里用了循环
{
CWnd *pWnd;
pWnd =GetDlgItem(i); //获取ID为i的空间的句柄,
if(pWnd) //判断是否为空,因为对话框创建时会调用此函数,而当时控件还未创建
{
CRect rect; //获取控件变化前的大小
pWnd->GetWindowRect(&rect);
ScreenToClient(&rect);//将控件大小转换为在对话框中的区域坐标
if(!cx||!cy)
return; //如果是最小化后再恢复就不要进行调整
else
{
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();
pWnd->MoveWindow(rect);//设置控件大小
}
}
}
GetClientRect(&m_rect);// 将变化后的对话框大小设为旧大小
}
请问我该怎么办????
------解决方案--------------------
完全可以啊。。。
你的 m_rect 应该是对话框类的CRect类型的成员变量,用来记录每次改变之后的对话框大小吧?
你得在OnInitDialog()里面先对m_rect进行初始化:GetClientRect(&m_rect);
------解决方案--------------------
对于是绘制的曲线静态控件,你应该在该控件添加WM_SIZING 消息处理函数. 在这里根据大小重新比例绘制