トップページ > 過去ログ > 記事閲覧
スクロールの左右検出
名前:クラスクラス 日時: 2011/05/10 14:58

いつもお世話になっております。 マウスのスクロールのロールに左右のボタンがついているものが最近多く、左右のスクロールに使用されています。 これを検出する方法がないでしょうか?

Page: 1 |

Re: スクロールの左右検出 ( No.1 )
名前:管理人 日時:2011/05/21 14:52

マウスのボタン入力状態を表示するだけのプログラムを組んでみました こちらのプログラムを実行してウインドウ上で左右ボタンを押してみてください もし画面に表示される数字が変化したら GetMouseInput で検出できることになります 数値と定義の関係はこちらです MOUSE_INPUT_1 0x1 // マウス1ボタン MOUSE_INPUT_2 0x2 // マウス2ボタン MOUSE_INPUT_3 0x4 // マウス3ボタン MOUSE_INPUT_4 0x8 // マウス4ボタン MOUSE_INPUT_5 0x10 // マウス5ボタン MOUSE_INPUT_6 0x20 // マウス6ボタン MOUSE_INPUT_7 0x40 // マウス7ボタン MOUSE_INPUT_8 0x80 // マウス8ボタン #include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { // ウインドウモードで起動 ChangeWindowMode( true ); // DXライブラリの初期化 if( DxLib_Init() == -1 ) return -1; // 裏画面を描画対象にする SetDrawScreen( DX_SCREEN_BACK ) ; // メインループ while( ProcessMessage() == 0 ) { // 画面を初期化 ClearDrawScreen() ; // マウスのボタン入力状態を画面に描画 DrawFormatString( 0, 0, GetColor(255,255,255), "0x%x", GetMouseInput() ) ; // 裏画面の内容を表画面に反映する ScreenFlip() ; } // DXライブラリの後始末 DxLib_End() ; return 0 ; }
Re: スクロールの左右検出 ( No.2 )
名前:クラスクラス 日時:2011/05/22 18:25

お忙しいところ、ありがとうございます。 はい、これと同等のことをやっていました、これもやりましたが、フラグの数値は出ませんでした。 Excel等で左右スクロールはしているので動作はしていると考えています。 私のマウスが特殊? なのかもしれませんね。 マウスは ELECOM の M-D20DR と言う安物です。 何が違うのだろう… 他の方は正しく検出しているのだろうか?
Re: スクロールの左右検出 ( No.3 )
名前:管理人 日時:2011/05/29 14:47

すいません、私の認識違いでした マウスのホイールを左右に傾ける機能のことだったんですね こちらは縦ホイールの回転と同じ性質のものなのでボタンのように「押しているかどうか」を 検出することはできませんが、倒していると一定間隔で「水平方向に回転した」というシグナルを 得ることができましたので、そのシグナルを受けた回数を縦ホイールと同じように 取得するための関数を追加しました よろしければこちらのバージョンをダウンロードしてください m(_ _)m http://homepage2.nifty.com/natupaji/DxLib/DxLibVCTest.exe // VisualC++ 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibBCCTest.exe // BorlandC++ 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibGCCTest.exe // Gnu C++ 用 (中身を既存のライブラリのファイルに上書きして、BCCをお使いの 場合は『再構築』を、VCをお使いの場合は『リビルド』を、 Dev-C++をお使いの方は「Rebuild All(Ctrl+F11)」をして下さい) こちらの関数を追加しました // 水平マウスホイールの回転量を得る // CounterReset : 回転量カウンタをリセットするかどうか( TRUE:リセットする FALSE:リセットしない ) int GetMouseHWheelRotVol( int CounterReset ) ; 検出されているかどうかを確かめるためのプログラムを組んでみましたので、 よろしければお試しになってみてください #include "DxLib.h" int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR lpCmdLine, int nCmdShow) { // ウインドウモードで起動 ChangeWindowMode( TRUE ) ; // DXライブラリの初期化 if( DxLib_Init() < 0 ) return -1 ; // 描画先を裏画面にする SetDrawScreen( DX_SCREEN_BACK ) ; // メインループ while( ProcessMessage() == 0 ) { // 画面を初期化 ClearDrawScreen() ; // 水平回転量を画面に描画 DrawFormatString( 0, 0, GetColor( 255,255,255 ), _T( "MOUSEHWHEEL:%d" ), GetMouseHWheelRotVol( FALSE ) ) ; // 裏画面の内容を表画面に反映 ScreenFlip() ; } // DXライブラリの後始末 DxLib_End() ; return 0 ; } ただ、左右スクロール( チルトホイール )の機能が Windowsの標準機能として正式に 実装されたのは Vista 以降で、XP では各社独自の仕様を用いて水平スクロールを 実現していることもあるそうです( 左右に倒されたら水平ホイールシグナルではなく、 普通の水平スクロールシグナルを発信するなど ) XP でも Vista が登場した後に Vista 以降の仕様に沿って作成されたドライバを 使っているマウスの場合は水平ホイールシグナルをOSに発信していることもあるみたいですが、 そのようになっているかどうかはマウスのドライバ次第のようです ( あと、Vista 以降では標準機能なのでOS標準のドライバで水平ホイールの機能を使える ( 水平ホイールがあるマウスをUSBポートに接続するだけで水平ホイール機能が使える )のですが、 XP ではOS標準ドライバでは対応していないので、必ず各マウス用のドライバをインストール されている必要があります ) 今回DXライブラリで対応したのは Vista以降に標準機能として搭載された水平ホイールシグナル だけですので、XP 以前にもあった水平スクロールシグナルを発信して水平スクロール機能を 実現しているタイプのマウスの場合は検出することができません XP でも水平ホイールシグナルを発信するマウスが殆どだと良いのですが・・・
Re: スクロールの左右検出 ( No.4 )
名前:クラスクラス(解決) 日時:2011/05/31 12:02

お忙しいところ、ありがとうございます。 色々調べていただきありがとうございます。 OSはXPでした、なおかつエレコム社のドライバーは 左右スクロールの設定以外は、 何かの機能に割り当てるだけで、水平ホイールシグナルを出すことができませんでした。 XPはまだ多くのユーザーが使用しているので、水平ホイールによる、左右ロールのサポートを当面しないことにしました。 本当にありがとうございます。

Page: 1 |