teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

3

SetWindowPlacement API

2015/12/24 07:47

投稿

yuba
yuba

スコア5570

title CHANGED
File without changes
body CHANGED
@@ -39,4 +39,13 @@
39
39
 
40
40
  --- 追記 ---
41
41
 
42
- 「終了時位置再現など邪悪な機能である、搭載しようとすべきでない」などといったご意見でも歓迎です。
42
+ 「終了時位置再現など邪悪な機能である、搭載しようとすべきでない」などといったご意見でも歓迎です。
43
+
44
+
45
+ --- 追記 ---
46
+
47
+ プラットフォーム非限定の形で質問をしていましたが実際にはWindows開発でして、しかもWindowsではAPIがちゃんとありました。
48
+ [SetWindowPlacement関数](https://msdn.microsoft.com/ja-jp/library/cc411205.aspx)
49
+ 画面外にはみ出す場合のみ位置を補正してくれる座標設定関数です。
50
+
51
+ クリップされている方もいらっしゃり、他プラットフォームの場合についてのノウハウも集まればなお良いのでまだ質問は開いておきます。

2

ちゃぶ台返しも歓迎

2015/12/24 07:47

投稿

yuba
yuba

スコア5570

title CHANGED
File without changes
body CHANGED
@@ -35,4 +35,8 @@
35
35
  ・ウィンドウ左上端
36
36
  ・ウィンドウ左上端から(24,24)
37
37
 
38
- この条件を満たすなら、少なくともウィンドウの存在に気付いて適切な位置に移動することは可能ですから。
38
+ この条件を満たすなら、少なくともウィンドウの存在に気付いて適切な位置に移動することは可能ですから。
39
+
40
+ --- 追記 ---
41
+
42
+ 「終了時位置再現など邪悪な機能である、搭載しようとすべきでない」などといったご意見でも歓迎です。

1

簡略化した判定条件を追記

2015/12/24 01:46

投稿

yuba
yuba

スコア5570

title CHANGED
File without changes
body CHANGED
@@ -10,13 +10,29 @@
10
10
  - 仮想デスクトップ領域に含まれるかどうかで判定しようとすると、仮想デスクトップ内だけどどのディスプレイにも含まれない領域という落とし穴があります
11
11
  - どれかのディスプレイ領域に含まれるという条件で反対しようとすると、ディスプレイにまたがって表示されているときにアウト判定されてしまいます
12
12
 
13
+
13
14
  一応これらを考慮した上でたった今ひねり出した判定条件が
14
15
 
15
16
  - ウィンドウの矩形内のすべての点が、いずれかのディスプレイ領域(ただし第一ディスプレイについてはタスクバーを除いたワークスペース領域)の矩形に含まれること
16
17
  = ウィンドウの矩形と各ディスプレイ領域の矩形の重なりの面積の合計が、ウィンドウの面積と等しいこと
17
18
 
19
+
18
20
  となったのですが、ここで疑問は、こんなややこしい判定をどのアプリもやっているものなのか?
19
21
  何かもっとスマートな定石はないものか?
20
22
  という点です。
21
23
 
22
- プラットフォーム依存の解決でも構いません、ノウハウをお持ちでしたら教えてください。
24
+ プラットフォーム依存の解決でも構いません、ノウハウをお持ちでしたら教えてください。
25
+
26
+ --- 追記 ---
27
+
28
+ 条件はこう簡略化してもだいたい問題ないですかね。
29
+
30
+ ●ウィンドウの4隅の点がそれぞれ、いずれかのディスプレイ矩形内に入っている
31
+
32
+ さらには、ウィンドウ全体が表示されていることまで望まなければ
33
+
34
+ ●次の2つの点が、いずれかのディスプレイ矩形内に入っている
35
+ ・ウィンドウ左上端
36
+ ・ウィンドウ左上端から(24,24)
37
+
38
+ この条件を満たすなら、少なくともウィンドウの存在に気付いて適切な位置に移動することは可能ですから。