Wednesday, January 16, 2013

Position a Windows Forms MessageBox in C# (REPOST)

Here's a tip from CODE PROJECT on positioning message box. This utilize c++ dlls.
Code:
using System.Runtime.InteropServices;  
 using System.Threading;  
 [DllImport("user32.dll")]  
 static extern IntPtr FindWindow(IntPtr classname, string title); // extern method: FindWindow  
 [DllImport("user32.dll")]  
 static extern void MoveWindow(IntPtr hwnd, int X, int Y, int nWidth, int nHeight, bool rePaint);   
 // extern method: MoveWindow  
 [DllImport("user32.dll")]  
 static extern bool GetWindowRect(IntPtr hwnd, out Rectangle rect);   
 // extern method: GetWindowRect  
 void FindAndMoveMsgBox(int x, int y, bool repaint, string title)  
 {  
   Thread thr = new Thread(() => // create a new thread  
   {  
     IntPtr msgBox = IntPtr.Zero;  
     // while there's no MessageBox, FindWindow returns IntPtr.Zero  
     while ((msgBox = FindWindow(IntPtr.Zero, title)) == IntPtr.Zero) ;  
     // after the while loop, msgBox is the handle of your MessageBox  
     Rectangle r = new Rectangle();  
     GetWindowRect(msgBox, out r); // Gets the rectangle of the message box  
     MoveWindow(msgBox /* handle of the message box */, x , y,   
       r.Width - r.X /* width of originally message box */,   
       r.Height - r.Y /* height of originally message box */,   
       repaint /* if true, the message box repaints */);  
   });  
   thr.Start(); // starts the thread  
 }  


 //here's how to use it...  
 FindAndMoveMsgBox(0, 0, true,"Title");  
 MessageBox.Show("Message","Title");

Cheers!

0 comments:

Post a Comment