MFC图像缩放时使滚动条最大值根据图像高宽进行变换。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
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);
}