|
|
// *********************************************************
// スクロールの最大値とページの最大値をセット
// *********************************************************
void
SetScrollRange( HWND hWnd, int nHeight, int nWidth )
{
ZeroMemory(&si, sizeof( SCROLLINFO ));
si.cbSize = sizeof( SCROLLINFO );
si.fMask = SIF_RANGE | SIF_PAGE;
si.nMin = 0;
GetClientRect( hWnd, &rt );
si.nMax = nHeight;
si.nPage = rt.bottom;
SetScrollInfo( hWnd, SB_VERT, &si, true );
ZeroMemory(&si2, sizeof( SCROLLINFO ));
si2.cbSize = sizeof( SCROLLINFO );
si2.fMask = SIF_RANGE | SIF_PAGE;
si2.nMin = 0;
si2.nMax = nWidth;
si2.nPage = rt.right;
SetScrollInfo( hWnd, SB_HORZ, &si2, true );
RedrawWindow( hWnd, NULL, NULL, RDW_ERASE | RDW_INVALIDATE );
}
| |
|
|
|
|
void SetScrollRange( HWND hWnd, int nHeight, int nWidth );
| |
|
|
|
|
case WM_PAINT:
hdc = BeginPaint (hWnd, &ps);
StretchBlt( hdc,
0,
0,
bmap.bmWidth,
bmap.bmHeight,
hDCMem,
si2.nPos,
si.nPos,
bmap.bmWidth,
bmap.bmHeight,
SRCCOPY );
EndPaint( hWnd, &ps );
break;
| |
|
|
|
|
case WM_HSCROLL:
// スクロール情報を初期化
ZeroMemory(&si2, sizeof( SCROLLINFO ));
si2.cbSize = sizeof( SCROLLINFO );
// パラメータに「位置情報」を取り込む
// ように指示
si2.fMask = SIF_POS;
// 縦方向の位置情報を読み出す
GetScrollInfo( hWnd, SB_HORZ, &si2 );
// つまりこの時点では現在の情報を
// 読み出したのみで何にも変更されていない
switch( LOWORD(wParam) ) {
case SB_LINEDOWN: // 1 行下へスクロール。
si2.nPos++;
if ( si2.nPos > bmap.bmWidth ) {
si2.nPos = bmap.bmWidth;
}
break;
case SB_LINEUP: // 1 行上へスクロール。
si2.nPos--;
if ( si2.nPos < 0 ) {
si2.nPos = 0;
}
break;
case SB_PAGEDOWN: // 1 ページ下へスクロール。
GetClientRect( hWnd, &rt );
si2.nPos += rt.right;
if ( si2.nPos + rt.right > bmap.bmWidth ) {
si2.nPos = bmap.bmWidth - rt.right + 1;
}
break;
case SB_PAGEUP: // 1 ページ上へスクロール。
GetClientRect( hWnd, &rt );
si2.nPos -= rt.right;
if ( si2.nPos < 0 ) {
si2.nPos = 0;
}
break;
case SB_THUMBTRACK: // スクロール ボックスを指定位置へドラッグ。
si2.cbSize = sizeof( SCROLLINFO );
si2.fMask = SIF_TRACKPOS;
GetScrollInfo( hWnd, SB_HORZ, &si2 );
GetClientRect( hWnd, &rt );
si2.nPos = si2.nTrackPos;
break;
default:
return 0;
}
// ここまでで、si2.nPos が変更されている
// その変更された情報をスクロール側に登録して
// スクロールの状態を変更させる
si2.cbSize = sizeof( SCROLLINFO );
si2.fMask = SIF_POS;
SetScrollInfo( hWnd, SB_HORZ, &si2, true );
UpdateWindow( hWnd );
RedrawWindow( hWnd, NULL, NULL, RDW_ERASE | RDW_INVALIDATE );
break;
| |
|
|
|