マウスホイールの回転量はウィンドウメッセージとして送信されてきます。

ここで受け取る回転量はコントロールパネルのスクロール設定には影響されない値です。

コントロールパネルでのスクロール量の設定は別途 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 );
}

↓ランキングに参加してます↓
ブログランキング・にほんブログ村へ
人気ブログランキングへ