Captionbar click event
Hej eksperter!Hvordan fanger jeg eventet når brugeren klikker oppe i captionbar? Jeg har søgt lidt rundt på nettet, og fundet følgende VB kode, som skulle kunne løse mit problem. Jeg har dog ikke haft held med at få koden til at virke i CSharp.
VB kode: http://www.andreavb.com/forum/viewtopic.php?TopicID=2930
Mit forsøg (om fejler):
---------------------
public const int GWL_WNDPROC = -4;
public const int WM_NCLBUTTONDOWN = 161; //&HA1;
private const int HTCAPTION = 0x0002;
private const int WS_SYSMENU = 0x80000;
[DllImport("user32", EntryPoint="SetWindowLong")]
public static extern int SetWindowLongA(int hwnd, int nIndex, int dwNewLong);
[DllImport("user32", EntryPoint="CallWindowProc")]
private static extern int CallWindowProcA(int lpPrevWndFunc, int hwnd, int MSG, int wParam, int lParam);
[DllImport("user32")]
private static extern int ReleaseCapture();
public int prevProc;
private long WinProc(int hwnd, int uMsg, int wParam, int lParam)
{
int returnValue = CallWindowProcA(prevProc, hwnd, uMsg, wParam, lParam);
if ((uMsg == WM_NCLBUTTONDOWN) && (wParam == HTCAPTION))
Trace.WriteLine("Captionbar clicked!");
return returnValue;
}
private void Form1_Load(...)
{
prevProc = SetWindowLongA(this.Handle.ToInt32(), GWL_WNDPROC, WS_SYSMENU);
}
private void Form1_FormClosing(...)
{
SetWindowLongA(this.Handle.ToInt32(), GWL_WNDPROC, prevProc);
}
---------------------
En anden accepteret løsning er også hvis man på en eller anden måde kan sikre sig at man kan holde én form over en anden. Hele tiden.
Følgende virker ikke korrekt:
---------------------
Form1_Activated(...)
{
if (!form2.TopMost)
form2.TopMost = true;
}
Form1_Deactivate(...)
{
if (form2.TopMost)
form2.TopMost = false;
}
---------------------
Venlig hilsen,
Martin.
