トップページ > 記事閲覧
C#でのGetMouseWheelRotVol関数
名前:まいたけ 日時: 2020/05/08 18:06

お世話になります。 C#でDxlibを参照しています。 int nWheel = DX.GetMouseHWheelRotVol(); float fWheel = DX.GetMouseHWheelRotVolF(); 上記ソースでざっくり動かしているのですが取得できる値が0から変動しません。 C#自体がMouseWheelイベントを拾いづらいのもあって、 MouseWheelイベントを追加して関数内でDXlibの関数をコールしてみたりしましたが解決しません。 何かお気づきの点などあればご教示いただけますでしょうか? 下記動作確認時のソースです、宜しくお願いします。 public Form1() { InitializeComponent(); txtScale.MouseWheel += new MouseEventHandler(this.txtScale_MouseWheel); } private void txtScale_MouseWheel(object sender, MouseEventArgs e) { int nVal = e.Delta; float fval = DxLibDLL.DX.GetMouseWheelRotVolF(); if (fval != 0.0f) { // } }
メンテ

Page: 1 |

Re: C#でのGetMouseWheelRotVol関数 ( No.1 )
名前:管理人 日時:2020/05/09 11:15

手元で以下のようなプログラムを組んでみましたのですが、正常にホイールの回転値を 取得することができました // ウィンドウモードで起動 DX.ChangeWindowMode( DX.TRUE ); // DXライブラリを初期化 DX.DxLib_Init(); // 描画先を裏画面に変更 DX.SetDrawScreen( DX.DX_SCREEN_BACK ); // マウスホイールの回転値のカウンタを初期化 int MouseWheelCounter = 0; // メインループ while( DX.ProcessMessage() == 0 ) { // 画面をクリア DX.ClearDrawScreen(); // マウスホイールの回転値をカウンターに加算 MouseWheelCounter += DX.GetMouseWheelRotVol(); // マウスホイールの回転のカウント値を画面に描画 DX.DrawString(0, 0, MouseWheelCounter.ToString(), DX.GetColor(255, 255, 255)); // 裏画面の内容を表画面に反映 DX.ScreenFlip(); } // DXライブラリの後始末 DX.DxLib_End(); ホイールの回転値は定期的に DX.ProcessMessage を呼ばないと正常に取得できないので、 もし呼んでいませんでしたら上記のプログラムのように定期的に DX.ProcessMessage を 呼ぶようにしてください ( あと、DxLib_Init を呼んで作成されたウィンドウ上でのホイールの回転しか取得できませんので、  DxLib_Init を呼ばずに DX.GetMouseWheelRotVol を単体で呼んだ場合は回転値は取得できません )
メンテ
Re: C#でのGetMouseWheelRotVol関数 ( No.2 )
名前:まいたけ 日時:2020/05/09 14:50

TO:管理人様 ご回答いただきありがとうございます。 また、サンプルソースを作成頂き大変助かりました。 ご提示いただいたサンプルソースで期待する動作が確認できました。 1点追加で質問させてください。 後出しで申し訳ないのですが、SetUserWindowにて自フォームを親として実装したいと考えております。 Dxlib由来のウィンドウであれば動作するのですが、フォームに紐づけしている状態で GetMouseWheelRotVol() を扱う事は出来ますでしょうか? #隠し関数に記載されていたのと、掲示板でDxLib準拠のWindow以外の動作は保証できない様な話も見かけたので、 #そもそも当方の扱い方(設計)が誤っている気もしていますが... ソースは頂いたサンプルのChangeWindowMode() 呼び出し前に 「DX.SetUserWindow(Handle);」を追加しているのと、 ループ部は関数化して、別クラスからコールしております。 #Dxlibのウィンドウでは正常動作する構成です。 お手数をお掛けしますが、お気づきの点ありましたらご教示お願いいたします。
メンテ
Re: C#でのGetMouseWheelRotVol関数 ( No.3 )
名前:あいおい? 日時:2020/05/09 18:19

横からで申し訳ないのですが、 Application.Idle にDX.ProcessMessage() を実行するようにしておけば、マウスやその他の描画処理なども問題なく行えるはずです。
メンテ
Re: C#でのGetMouseWheelRotVol関数 ( No.4 )
名前:まいたけ 日時:2020/05/10 01:00

TO:あいおい様 ご回答ありがとうございます。 Application.Idleについてお恥ずかしながら存じ上げませんでした。(DoEventsで処理していました) ループ処理でProcessMessage()をコールしているだけだと割り込み処理が拾えないようなイメージで合っていますか? 親として渡しているFormに下記を追加してみましたが、挙動変わらずでした。 private void Form1_Load(object sender, EventArgs e) { Application.Idle += new EventHandler(IdleMethod); } private void IdleMethod(object sender, EventArgs e) { DX.ProcessMessage(); } 基礎的な部分で当方の理解が足りてない気がするので、 色々試してみたいと思います、ご助言感謝致します。
メンテ
Re: C#でのGetMouseWheelRotVol関数 ( No.5 )
名前:管理人 日時:2020/05/10 22:54

> 後出しで申し訳ないのですが、SetUserWindowにて自フォームを親として実装したいと考えております。 > Dxlib由来のウィンドウであれば動作するのですが、フォームに紐づけしている状態で > GetMouseWheelRotVol() を扱う事は出来ますでしょうか? SetUserWindow を使用する場合でホイールの回転を取得されたい場合は DxLib_Init の呼び出しの前に SetUseDirectInputFlag( TRUE ); という記述を増やして、DirectInput を使用するようにしてください
メンテ
Re: C#でのGetMouseWheelRotVol関数 ( No.6 )
名前:まいたけ(解決) 日時:2020/05/13 22:34

TO:管理人様 ご回答いただきましてありがとうございます! ご教示頂いた内容で希望する動作が確認出来ました。 DirectInputは潜在バグがありそう・・・?との記載を見かけましたが、 現状動かしてる限りでは怪しい挙動は見つかりませんでした。 #別窓選択時もInputイベントを拾ってそうな気配はありましたが、記述次第な気もします。 その他、何か気が付いた場合は改めて報告させていただきます。 大変助かりました、ありがとうございます。
メンテ

Page: 1 |

題名
名前
コメント
パスワード (記事メンテ時に使用)

   クッキー保存