Visual C++ 2005 Express: Details für Experten

Ich habe 2 Fragen zu Visual C++ 2005:

Wie kann ich den gerade freien physikalischen Speicher abfragen? So
etwas wie „GlobalMemoryStatus“ in Borland C++ bzw. Windows-API.

Wie kann ich einen Bereich eines Fensters neu zeichnen lassen, ohne
ein „erase“ des Bereichs auszulösen (so dass es nicht so flackert)?
Das entspricht etwa dem InvalidateRect (false) aus Borland C++, wobei
der Parameter nichts mit den Child-Controls zu tun hat, sondern
explizit das „Erase“ des Bereiches vermeidet.

Vielen Dank,

Walter

Hallo Walter,

zu 2: InvalidateRect ist eigentlich eine Win32 API Funktion, die Borland nur kapselt (und dabei, wie üblich, die Funktion stark einschränkt), die kannst du natürlich in VC verwenden. Siehe Win32 SDK Hilfe.

Gruss Reinhard

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hiho

Wie kann ich den gerade freien physikalischen Speicher
abfragen? So
etwas wie „GlobalMemoryStatus“ in Borland C++ bzw.
Windows-API.

Wenn es Windows-API ist, wieso benutzt du es dann nicht (eigentlich derselbe Punkt wie bei meinem Vorredner)?

Beispiel:
http://msdn.microsoft.com/library/default.asp?url=/l…

mfg TLF

OK, ich habe jetzt kapiert, dass ich die Win-Api-Funktionen aus VC heraus direkt aufrufen soll. Kommt mir zwar komisch vor, weil die Klassenbibliothek ja sonst alles kapselt (sogar, ob die Batterie des Rechners fast leer ist und so), aber gut.

Frage: Wie rufe ich so eine Funktion auf? Ich bin in einer System::Windows::Forms::X-Memberfunktion (verwaltete Klasse) und möchte this->InvalidateRect(…) aufrufen, aber mit einer Api-Funktion.

Gibt es unter VC 2005 noch die alten Include-Dateien, wo die API-Funktionen deklariert sind?

Danke schon mal,

Walter

Hallo Walter,

im Zweifelsfall ist windows.h für alles zuständig.

ich benutze derzeit VC nicht, kann also nicht beurteilen, wie die Kapselung da gelöst ist bzw. wie du eine Win32-API-Funktion am zweckmässigsten aufrufst. Bei Borland genügt die Einbindung von windows.h oder „uses Windows“.

Zu „komisch“: Bei Borland ist es ausserdem so, dass die eigenen Funktionen meistens einfacher zu benutzen sind, dafür aber stark beschnitten, oft bis zur Unbrauchbarkeit. InvalidateRect z.B. hat nur einen Parameter statt 3, Windows und Rechteck sind nicht angebbar. Das Win32 API bleibt daher das Mass aller Dinge. Ob VC in der Beziehung besser ist - keine Ahnung. Ist eigentlich kein Problem - ich benutze die Kurzform, wo geht, und sonst eben das „Original“.

Gruss Reinhard

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Aber allein: Windows.h ist auf meinem Rechner schlicht nicht vorhanden. Also jedenfalls nicht unter VC. Trotzdem danke.

Übrigens: Borland beschneidet viele Funktionen möglicherweise bis zur Unkenntlichkeit - aber auf InvalidateRect trifft das nicht zu. Die hat nur 2 statt 3 Parameter, aber der Windows-Handle ist ja unnötig, weil es eine nicht-statische Windows-Memberfunction ist.

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo,

Aber allein: Windows.h ist auf meinem Rechner schlicht nicht
vorhanden. Also jedenfalls nicht unter VC. Trotzdem danke.

die Windows.h ist erst auf deinem System vorhanden, wenn du das Platform SDK installierst; der Punkt dazu erscheint beim Startbildschirm deiner Visual C++ Umgebung.

mfg,
Christoph

Übrigens: Borland beschneidet viele Funktionen möglicherweise
bis zur Unkenntlichkeit - aber auf InvalidateRect trifft das
nicht zu. Die hat nur 2 statt 3 Parameter, aber der
Windows-Handle ist ja unnötig, weil es eine nicht-statische
Windows-Memberfunction ist.

Hallo,

unnötig nur, solang du nur an „self“ denkst - mit dem Original kann man aber auch ein Rechteck in einem anderen Window verungültigen.

Meistens merkt man die Einschränkungen erst an einem konkreten Fall, wenn in der Kurzform etwas fehlt, was man bräuchte. Vorausgesetzt, man kommt überhaupt auf die Idee, dass es etwas besseres gibt. Da habe ich den Vorteil, dass ich schon seit Anfangszeiten mit dem Windows API arbeite, daher erinnere ich mich dann dunkel, dass das, was ich vorhabe, doch eigentlich gehen müsste. Wenn ich dann Delphi-Hilfe und SDK-Hilfe vergleiche, kommt meistens heraus, dass man im Borland-Framework gerade das gestrichen hat, was ich bräuchte.

So angenehm die Frameworks auch sind, ich glaube nicht, dass man beim ernsthaften Programmieren ohne Win API bzw. SDK auskommen kann. Daher sollte es auch immer installiert sein - aber Vorgaben von Microsoft sind halt nicht in jedem Fall sinnvoll.

Gruss Reinhard