マウスホイールの回転量はウィンドウメッセージとして送信されてきます。
ここで受け取る回転量はコントロールパネルのスクロール設定には影響されない値です。
コントロールパネルでのスクロール量の設定は別途 SystemParametersInfo 関数を使用して取得してください。
垂直スクロール
いわゆるフツーのホイールの回転。
メッセージは WM_MOUSEWHEEL です。
コントロールパネルでの設定は SPI_GETWHEELSCROLLLINES で取得できます。
// ウィンドウのコールバック関数 LRESULT CALLBACK WndProc( HWND hWnd, UINT nMsg, WPARAM wParam, LPARAM lParam ) { static int nWheelFraction = 0; // 回転量の端数 switch( nMsg ) { case WM_ACTIVATE: // ウィンドウのアクティブ切り替え時に端数をリセット nWheelFraction = 0; break; case WM_MOUSEWHEEL: { DWORD fwKeys = GET_KEYSTATE_WPARAM(wParam); // 同時に押されているキー情報 int zDelta = GET_WHEEL_DELTA_WPARAM(wParam); // 回転量 int x = GET_X_LPARAM(lParam); // 回転時のマウスカーソルのクライアント座標X int y = GET_Y_LPARAM(lParam); // 回転時のマウスカーソルのクライアント座標Y // 前回の端数を追加 zDelta += nWheelFraction; // ノッチ数を求める int nNotch = zDelta / WHEEL_DELTA; // 端数を保存する nWheelFraction = zDelta % WHEEL_DELTA; if( nNotch > 0 ) { // ↑に回転(チルト)した } else if( nNotch < 0 ) { // ↓に回転(チルト)した } } // 親ウィンドウにメッセージを渡さないためにプロシージャを終了する return 0; } return DefWindowProc( hWnd, nMsg, wParam, lParam ); }
水平スクロール
いわゆるホイールのチルト。
メッセージは WM_MOUSEHWHEEL です。
コントロールパネルでの設定は SPI_GETWHEELSCROLLCHARS で取得できます。
// ウィンドウのコールバック関数 LRESULT CALLBACK WndProc( HWND hWnd, UINT nMsg, WPARAM wParam, LPARAM lParam ) { static int nWheelFraction = 0; // 回転量の端数 switch( nMsg ) { case WM_ACTIVATE: // ウィンドウのアクティブ切り替え時に端数をリセット nWheelFraction = 0; break; case WM_MOUSEHWHEEL: { DWORD fwKeys = GET_KEYSTATE_WPARAM(wParam); // 同時に押されているキー情報 int zDelta = GET_WHEEL_DELTA_WPARAM(wParam); // 回転量 int x = GET_X_LPARAM(lParam); // 回転時のマウスカーソルのクライアント座標X int y = GET_Y_LPARAM(lParam); // 回転時のマウスカーソルのクライアント座標Y // 前回の端数を追加 zDelta += nWheelFraction; // ノッチ数を求める int nNotch = zDelta / WHEEL_DELTA; // 端数を保存する nWheelFraction = zDelta % WHEEL_DELTA; if( nNotch > 0 ) { // →に回転(チルト)した } else if( nNotch < 0 ) { // ←に回転(チルト)した } } // 親ウィンドウにメッセージを渡さないためにプロシージャを終了する return 0; } return DefWindowProc( hWnd, nMsg, wParam, lParam ); }