CWnd::Attach() und Fenstergröße



  • Hey,
    ich habe ne Frage zu Attach. Wenn ich ein Fensterhandle aus einer Funktion bekommen und dieses z.B. mit

    CWnd test;
    test.Attach(hWnd);
    

    in ein "lokales" Fenster überführe (um darin zu z.B. zu Zeichnen...), hat dann dieses Fenster genau die Größe und Eigenschaften des Fensters auf das das Handle zeigt?

    Danke für Eure Hilfe!


  • Mod

    Du missverstehst hier etwas.
    Damit überführst Du gar nichts. Durch diesen Befehl koppelst Du nur das bestehende Fenster an ein Objekt. Hier entsteht kein neues Objekt sondern Du hast nur eine neue Referenz auf dieses Fenster!
    Es ist immer noch das selbe Fenster!



  • ok, aber wenn ich jetzt

    test.GetWindowRect(&reRect);
    

    bekomme ich dann die Fenstergröße des Fensters auf das das Handle zeigt? Ich krieg nämlich nur das linke obere Eck, aber die falschen cx, cy.


  • Mod

    Ja Du bekommst die Fenstergröße und die Koordinaten!
    das RECT was Du bekommst besteht aus 4 Koordinaten. Die Größe ist right-left und bottom-top!

    Was heißt falsch? Das Window rect ist ds gesamte Fenster inkl. Rahmen. Was möchtest Du denn mit diesen Koordinaten machen? Wenn Du Zeichnen willst benötigst Du das Clientrect (GetClientRect)!



  • Vielleicht drücke ich mich etwas blöd aus:

    Ich habe eine SDI Anwendung mit einem Formview. Auf diesem Formview ist ein TabCtrl. Auf dieses TabCtrl zeichne ich (je nach gewähltem Tab) einen Dialog mit mehreren CEdit's. Von diesen CEdit's speichere ich mir die Handles. Mit diesen Handles will ich aus einem zweiten Dialog (dort wird das Handle ausgewählt) in die CEdit bzw. um die CEdit einen Rahmen zeichnen.

    So.... wenn ich jetzt mir die Größe meines "attach-ten" CWnd-Object hole, ist die viel größer als die Größe meines Ursprünglichen CEdit - Feldes!


  • Mod

    Ich verstehe nicht was Du meinst. Sorry!
    Wieso benutzt Du das Wort zeichnen?

    Man erzeugt Fenster auf einem CTabCtrl oder in einem CDialog.
    Am besten aber ist man benutzt CPropertySheet/CPropertyPage!

    Wen Du ein Handle hast, dann ist dieses Handle ein "Griff" für ein Objekt (und kein zweites), mit diesem Handle kanst Du nirgends woanders "zeichnen" (was immer Du damit meinst. Du kannst ein Handle und das Objekt dazu nur benutzen.



  • Danke für Deine Hilfe,

    sorry, zeichnen ist natürlich das falsche Wort dafür. Auf meinem CTabCtrl werden Dialoge (mit TabCtrl als Parent) gelegt. Was ich eigentlich will: Ich versuche eine "innovative" Fehlerüberprüfung. Ich würde gerne alle CEdit die keine gültigen Werte haben, mit einem Roten Rahmen versehen (deshalb "zeichnen"). Wie gesagt habe ich von allen CEdit's die Handles. Die falschen "Fenster" werden in einer Listbox dargestellt. Wählt der User eines davon in der Listbox aus, wird ein Rahmen um das betr. CEdit gezeichnet. Deshalb brauche ich die Größe der CEdit's.
    Um an das CEdit-Fenster zu kommen, attache ich das Handle an ein CWnd...


  • Mod

    Falscher Ansatz!

    Dein Edit Control muss sich selber zeichnen, oder das Parent muss den Rahmen Zeichnen.



  • Dann brauche ich in jedem Dialog der die "Fehlerabfrage" benötigt, jedesmal die speziellen Funktionen zum Zeichnen?


  • Mod

    Im Prinzip ja! Aber dafür gibt es ja Klassen. Du kannst das ales in eine Klasse packen und dann musst Du nur immer die entsprechende Klasse verwenden!


Anmelden zum Antworten