16,472
社区成员
发帖
与我相关
我的任务
分享
static SCROLLINFO si = { sizeof(si) };
static int cyClient;
static int LastPos;
int NowPos = 0;
switch (message)
{
case WM_SIZE:
cyClient = HIWORD(lParam);
si.fMask = SIF_ALL;
si.nMin = 0;
si.nMax = NUMLINES - 1;
si.nPos = 0;
si.nPage = cyClient / cyChar;
SetScrollInfo(hwnd,SB_VERT,&si,TRUE);
return 0;
case WM_VSCROLL:
switch (LOWORD(wParam))
{
case SB_LINEUP:
NowPos = LastPos - 1;
break;
case SB_LINEDOWN:
NowPos = LastPos + 1;
break;
case SB_PAGEUP:
NowPos = LastPos - cyClient / cyChar;
break;
case SB_PAGEDOWN:
NowPos = LastPos + cyClient /cyChar;
break;
case SB_THUMBTRACK:
NowPos = HIWORD(wParam);
break;
}
if (NowPos > si.nMax)//使坐标 在[MIN,MAX]中
{
NowPos = si.nMax;
}
if (NowPos < si.nMin)
{
NowPos = si.nMin;
}
si.fMask = SIF_POS;
si.nPos = NowPos;//设置新坐标
if (NowPos != LastPos)
{
SetScrollInfo(hwnd,SB_VERT,&si,TRUE);//没效果????
InvalidateRect(hwnd, NULL, TRUE);
LastPos = si.nPos;
}
return 0;