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

回答編集履歴

2

常に最背面にする場合の方法を追加

2017/10/11 06:18

投稿

Harahira
Harahira

スコア245

answer CHANGED
@@ -15,4 +15,47 @@
15
15
 
16
16
  以下を参考にしてください。
17
17
 
18
- [SetWindowPos (user32)](http://www.pinvoke.net/default.aspx/user32/SetWindowPos.html)
18
+ [SetWindowPos (user32)](http://www.pinvoke.net/default.aspx/user32/SetWindowPos.html)
19
+
20
+ ---
21
+ 追記2
22
+
23
+ 常に最背面にしたいということであれば、以下のコードで実現できます。
24
+ ```C#
25
+ public partial class Form1 : Form
26
+ {
27
+ private const int WM_WINDOWPOSCHANGING = 0x0046;
28
+ private IntPtr HWND_BOTTOM = (IntPtr)1;
29
+
30
+ [StructLayout(LayoutKind.Sequential)]
31
+ public struct WINDOWPOS
32
+ {
33
+ public IntPtr hwnd;
34
+ public IntPtr hwndInsertAfter;
35
+ public int x;
36
+ public int y;
37
+ public int cx;
38
+ public int cy;
39
+ public uint flags;
40
+ }
41
+
42
+ public Form1()
43
+ {
44
+ InitializeComponent();
45
+ }
46
+
47
+ protected override void WndProc(ref Message m)
48
+ {
49
+ switch (m.Msg)
50
+ {
51
+ case WM_WINDOWPOSCHANGING:
52
+ WINDOWPOS wp = (WINDOWPOS)Marshal.PtrToStructure(m.LParam, typeof(WINDOWPOS));
53
+ wp.hwndInsertAfter = HWND_BOTTOM;
54
+ Marshal.StructureToPtr(wp, m.LParam, true);
55
+ break;
56
+ }
57
+ base.WndProc(ref m);
58
+ }
59
+ }
60
+
61
+ ```

1

SetWindowPosの引数の解説を追記

2017/10/11 06:18

投稿

Harahira
Harahira

スコア245

answer CHANGED
@@ -4,4 +4,15 @@
4
4
  サブのディスプレイにウィンドを移動するには、以下を参照してください。
5
5
  [指定したモニターにフォームを表示する](http://dobon.net/vb/dotnet/form/showonmonitor.html)
6
6
 
7
- この二つを組み合わせれば、お望みの動作が実現できると思います。
7
+ この二つを組み合わせれば、お望みの動作が実現できると思います。
8
+
9
+ ---
10
+ 追記
11
+
12
+ SetWindowPosのHWND_BOTTOMの値は、1です。
13
+
14
+ uFlagsは、SWP_NOSIZE(値としては1)とSWP_NOMOVE(値としては2)のOR、すなわち3を渡してください。
15
+
16
+ 以下を参考にしてください。
17
+
18
+ [SetWindowPos (user32)](http://www.pinvoke.net/default.aspx/user32/SetWindowPos.html)