求教 SDK 窗口 滚动条设置 几个语句的作用!!!!!!!!
case WM_VSCROLL:
{
si.cbSize = sizeof(si); //此语句必须设置为 结构体的大小
si.fMask = SIF_ALL; // 此语句 设置 和 后面的那一条语句 有什么联系??? 如果没有联系的话 有什么作用??
GetScrollInfo(hwnd, SB_VERT, &si); // 此 语句我的理解为 把窗口垂直滚动条信息 存入si结构体变量中
iVertPos = si.nPos; // 此语句 保存刚才得到的窗口滚动条位置 到 iVertPos 变量中
//下面的语句是 通过接收到的消息,改变si.nPos的值,
switch ( LOWORD(wParam))
{
case SB_TOP:
si.nPos = si.nMin;
break;
case SB_BOTTOM:
si.nPos = si.nMax;
break;
case SB_LINEUP:
si.nPos -= si.nPos;
break;
case SB_LINEDOWN:
si.nPos += si.nPos;
break;
case SB_PAGEUP:
si.nPos -= si.nPage;
break;
case SB_PAGEDOWN:
si.nPos += si.nPage;
break;
case SB_THUMBPOSITION:
si.nPos = si.nTrackPos;
break;
default:
break;
}
// 下面这3句的作用是什么?? 我理解的 通过刚才上面的保存原来的位置 ,再通过接收滚动条消息改变原来si.nPos的值,再比较两个值,
//改变的话就滚动更新窗口, 不改变的话不不变,, 这3句没有多大作用 , 百思不得其解,,谁可以帮我解释下。。
si.fMask = SIF_POS;
SetScrollInfo(hwnd, SB_VERT, &si, TRUE);
GetScrollInfo(hwnd, SB_VERT, &si);
// 和 原来保存的滚动条位置 进行比较,, 不同就滚动窗口, 相同就不处理
if ( si.nPos != iVertPos)
{
ScrollWindow(hwnd, 0, cyChar * (iVertPos - si.nPos), NULL, NULL);
UpdateWindow(hwnd);
}
return 0;
}
上面的 绿色注释 为我的理解, 觉得应该没有什么问题,, 红色注释的地方 有问题, 还请各位大大帮忙 解惑!!! 谢谢
[ 本帖最后由 missu_1314 于 2012-5-10 18:01 编辑 ]