MFC图像缩放时使滚动条最大值根据图像高宽进行变换。
void CChildView::ResetScrollBar(int cx, int cy)
{
CConfiguration* pCofig = CConfiguration::GetInstance();
// 缩放最大最小比例
double minScale = pCofig->GetMinScale();//0.6;
double maxScale = pCofig->GetMaxScale();//2.0;
// 显示的长宽
double viewHeight = m_pDrawManager->GetAllTableSizeHeight();//m_pDrawManager->GetChannelNum()*230+10;
double viewWidth = m_pDrawManager->GetAllTableSizeWidth();//1205;
// 缩放系数
double yScale = cy/viewHeight;
double xScale = (cx-emDrawManagerPosX)/viewWidth;
double scale = 1.0;
if (abs(xScale) > abs(yScale))
{
scale = xScale;
}
else
{
scale = yScale;
}
if (scale < minScale)
{
scale = minScale;
}
else if (scale > maxScale)
{
scale = maxScale;
}
m_pDrawManager->SetScaleFactor(scale);
int tpos = 0;
SCROLLINFO svc;
GetScrollInfo(SB_VERT, &svc);
tpos = svc.nPos;
svc.fMask = SIF_ALL;
svc.nMax = (int)(viewHeight*scale);
svc.nMin = 0;
svc.nPage = cy;
svc.nPos = (int)(tpos*scale);
SetScrollInfo(SB_VERT, &svc, TRUE);
SCROLLINFO shc;
GetScrollInfo(SB_HORZ, &shc);
tpos = shc.nPos;
shc.fMask = SIF_ALL;
shc.nMax = (int)(viewWidth*scale);
shc.nMin = 0;
shc.nPage = cx;
shc.nPos = (int)(tpos*scale);
SetScrollInfo(SB_HORZ, &shc, TRUE);
}