Announcement

Collapse
No announcement yet.

Controldarstellung zur Laufzeit kopieren

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Controldarstellung zur Laufzeit kopieren

    Hallo Experten,

    in einem C#-Programm (VS 2005 Express) habe ich ein TabControl, dessen beide ersten Seiten jeweils ein Display einnimmt. Das Display stammt aus einer Bibleothek, in die ich keinen Einblick habe. Es kann Bilder anzeigen, skalieren und Overlays(Texte und Linien) darüberlegen.

    Ich möchte auf einem weiteren Tab eine verkleinerte Ansicht eines der Displays erzeugen.

    Es reicht aber nicht, das angezeigte Bild nochmal anzuzeigen, ich brauche auch sämtliche Overlays, die in dem Moment dargestellt sind. Dagegen kann ich aber auf jedwede Art der Beeinflussung verzichten.

    Gibt es in .NET eine Möglichkeit, ein Control in seinem derzeitigen Zustand "abzufotografieren"?
    In der Art eines Bildschirmfotos, das aber auf ein verdecktes Control angewandt wird?

    Mit freundlichem Gruß,


    luker

  • #2
    Originally posted by luker View Post
    Gibt es in .NET eine Möglichkeit, ein Control in seinem derzeitigen Zustand "abzufotografieren"?
    In der Art eines Bildschirmfotos, das aber auf ein verdecktes Control angewandt wird?
    Eigentlich nein. Es gibt DrawToBitmap, aber das verfügt über einige Einschränkungen (siehe die Hinweise in der SDK-Doku/MSDN). Außerdem kann es nur sichtbare Teile des Bildschirms verarbeiten; denn Windows zeichnet nur dann etwas, wenn es etwas zu zeichnen gibt (und was sowieso minimiert ist oder verdeckt wird, muss nicht gezeichnet werden).

    Jürgen

    Comment


    • #3
      Originally posted by Jürgen Thomas View Post
      Windows zeichnet nur dann etwas, wenn es etwas zu zeichnen gibt
      Es muss ja nicht fotografiert sein. Vielleicht kann man so etwas umsetzen:
      Code:
      Display dspCopy = new Display();
      memcpy(dspCopy.hWnd, dspOrig.hWnd, sizeof(Display));
      
      dspCopy.Location=neuerort;
      dspCopy.Size=neuegröße;
      dspCopy.Refresh();
      Ist etwas in der Art mit .NET machbar?

      Comment


      • #4
        Nein. Die Wahrscheinlichkeit das ein Control einen im Speicher zusammenhängenden Speicherbereich belegt geht wahrscheinlich gegen 0. (Vermutlich in jedem Framework nicht nur bei .NET)

        Eine echte Kopie bekommt man nur mit innerem Wissen des Controls das heißt in deinem Fall vom Hersteller. Wen dieser ICloneable richtig (richtig für deinen Fall) implementiert hat geht das. Die Wahrscheinlichkeit das das jemand für ein visuelles Control macht geht aber ebenfalls gegen null.

        Wenn ich dich richtig verstanden habe währen die beiden Display Control auf verschiedenen Tabs und somit nie gleichzeit zu sehen? Wenn dem so ist brauchst du wahrscheinlich keine 2 Controls. Nimm einfach das Original und häng es im TabControl beim wechseln der Tabs um. Beim Tabwechsel kannst du dabei ja auch die Properties des Controls jeweils so anpassen wie du sie auf dem jeweiligen Tab brauchst.

        Comment


        • #5
          Vielleicht hiflt dir der MSDN Artikel weiter.

          Schönes WE
          Stefan
          Mitarbeiterführung ist:
          Den Mitarbeiter so schnell über den Tisch zu ziehen, dass er die Reibungshitze als Nestwärme empfindet!

          Comment


          • #6
            Gelöst

            Originally posted by Ralf Jansen View Post
            Nimm einfach das Original und häng es beim wechseln der Tabs um.
            Danke, darauf wäre ich jetzt nicht gekommen. Aber es funktioniert tadellos.

            Ciao,


            luker

            Comment

            Working...
            X