回答編集履歴

4

サンプルソースを追加

2019/02/25 18:04

投稿

atata0319
atata0319

スコア881

test CHANGED
@@ -10,7 +10,11 @@
10
10
 
11
11
 
12
12
 
13
- LWA_COLORKEY で透過させたウィンドウの同じ位置・同じサイズに LWA_ALPHA を指定した別ウィンドウを配置する手法です。そのウィンドウでマウスを処理させることにより透過されつつマウス動作を実現します。アルファ値が 0 だとマウスが透過してしまうので、必ず1以上を指定する必要があります。アルファブレンドされるため、完全に元のイメージのままではありませんが、下の案よりは比較的ましな動きをします。
13
+ ~~LWA_COLORKEY で透過させたウィンドウの同じ位置・同じサイズに LWA_ALPHA を指定した別ウィンドウを配置する手法です。そのウィンドウでマウスを処理させることにより透過されつつマウス動作を実現します。アルファ値が 0 だとマウスが透過してしまうので、必ず1以上を指定する必要があります。アルファブレンドされるため、完全に元のイメージのままではありませんが、下の案よりは比較的ましな動きをします。~~
14
+
15
+ 実際には LWA_ALPHA を指定しなくても WS_EX_LAYERED スタイルを指定すれば、完全に透過してマウスメッセージを受け取れるウィンドウが作成可能でした。元のウィンドウの位置にピッタリ合わせて動かす部分も含めて検証したので、以下のコードを確認してみてください。
16
+
17
+ [https://github.com/atata0319/teratail176225](https://github.com/atata0319/teratail176225)
14
18
 
15
19
 
16
20
 

3

質問内容変更に合わせて修正

2019/02/25 18:04

投稿

atata0319
atata0319

スコア881

test CHANGED
@@ -1,8 +1,6 @@
1
- > SetLayeredWindowAttributesの透過部分のKeydown等のメッセージは受け取るようにはできませんか?
1
+ > SetLayeredWindowAttributesの透過部分のLBUTTONDOWN等のメッセージは受け取るようにはできませんか?
2
2
 
3
3
 
4
-
5
- おそらく WM_KEYDOWN ではなく WM_MOUSExxx メッセージの話だと思って回答します。
6
4
 
7
5
  非常に残念ですが、WS_EX_LAYERED なウィンドウを LWA_COLORKEY で透過させた場合、そのウィンドウで直接マウスメッセージを受け取る手段はおそらくありません。とりあえず、回避策として私が提案できるのは以下のものになります。
8
6
 

2

誤字の修正

2019/02/25 01:17

投稿

atata0319
atata0319

スコア881

test CHANGED
@@ -18,7 +18,7 @@
18
18
 
19
19
 
20
20
 
21
- #2.WM_CAPTURE でマウスメッセージをキャプチャする手法
21
+ #2.SetCapture でマウスメッセージをキャプチャする手法
22
22
 
23
23
 
24
24
 

1

誤字の修正

2019/02/24 19:27

投稿

atata0319
atata0319

スコア881

test CHANGED
@@ -42,4 +42,4 @@
42
42
 
43
43
 
44
44
 
45
- とほぼ同じですが問題も多いので、あまりお勧めしません。グローバルフック側でマウスメッセージを処理しなかった場合、怪しい動作が多いもので・・・。
45
+ とほぼ同じですが問題も多いので、あまりお勧めしません。グローバルフック側でマウスメッセージを処理しなかった場合、怪しい動作が多いもので・・・。