在处理滚动消息时,用户应该设置绘制偏移量以反映新的坐标转换。
下面的例子展示了如何处理水平滚动消息:
//这是一个例子假设,我们有一个有效的铅油漆手柄和一个有效的
// LEAD位图句柄,用户已经初始化了当前水平
//和垂直滚动位置变量
BITMAPHANDLE g_PaintBitmap;
矩形g_rcBitmapView;
intg_nHScrollPos;
intg_nVScrollPos;
L_VOID OnHScroll (HWND HWND, HWND hWndCtl, L_UINT nCode, L_INT nPos)
{
SCROLLINFO si;
PAINTXFORM PntXForm;
UNREFERENCED_PARAMETER (nPos);
(hWndCtl);
si。cbSize =运算符(scrollinfo);
si。fMask = SIF_ALL;
GetScrollInfo (hWnd, SB_HORZ, &si);
g_nHScrollPos = si。非营利组织;
开关(nCode)
{
情况下SB_LINELEFT:
si。nPos -= 1;
打破;
情况下SB_LINERIGHT:
si。nPos += 1;
打破;
情况下SB_PAGELEFT:
si。非营利组织——= si。nPage;
打破;
情况下SB_PAGERIGHT:
si。非营利组织+ = si。nPage;
打破;
情况下SB_THUMBTRACK:
si。非营利组织= si。nTrackPos;
打破;
默认的:
打破;
}
si。fMask = SIF_POS;
SetScrollInfo (hWnd, SB_HORZ, &si, TRUE);
GetScrollInfo (hWnd, SB_HORZ, &si);
如果(si。nPos != g_nHScrollPos)
{
/ /更新屏幕。
OffsetRect (&g_rcBitmapView, (g_nHScrollPos - si.)nPos), 0);
ScrollWindow (hWnd, (g_nHScrollPos - si.)nPos), 0, NULL, NULL);
g_nHScrollPos = si。非营利组织;
更新窗口(hWnd);
//设置绘画转换。
PntXForm。nZoom = 100;
PntXForm。nXOffset = - g_rcBitmapView。离开;
PntXForm。nYOffset = - g_rcBitmapView。最高;
l_pntsettransform (g_pPaintHandle, &PntXForm);
}
}