none
Forms: IntPtr displayHandle = DisplayWindow.Handle; WPF: :..? RRS feed

  • Frage

  • Hallo,

    ich habe ein Beispielprogramm mit Windows.Forms.
    Forms kenne ich kaum.
    Mein Projekt erstelle ich mit WPF.

    Im Beispiel steht folgender Code:

    IntPtr displayHandle = IntPtr.Zero;
    ...
    displayHandle = DisplayWindow.Handle;

    DisplayWindow ist eine PictureBox.

    In meinem WPF-Projekt nutze ich statt einer PictureBox ein Image.
    Aber myImage.Handle gibt es nicht.

    Bitte kann mir jemand sagen,was das Äquivalent in WPF ist, bzw. wie ich an displayHandle komme?!

    Aufgerufen wird displayHandle übrigens nur einmal als Parameter einer Methode einer Klasse, welche zur Bedienung einer Kamera gehört. D.h. ich brauche diesen Parameter um mit der Kamera arbeiten zu können.

    Herzliche Grüße,
    Frank


    www.energiewende-mach-ich-selbst.de



    Donnerstag, 18. Dezember 2014 12:54

Antworten

Alle Antworten

  • Hallo,
    unter den älteren Teilen von Windows wird überall mit Handeln gearbeitet. Dieses konnte man unter WinForms noch abfragen. Unter WPF geht das nicht mehr, da die Controls nicht auf dem klassischen Weg verwendet werden.

    Ich vermute mal, das das einfachste das Einbinden einer WinForms PictureBox sein dürfte. Das geht über das WindowsFormsHost-Control. In dem MSDN Artikel ist auch ein Beispiel dazu. Im Codebehind kannst du ganz normal über den Namen des Controls (x:Name-Eigenschaft) darauf zugreifen.

    Sonst wäre wichtig zu wissen, was genau mit dem Handle gemacht wird. Wird darüber ein Video-Stream oder nur ein statisches Bild dargestellt? Dient das Handle als Zeichenfläche oder muss es unbedingt eine PictureBox für die Ausgabe sein?


    Tom Lambert - C# MVP
    Wozu Antworten markieren und für Beiträge abstimmen? Klicke hier.
    Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter | Account bestätigen (Verify Your Account)
    Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets

    • Als Antwort markiert frank me Freitag, 19. Dezember 2014 14:21
    Donnerstag, 18. Dezember 2014 13:43
    Moderator
  • Hallo Tom,

    Das Einbinden über WindowsFormsHost funktioniert.

    <WindowsFormsHost Name="wfh">
        <wf:PictureBox Name="pbx" Width="240" Height="320" />
    </WindowsFormsHost>

    Allerdings kann ich nicht auf den Handle von pbx zugreifen, nur auf den Handle von wfh.

    IntPtr displayHandle;
    displayHandle = wfh.Handle; // geht
    displayHandle = pbx.Handle; // geht nicht

    Aber ich brauche den Handle von pbx!

    Den Handle brauche ich um diesen zu übergeben an eine Methode des Kameratreibers: 

    private void camera_EventFrame(object sender, EventArgs e)
    {
        uEye.Camera Camera = sender as uEye.Camera;
        Int32 s32MemID;
        Camera.Memory.GetActive(out s32MemID);
        Camera.Display.Render(s32MemID, displayHandle, uEye.Defines.DisplayRenderMode.FitToWindow); // hier das zweite Argument
    }
    Beantwortet das deine Frage Tom?

    Grüße,
    Frank



    www.energiewende-mach-ich-selbst.de

    Freitag, 19. Dezember 2014 09:43
  • Hallo Frank,
    auch in WinForms haben alle Controls eine Name-Eigenschaft. Diese ist jedoch inkompatibel mit WPF. Du musst hier daher explizit den WPF-Name vergeben, das geht über x:Name:
    <WindowsFormsHost Name="wfh">
        <wf:PictureBox x:Name="pbx" Width="240" Height="320" />
    </WindowsFormsHost>
    Dann kannst du auch vom Codebehind aus darauf zugreifen. Theoretisch wäre es natürlich auch möglich über das Host-Control an das Handle zu gelangen:
    var handle = (wfh.Child as System.Windows.Forms.PictureBox).Handle;
    Beantwortet das deine Frage Tom?
    Nicht komplett, aber ich glaube ich habe alles was ich wissen wollte. Es ging mir darum ob es sich vielleicht lohnen würde einen Ersatz in WPF nachzubauen, allerdings glaube ich nicht das sich das lohnt, solange du mit der PB keine Probleme hast.

    Tom Lambert - C# MVP
    Wozu Antworten markieren und für Beiträge abstimmen? Klicke hier.
    Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter | Account bestätigen (Verify Your Account)
    Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets

    Freitag, 19. Dezember 2014 12:18
    Moderator