HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2018
0428
らーんWM_ LBUTTONDOWN について3解決


らーん

リンク

2018/4/28(Sat) 21:38:57|NO.84200

Mesbox内でクリックした時のWM_LBUTTONDOWNメッセージを受けとる方法を教えてください。よろしくお願いします。



この記事に返信する


科学太郎

リンク

2018/4/28(Sat) 23:16:58|NO.84202

ネットなどで「HSP サブクラス」というキーワードで検索します。

・サブクラス化
http://hsp.tv/play/pforum.php?mode=pastwch&num=77604

このような過去ログが見つかりますよ。



あらや

リンク

2018/4/28(Sat) 23:21:16|NO.84203

少し前のマウスホイール取得で作った自分のソースを改造しました。
http://hsp.tv/play/pforum.php?mode=all&num=84110

今回はWH_MOUSEでやろうと思ったのですが、なぜかWH_MOUSEだとフックできなかったので
前回と同じWH_MOUSE_LLに
WindowFromPointを使用してマウス直下のウィンドウハンドル取得
という組み合わせで、左クリック時の操作対象ウィンドウ取得という形にしました。

#include "modclbk3.hsp" #define NULL 0 #define WH_MOUSE_LL 14 #define WM_LBUTTONDOWN 0x0201 #uselib "user32.dll" #cfunc SetWindowsHookEx "SetWindowsHookExA" int, int, int, int #func UnhookWindowsHookEx "UnhookWindowsHookEx" int #cfunc CallNextHookEx "CallNextHookEx" int, int, int, int #cfunc WindowFromPoint "WindowFromPoint" int, int sdim s, 65535; mesbox s, ginfo_winx, ginfo_winy, 5; mbh = objinfo(stat, 2); // mesboxのウィンドウハンドル取得 cbl = *MouseProc; newclbk3 clbkptr, 3, cbl; hhook = SetWindowsHookEx( WH_MOUSE_LL, clbkptr, NULL, 0 ); // マウス操作を感知した場合ウェイト中に割り込みが入る if( hhook == NULL ):end; onexit goto *hookend; stop; // フックのコールバック *MouseProc dupptr Mstate, lparam, wparam*4, 4; // Mstate(0)=フックコード(nCode) Mstate(1)=メッセージ識別子(wParam) Mstate(2)=メッセージデータ(lParam) if( Mstate(0) < 0 ) { // フックコードが0未満の場合はフックを中止して制御を元に戻さなければいけない。 return CallNextHookEx( hhook, Mstate(0), Mstate(1), Mstate(2) ); } if( Mstate(1) == WM_LBUTTONDOWN ) { hw = WindowFromPoint(ginfo_mx, ginfo_my); // マウス直下のウィンドウのハンドル取得 if( hw == mbh ):dialog "左クリック"; // 取得したハンドルとmesboxのハンドルが一致したときダイアログ } return CallNextHookEx( hhook, Mstate(0), Mstate(1), Mstate(2) ); // フックしたデータをそのまま返す *hookend UnhookWindowsHookEx hhook; // フックの終了 end;

以前のスレでinoviaさんが仰っていた
RAWINPUTでも可能かもしれませんが、
慣れた方でやらせていただきました。



らーん

リンク

2018/4/29(Sun) 17:26:51|NO.84213

ありがとうございます。参考にさせて頂きます。




ONION software Copyright 1997-2023(c) All rights reserved.