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イベントを拾ってそうな気配はありましたが、記述次第な気もします。
その他、何か気が付いた場合は改めて報告させていただきます。
大変助かりました、ありがとうございます。
|