2 Stimmen

Erstellen schwebender Werkzeugpaletten im Stil von Photoshop

Irgendwelche Vorschläge, wie man eine schwebende Werkzeugpalette im Stil von Photoshop erstellen kann? Ich habe mehrere Ideen versucht, wie zum Beispiel:

  1. Erstellen eines untergeordneten Fensters, Einstellen seines FormBorderStyle auf FixedToolWindow und Anzeigen als untergeordnetes Fenster des Hauptformulars, aber das Werkzeugfenster stiehlt den Fokus vom Hauptformular.
  2. Erstellen eines untergeordneten Fensters wie oben und mit verschiedenen Kombinationen von Flags an CreateParams übergeben, aber immer noch in den gleichen Fokus Probleme laufen.
  3. Erstellen der Werkzeugpalette als UserControl und und "Floating es", indem Sie seine übergeordneten den Desktop (über die Funktion user32#SetParent) sein, aber dann ist es nicht mehr ein Kind des Hauptformulars und nicht minimieren/Wiederherstellen mit dem Hauptformular.

Ich denke, #3 ist der Weg zu gehen, und ich werde den Code zu schreiben, um die Werkzeugpalette-Fenster-Status synchron mit dem Hauptformular zu halten sowie die Fähigkeit zu implementieren, ziehen Sie die Palette um, zeichnen Sie Grenzen, etc...

Haben Sie Vorschläge, wie man dieses Problem besser lösen kann?

0voto

allonym Punkte 1408

Mir ist nur eine Möglichkeit bekannt, aber diese beschränkt sich auf untergeordnete Formulare, die das übergeordnete Formular nicht verlassen können, wie es in Photoshop der Fall ist. Überschreiben Sie CreateParams auf dem untergeordneten Formular:

const int WS_EX_NOACTIVATE = 0x8000000;
const int WS_CHILD = 0x40000000;
protected override CreateParams CreateParams
{
    get
    {
        CreateParams ret = base.CreateParams;
        ret.Style |= WS_CHILD;
        ret.ExStyle |= WS_EX_NOACTIVATE;
        return ret;
    }
}

Stellen Sie sicher, dass Sie bei Ihrem Anruf Show auf dem untergeordneten Formular, verwenden Sie die Überladung, die eine IWin32Window und geben Sie das Elternteil ein.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X