hinekure.net が http://hspdev-wiki.net/ から自動クローリングした結果を表示しています。画像やリソースなどのリンクが切れています。予めご了承ください。
ダブルクリック取得 - HSP開発wiki
トップ    編集凍結 差分バックアップ添付複製名前変更リロード   新規一覧単語検索最終更新   最終更新のRSS

小ワザ

hsp3.png

ダブルクリック取得

HSPのウィンドウ上でマウスのダブルクリックを取得します。

スクリプト

Everything is expanded.Everything is shortened.
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
#include "user32.as"
#define WM_LBUTTONDOWN   $0201
#define WM_LBUTTONDBLCLK $0203
#define WM_RBUTTONDOWN   $0204
#define WM_RBUTTONDBLCLK $0206
#define WM_MBUTTONDOWN   $0207
#define WM_MBUTTONDBLCLK $0209
 
    // ウィンドウクラスのスタイルに CS_DBLCLKS ($0008) を加えます。
    GetClassLong hwnd, -26
    SetClassLong hwnd, -26, stat | $0008
 
    oncmd gosub *On_LButtonDown  , WM_LBUTTONDOWN
    oncmd gosub *On_LButtonDblClk, WM_LBUTTONDBLCLK
    oncmd gosub *On_RButtonDown  , WM_RBUTTONDOWN
    oncmd gosub *On_RButtonDblClk, WM_RBUTTONDBLCLK
    oncmd gosub *On_MButtonDown  , WM_MBUTTONDOWN
    oncmd gosub *On_MButtonDblClk, WM_MBUTTONDBLCLK
    stop
 
 *On_LButtonDown
    mes "左シングルクリック"
    return
 *On_LButtonDblClk
    mes "左ダブルクリック"
    return
 *On_RButtonDown
    mes "右シングルクリック"
    return
 *On_RButtonDblClk
    mes "右ダブルクリック"
    return
 *On_MButtonDown
    mes "中シングルクリック"
    return
 *On_MButtonDblClk
    mes "中ダブルクリック"
    return

通常のマウスクリックメッセージは左ボタンであれば WM_LBUTTONDOWN -> WM_LBUTTONUP -> WM_LBUTTONDOWN -> WM_LBUTTONUP というように発生します。

ダブルクリックメッセージでは WM_LBUTTONDOWN -> WM_LBUTTONUP -> WM_LBUTTONDBLCLK -> WM_LBUTTONUP というように短い間で連続して発生した WM_LBUTTONDOWN を WM_LBUTTONDBLCLK として特別扱いします。

特別扱いなので通常とは違った設定にしてやらなければなりません。
これを行うにはウィンドウのクラススタイルに CS_DBLCLKS ( $0008 ) を加えてやります。

注目してほしいのはウィンドウスタイルではなくクラススタイルを変更するという点です。
次のスクリプトをよくみてください。

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
#include "user32.as"
#define WM_LBUTTONDOWN   $0201
#define WM_LBUTTONDBLCLK $0203
#define WM_RBUTTONDOWN   $0204
#define WM_RBUTTONDBLCLK $0206
#define WM_MBUTTONDOWN   $0207
#define WM_MBUTTONDBLCLK  $0209
 
    winx = ginfo_dispx/2
    screen 0, 320, 240, 0, winx/2-160, ginfo_dispy/2-120
    title "ID0"
 
    // ID0のクラススタイルを変更する
    GetClassLong hwnd, -26
    SetClassLong hwnd, -26, stat | $0008
 
    oncmd gosub *On_LButtonDblClk, WM_LBUTTONDBLCLK
 
    screen 2, 320, 240, 0, winx+80, ginfo_dispy/2-120
    title "ID2"
    oncmd gosub *On_LButtonDblClk, WM_LBUTTONDBLCLK
 
    stop
 
 *On_LButtonDblClk
    gsel ginfo(24)
    mes "左ダブルクリック"
    return

14〜15行目でクラススタイルを変更していますがこの時の hwnd はID0のウィンドウハンドルです。
ID0のウィンドウのウィンドウクラスを変更しているのでID2のウィンドウには影響なさそうですよね。

ちなみに26行目の意味は「 WM_LBUTTONDBLCLK メッセージを受け取ったウィンドウのIDを描画先に指定する」ですから、 ウィンドウクラスを変更していないID2には WM_LBUTTONDBLCLK メッセージは発生しないハズですね。

でも実際はどうですか?ID2のウィンドウでもダブルクリックを取得できています。
これはID0とID2とで同じウィンドウクラスを共有しているからです。

ウィンドウスタイルはウィンドウ毎の概観などを決定するためのもので異なるウィンドウのウィンドウスタイルを共有することはありません。
(同じウィンドウスタイルをもつ片方のウィンドウスタイルを変更しても、もう一方にはその変更は反映しません。)

しかしウィンドウクラスは共有することができるので同じウィンドウクラスを使っているウィンドウはそのウィンドウクラスを使っている全てのウィンドウに変更が反映されます。

ただし変更した内容が全てのウィンドウに瞬時に反映されるというわけではありません。

コメント


URL B I U SIZE Black Maroon Green Olive Navy Purple Teal Gray Silver Red Lime Yellow Blue Fuchsia Aqua White

トップ    編集凍結 差分バックアップ添付複製名前変更リロード   新規一覧単語検索最終更新   最終更新のRSS
Last-modified: 2007-04-08 (日) 02:38:59 (2436d)