Form und Panels



  • Ich habe mir eine eigene MessageBox gebaut,die im Aussehen zum Rest des Programms passt.Diese Messagebox hat keinen Rand,damit mit man sie aber noch bewegen kann habe ich WM_NCHITEST abgefangen.
    Die MessageBox ist aber leider vollkommen mit Layoutpanels und anderen Controls bedeckt,daher wird WM_NCHITTEST nicht ausgelöst.Ich habe Capture auf true gesetzt,aber das hat keinen Unterschied gemacht.

    protected override void WndProc(ref Message m)
            {
                switch (m.Msg)
                {
                    case WM_NCHITTEST:
                        base.WndProc(ref m);
                        if (m.Result.ToInt32() == HTCLIENT)
                        {
                            m.Result = (IntPtr)HTCAPTION;
                        }
                        return;
    
                }
                base.WndProc(ref m);
            }
    


  • Dann würde ich an Deiner Stelle die Funktionsweise emulieren. Wenn die linke Maustaste an der richtigen Stelle gedrückt wird, reagierst Du entsprechend, indem Du Dir die Startposition der Maus merkst und ab sofort auf das MouseMove reagierst (das Formular um die Deltawerte verschieben, die sich die Maus von der gemerkten Startposition wegbewegt hat; dann in der "Startposition" die aktuelle Mausposition merken und fertig). Läßt der Anwender die linke Maustaste wieder los, verfolgst Du die Maus nicht mehr.



  • Was man auch machen könnte: wenn die linke Maustaste an der richtgen Stelle gedrückt wird, kannst Du natürlich auch die Windowsmessges selber abschicken, so daß Du um die Emulation herum kommst (bzw. nur die Erzeugung der Messages emulierst) und Windows mit seiner Logik die Verarbeitung übernimmt...


Anmelden zum Antworten