rect von window (cstatic) ermitteln
-
Ich möchte über
CRect (rc);
GetWindowRect(rc);die Koordinaten eines CStatic Elementes ermitteln. Das ganze in einer Klasse die von Cstatic abgeleitet wurde.
Die Größe möchte ich jedoch vor dem ersten Darstellen wissen, so dass OnPaint dafür nicht in Frage kommt. Eine funktion PostCreate oder ähnliches konnte ich jedoch nicht finfen und in den Konstruktor kann ich es ja nicht schreiben.Wo kann ich daher die Größe vor dem ersten Darstellen abfragen ?
Matthias
-
wie wäre es in der OnCreate methode?????
-
xyz44 schrieb:
wie wäre es in der OnCreate methode?????
Visual Studio bietet in der Liste der zu überladenen Funktionen kein OnCreate an, sonst hätte ich das sicherlich schon ausprobiert.
Matthias
-
OnCreate wird für jedes Fenster angeboten. Zudem ist OnCreate ein Message-Handler und keine überladene Funktion!
Für was benötigst Du die Korrdinaten eines Fensters. Jedes Fenster malt sich relativ zu seinem Ursprung. Die eigenen Koordinaten interessieren hier gar nicht.
OnSize OnMove sind die entsprechendenden Fenster Funktionen in denen man Größen und Possitionsänderungen mitbekommt.
-
Martin Richter schrieb:
OnSize OnMove sind die entsprechendenden Fenster Funktionen in denen man Größen und Possitionsänderungen mitbekommt.
Danke für diesen Hinweis.
Wenn ich das gleiche für OnCreate versuche, dann bekomme ich die Fehlermeldung
Das Hinzufügen/Entfernen ist nicht möglich, da das Codelement "CGraphCtrl" schreibgeschützt ist.
wobei CGraphCtrl die überladenen CStatic Klasse ist.
Wie habe ich diese Fehlermeldung einzuordnen ?Matthias
-
Sind die Dateien für CGraphControl evtl. Schreibgeschüzt?
-
connan schrieb:
Sind die Dateien für CGraphControl evtl. Schreibgeschüzt?
Nein, ich programmiere doch damit. Sonst könnte ich doch gar nicht speichern vor dem kompilieren.
Matthias
-
Martin Richter schrieb:
Für was benötigst Du die Korrdinaten eines Fensters. Jedes Fenster malt sich relativ zu seinem Ursprung. Die eigenen Koordinaten interessieren hier gar nicht.
Ich überlade CStatic und zeichne in den Inhalt von Cstatic. Dafür benötige ich die Größe des Fensters
Martin Richter schrieb:
OnSize OnMove sind die entsprechendenden Fenster Funktionen in denen man Größen und Possitionsänderungen mitbekommt.
void CGraphCtrl::OnSize(UINT nType, int cx, int cy) { CStatic::OnSize(nType, cx, cy); GetWindowRect(m_RectWindow); GetClientRect(m_RectClient); }liefert mir leider nur unsinnige Werte, wohingegen die Werte bei gleichen Aufrufen innerhalb von OnPaint sinnvoll sind. Allerdings möchte ich die Werte ja gerade gespeicher haben damit ich sie nicht jedesmal in OnPaint abfragen muss.
Matthias
-
Was heißt unsinnig?
1. Du bekommst die Größe frei Haus als Parameter in cx und cy
2. Du kannst jederzeit GetClientRect aufrufen (auch in WM_PAINT) also warum machst Du das nicht dann wenn Du es brauchst?
-
Martin Richter schrieb:
Was heißt unsinnig?
1. Du bekommst die Größe frei Haus als Parameter in cx und cy
Achso, ich wollte halt den window und Client Rect aktuell in einer Variabel halten und die Funktionsaufrufe liefern einen Rect mit Werten >30000 in .right und .bottom.
Martin Richter schrieb:
2. Du kannst jederzeit GetClientRect aufrufen (auch in WM_PAINT) also warum machst Du das nicht dann wenn Du es brauchst?
Das tue ich ja jederzeit. Da ich OnPaint sehr häufig aufrufe wollte ich mir sparen jedesmal GetClientRect aufzurufen.
Matthias
-
1. Diese Funktion (OnSize) wird mehrfach aufgerufen.
2. Ich halte es für absolut sinnlos solch einen Wert in einer eigenen Variable zu halten. Das erzeugen eines PaintDC's ist weitaus schlimmer als das besorgen der Fensterkoordinaten.