- 締切済み
http://www.developer.com/net/csharp
http://www.developer.com/net/csharp/article.php/3347251/C-Tip-Making-Windows-Forms-Pop-Under.htm?comment=38243-0 上記サイトの内容を日本語で翻訳していただける方がいらっしゃいますか?
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- dmt1201
- ベストアンサー率0% (0/0)
通常フォームを最前面に持ってくるにはTopMostプロパティを利用します。 ですが、以下のWin-APIを利用しても同じ事が実現出来ます。 SetWindowPos関数 引数などの指定は以下を参照してください。 * SetWindowPos関数 o http://msdn.microsoft.com/ja-jp/library/cc411206.aspx 別にこの関数を利用しなくてもTopMostで同じ事が出来るので いらないのではと思ったりしますが、SetWindowPos関数は 引数にいろいろ指定できるので、結構便利だったりします。 普段利用する事はないですが、知っておくと役に立つかもしれませんね。 具体的には以下のような事ができます。 * Zオーダーの位置を細かく指定できる * ウィンドウのサイズを指定できる * ウィンドウの位置を指定できる 以下、サンプルです。 using System; using System.Runtime.InteropServices; using System.Windows.Forms; namespace SetWindowPosSample { public partial class Form1 : Form { static readonly IntPtr HWND_TOPMOST = new IntPtr(-1); const uint SWP_NOSIZE = 0x0001; const uint SWP_NOMOVE = 0x0002; // (x, y), (cx, cy)を無視するようにする. const uint TOPMOST_FLAGS = (SWP_NOSIZE | SWP_NOMOVE); [DllImport("user32.dll")] [return: MarshalAs(UnmanagedType.Bool)] private static extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int x, int y, int cx, int cy, uint flags); public Form1() { InitializeComponent(); } private void btnTopMost_Click(object sender, EventArgs e) { Form newForm = new Form{ TopMost = true }; newForm.Show(); } private void btnSetWindowPos_Click(object sender, EventArgs e) { Form newForm = new Form(); newForm.Load += (s2, e2) => { SetWindowPos(newForm.Handle, HWND_TOPMOST, 0, 0, 0, 0, TOPMOST_FLAGS); }; newForm.Show(); } } }