Windows-Formular mit einem transparenten Hintergrund, die angeklickt werden können, nicht durch

StackOverflow https://stackoverflow.com/questions/1436059

  •  07-07-2019
  •  | 
  •  

Frage

c # / Windows Forms verwenden. Der Versuch, der Hintergrund eines Formulars transparent zu machen, ohne dass es seine Fähigkeit zu verlieren, Klicks zu erhalten.

  1. this.Opacity macht die ganze Form transparent (nicht nur den Hintergrund

  2. = Backcolor Color.Red;
       TransparencyKey = Backcolor;

macht den Hintergrund des Formulars transparent und klicken Sie sich durch machbar. Ich möchte die Form transparent sein, aber es sollte in der Lage sein Klicks erhalten

Wie?

War es hilfreich?

Lösung

Sie müssen WM_NCHITTEST behandeln. Hinweis im Snippet unterhalb dieser m.lParam enthält verpackt X und Y-Koordinaten der Mausposition relativ zur oberen linken Ecke des Bildschirms, und Sie müssen überprüfen, ob die Lage Ihren transparenten Bereich entspricht.

In diesem Beispiel ich HTCAPTION bin zurückkehren, was bedeutet, diese Region wie eine Beschriftung des Fensters verhalten wird, wird das heißt Benutzer in der Lage sein, um das Fenster zu ziehen, indem Sie auf und diese Position ziehen. Siehe hier was andere Werte zurückgegeben werden können und was sie bedeuten

protected override void WndProc(ref Message m) {
    switch (m.Msg) {
    case 0x84: // this is WM_NCHITTEST
        base.WndProc(ref m);
        if ((/*m.LParam.ToInt32() >> 16 and m.LParam.ToInt32() & 0xffff fit in your transparen region*/) 
          && m.Result.ToInt32() == 1) {
            m.Result = new IntPtr(2);   // HTCAPTION
        }
        break;
    default:
        base.WndProc(ref m);
        break;
    }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top