2)-4 横方向のスクロールバーの動きと、画像を同期させる

  グローバル変数

  
SCROLLINFO si2;

  



  SetScrollRange関数の変更



  
// *********************************************************
// スクロールの最大値とページの最大値をセット
// *********************************************************
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 );

  



  WM_PAINT部の変更

  
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;

  










  infoboard   管理者用   
このエントリーをはてなブックマークに追加





フリーフォントWEBサービス
SQLの窓WEBサービス

SQLの窓フリーソフト

素材

一般WEBツールリンク

SQLの窓

フリーソフト

JSライブラリ