スクロールバーを使用して値を変更しようとしています。
しかし、最大値が (最大値 - ページサイズ - 1)になってしまいます。
何故でしょう。仕様なのでしょうか。
開発環境は Win2000 VC6++Pro SDKです
以下にソースの一部を記載します。
//スクロールバーの作成
SCROLLINFO Info;
Info.cbSize = sizeof(SCROLLINFO);
Info.fMask = SIF_PAGE | SIF_RANGE | SIF_POS;
Info.nMax = 100;
Info.nMin = 0;
Info.nPage = 10;
Info.nPos = 0;
HWND h = ::CreateWindowEx(0,SCROLLBAR,NULL,
WS_CHILD |SBS_HORZ,20,200,300,50,hWnd,
HMENU(200),hInstance,NULL);
::SetScrollInfo(h,SB_CTL,&Info,TRUE);
::ShowWindow(h,SW_SHOWNORMAL);
//WM_HSCROLLの処理
SCROLLINFO info;
info.cbSize = sizeof(SCROLLINFO);
info.fMask = SIF_ALL;
::GetScrollInfo((HWND)lParam,SB_CTL,&info);
switch(LOWORD(wParam))
{
case SB_LINERIGHT:
info.nPos++;
break;
case SB_PAGERIGHT:
info.nPos += info.nPage;
break;
case SB_LINELEFT:
info.nPos--;
break;
case SB_PAGELEFT:
info.nPos -= info.nPage;
break;
}
if(info.nPos > info.nMax)
info.nPos = info.nMax;
else if(info.nPos < info.nMin)
info.nPos = info.nMin;
HDC hDC = ::GetDC(hWnd);
char str[128];
itoa(info.nPos,str,10);
::TextOut(hDC,0,0,str,strlen(str));
::ReleaseDC(hWnd,hDC);
::SetScrollInfo((HWND)lParam,SB_CTL,&info,TRUE);
自己解決しました。
過去ログによると仕様のようです。
ろくに調べもせず質問してしまってすみませんでした。