12
1
2
3
4
5
6
7
8
9
10
11
12
14
15
16
17
18
19
21
22
23
25
26
27
29
30
31
   

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

一応DXライブラリでWin32APIからダブルクリック検出する方法(C#)

DXLIBの中身見るとわかるのですがWNDCLASSEXのstyleにCS_DBLCLKSが入っていません。
なので後処理を簡単にする(~の間に通知がくれば~)などをしなくてすむ簡単な方法がこれ・・・
たぶんハンドル(hWND)をDirectInput作成関数に投げればいいんだろうな~
とかは思ってますがそれをC#でやるか?
てかたぶん内部でDirectInputもってるだろうからそれを取得できればなぁ~とか
というお話ですがKeyBoardしか使わないゲームならそのままほっておけばいいし~(Hookしない)


というわけでどこで無理やりやっているかというとここでやってます。

///
/// キーの入力状態を保持していますUseMouse=falseのときはnullになります
///

public MouseStatus MouseStatus;
///
/// マウスを使用可能にする
///

/// 保持するMouseの位置情報
public void UsableMouse(int i)
{
UseMouse = true;
MouseStatus = new MouseStatus(i);
this.GameTimer.Update += this.OnMouseUpdate;
this.SetMouseHook(this.MouseHookProc);
DX.SetMouseDispFlag(1);


int j = (int)WindowMethods.SetClassLong(WHandle, WindowMethods.GCL_STYLE, (IntPtr)((long)WindowMethods.GetClassLongPtr(WHandle, WindowMethods.GCL_STYLE) | 0x08L));//DBClick許容にする
}



int j = (int)WindowMethods.SetClassLong(WHandle, WindowMethods.GCL_STYLE, (IntPtr)((long)WindowMethods.GetClassLongPtr(WHandle, WindowMethods.GCL_STYLE) | 0x08L));
です。

int j = (int)らへんはデバック用なので気にしないでください。

SetClassLongで(33bitならSetClassLong64bitならSetClassLongPtrを呼ぶ)設定変更してます。
WindowMethods.GCL_STYLEの値は-26ほかのも入れて列挙体にしようかな。とか思いましたが別に必要ないかなと

(IntPtr)((long)WindowMethods.GetClassLongPtr(WHandle, WindowMethods.GCL_STYLE) | 0x08L)

はWindowMethods.GetClassLongPtr(WHandle, WindowMethods.GCL_STYLE)でGCL_STYLEの値を取得して
それにCS_DBLCLKSの0x08のフラグを立てて再設定してます。

DXLibだとj=3が返るはず

あとは DInputData.MouseDeviceObject->GetDeviceStateがよべればなんとかなってたかも
スポンサーサイト

検索フォーム

RSSリンクの表示

リンク

リンクというか個人的によく使うアルゴリズムの解説サイト… C#でなかったりする

ブロとも申請フォーム

この人とブロともになる

QRコード

QRコード
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。