Ein paar Fragen zur WinApi
-
Hey Leute,
Ich hätte ein paar Fragen zur WinApi:
1. Ist es möglich, Animationen zu zeichnen, zum Beispiel dass der Hintergrund auf drücken eines Knopfes langsam kleiner wird etc., oder braucht man dafür schon DirectX usw...
2. Gibt es bzw. wie heißt die Funktion, mit welcher solche "Fenster", ich weiß nicht wie dass heißt, dadurch kann ich es auch nicht suchen, wie das in Windows 8 (Schlechtes Beispiel, ich weiß
), wenn man im App-Menü einfach irgendetwas eingibt, dass heißt dass ein Fenster von Links hereinkommt, und auf diesem auch Buttons sind...
3. Wie kann man TCHAR Variablen aus einer Datei (z.B. Wochentage.wt) mit fstream und einer ähnlichen Funktion wie Getline() auslesen, oder ist das nicht möglich?
MFG
FERNman
-
Alles ist möglich. Sind deine Fragen damit beantwortet?
Vielleicht etwas ausführlicher...
1. Die Frage ist nicht, obs möglich ist, sonderns obs schnell genug ist. Ja, sollte schnell genug sein.
2. Weiß jetzt nicht genau was du meinst, aber meinst du sowas wie Popups? Klar kann man sowas machen?
3. Was zum Geier ist eine Wochentage.wt Datei? Meinst du ein bestimmtes Format, und was hat es mit TCHAR zu tun und warum sollte es mit streams nicht gehen?
-
ad 1: Der Hintergrund von was? Und was heisst "kleiner werden"?
ad 2: Du kannst "Rahmenlose" Fenster machen, und natürlich auch deren Position verändern. Änderst du sie schnell genug, dann sieht das wie ein "Hereinfahren" Effekt aus. Je nachdem ob Desktop-Composition an ist oder nicht, sieht das dann mehr oder weniger flüssig aus.
ad 3: Du kannst natürlich Text aus einer Datei lesen. Die Frage ist was du mit "TCHAR Variablen" meinst. Ein TCHAR ist ja entweder ein char oder ein wchar_t, aber eben nur einer. Ein einziges Zeichen. Das wirst du ja vermutlich nicht meinen, oder?
Falls du Unicode-Strings aus einem Textfile lesen willst, dann wirst du mit Standard C++ vermutlich nicht auskommen. Ebenso wenn die Strings im File bloss ANSI sind, aber im Programm nach Unicode konvertiert werden sollen (weil du TCHAR verwendest und dabei UNICODE definiert hast, und TCHAR daher wchar_t ist).
Es gibt aber diverse Konvertierungs-Funktionen in der CRT von MSVC bzw. auch der KERNEL32.DLL. Google hilft.Allgemein würde ich sagen dir fehlt ein bisschen Hintergrundwissen. Was vermutlich auch der Grund ist, aus dem es dir schwer fällt gut verständliche Fragen zu formulieren. Selbst googeln und beim Lesen diverser Artikel auf die diversen Fachbegriffe achten sollte helfen.
(Und weniger wirr schreiben hilft auch. Lies deinen Punkt 2 mal in Ruhe, und versuche nachzuvollziehen wie es jmd. der diesen Satz nicht selbst geschrieben hat dabei geht. Kurze Sätze sind gut. Das zwingt dich ersmtal einen Satz fertig zu machen. Inklusive Subjekt, Prädikat und allem. Der ist dann für sich alleine schonmal verständlich. Dann kannst du weiter ins Detail gehen. Indem du weitere Sätze anfügst. So wie ich hier. Klingt zwar manchmal etwas unbeholfen. Ist aber dafür einfach zu lesen. Und meistens auch besser zu verstehen.)
-
Danke für eure Antworten und natürlich vor allem auf den Hinweis mit den kurzen Sätzen
.
Normalerweise bin ich ganz gut im Sätze formulieren, aber ich weiß keinen Fachbegriff für die Funktion, die ich hier suche (Frage 2).Also nochmal meine Fragen, etwas umformuliert:
1. Das mit dem Hintergrund war ein Beispiel. Vielleicht versteht ihr besser was ich meine, wenn ich als Beispiel die Galerie jedes x-beliebigen Smartphones nehme: Wenn ich dann zwischen zwei Bildern wechsle, ist auch nicht plötzlich das andere da, sondern kommt langsam von der Seite :).
2. Naja, Popups sind schon richtig. Ich meine, zwar etwas umgebaut aber ähnlich, dass selbe wie das "Start" Fenster von Windows 7. Also so etwas wie MessageBoxen, nur mit mehr Buttons als einem und ohne Rahmen.
3. Wochentage.wt war nur ein Beispiel. Die Datei könnte auch Wochentage.txt oder .xls heißen, ich meine damit nur, ob man mit TCHAR oder wchar_t auch Zeile für Zeile eine Datei auslesen kann, eben so wie mit geline. Mit TCHAR hat es das zu tun, dass ich diese ausgelesenen Namen dann einer Combobox hinzufügen will. Ich weiß nicht, ob das mit Strings geht, und deswegen brauche ich TCHAR.
Es kann sein, dass das dort oben alles falsch ist, aber eben wie du gesagt hast, möchte ich Hintergrundwissen sammeln :).
MFG
FERNman
-
Das mit dem Hintergrund war ein Beispiel. Vielleicht versteht ihr besser was ich meine, wenn ich als Beispiel die Galerie jedes x-beliebigen Smartphones nehme: Wenn ich dann zwischen zwei Bildern wechsle, ist auch nicht plötzlich das andere da, sondern kommt langsam von der Seite
Die WINAPI ist Die low level API .... also ja man kann damit sowas bauen
Auch ohne directX
Die Frage ist eher, ob man es per hand machen muss, oder ob es schon was fertiges gibt (Was feriges in form einer Bibliothek, die dann auf die WinAPI aufsetzt) ^^ und wenns was fertiges gibt, obs dann schnell genug ist.Naja, Popups sind schon richtig. Ich meine, zwar etwas umgebaut aber ähnlich, dass selbe wie das "Start" Fenster von Windows 7. Also so etwas wie MessageBoxen, nur mit mehr Buttons als einem und ohne Rahmen.
generell kannst du "low level" die Rahmen und fenster frei gestalten also geht alles. Die frage ist auch hier, gibts da scho was fertiges, und isses schnell genug. Verwendet es windows 8 selber sehr extensiv, wirds sicher in ner hoeheren Microsoft Lib (MFC, .Net) nen passendes control für geben.
Generell solltest wenn noch nie mit C++ was mit GUI zu tun hattest, nicht mit der Winapi anfangen. Das wäre vergleichbar wie die erste Fahrstunde vom Bootsführerschein mitm Flugzeugträger absolvieren zu wollen ^^
Du wärst mit viel zu vielen spezifischen Problemen beschaeftigt als mit dem was eigentlich machen woelltest.
Generell gehen tut es klar, und wenns kannst bringt es dich auch enorm weiter.Aber z.b. Qt(die befeuert auch nur die winapi) waer einfacher und intuitiver und könnte wahrscheinlich auch 99% von dem was du vorhasst.
und wenn Qt was nicht kann, kannst du auch ein "fremdes" fenster in einen Qt Rahmen(fenster) einbetten und fuer das Fenster(handle) die winapi direkt beschiessen.willst näher bei M$ bleiben, waer managed c++ ne alternative (.Net Framework).
Komplette 2D Programme in plain Winapi schreibt heut kaum einer mehr, nur Masochisten tun sowas ^^
Ciao ...
-
Diese ganzen netten Übergangseffekte (Verschieben, Zoomen, Rotieren etc.) bekommt man zwar vielleicht auch mit WinAPI/GDI hin. Aber leicht ist es vermutlich nicht. Und auch nicht ideal - du wirst bei allen bis auf die einfachsten Effekte über GDI nie die visuelle Qualität und Performance hinbekommen, wie du es über Direct3D erreichen kannst. Bzw. durch Libraries/Frameworks die auf Direct3D aufbauen.
Verschieben alleine geht noch, sogar wenns sein muss auch mit Alphakanal. Aber das war's dann soweit ich weiss.
Wenn du mehr willst, würde ich dir WPF ans Herz legen. Dummerweise gibt's kein C++ Frontend für MIL (die von WPF verwendete Composition Engine).
Damit lassen sich die netten Effekte die man aus dem ganzen Smartphone/Tablet Bereich kennt recht einfach realisieren.
-
RHBaum schrieb:
Die WINAPI ist Die low level API .... also ja man kann damit sowas bauen
Auch ohne directX
Wenn du mit WINAPI jetzt GDI meinst, dann kann ich das so nicht gelten lassen.
GDI bietet nur einen kleinen Teil der Funktionalität an die ein WDDM Treiber implementiert. D.h. man kann über GDI viele Dinge nicht machen. Und ich würde Direct3D auch als näher an WDDM sehen als GDI.Die Low Level API wäre also Direct3D, nicht GDI.
-
Erstmal Danke an euch alle!
Natürlich ist mir bewusst, dass man heutzutage keine größeren Programme mit der WinApi schreibt, aber ich möchte noch ein bisschen üben, bevor ich irgendwann mit DirectX/OpenGL anfange, und der erste Schritt nach der Konsole war für mich die WinApi.Ich habe mir auch schon QT angeschaut und ein bisschen damit gearbeitet, aber ich finde das hat nur noch im groben mit der WinApi selbst zu tun und ist für mich ein eigenes Kapitel.
Danke an euch!
MFG
FERNman
-
FERNman schrieb:
Ich habe mir auch schon QT angeschaut und ein bisschen damit gearbeitet, aber ich finde das hat nur noch im groben mit der WinApi selbst zu tun
Ist doch gut? Wofür brauchst du WinApi? In unserer Abteilung sind grob 30 Entwickler, und ich bin einer von 2-3, die ab und zu was mit der WinApi machen müssen. Das sind die Härtefälle, wo Qt nicht so ganz funktioniert oder wo wir Qt umbauen müssen. Sonst kann es sehr gut sein, dass du niemals überhaupt irgendwas mit der WinApi machen musst. Es bringt nichts, die einfach so zu lernen oder sich da reinzudenken. Kann man sich erstmal komplett sparen, bis man das wirklich braucht. Und Qt hat auch ein Animation Framework. Damit hatte ich allerdings noch nie was zu tun und kann dir nichts dazu sagen, wie performant das ist. Ich geh aber davon aus, dass es schon einiges kann und wahrscheinlich auch zumindest ab Qt 5 auf Hardwarebeschleunigung setzt.
-
Wenn du mit WINAPI jetzt GDI meinst, dann kann ich das so nicht gelten lassen.
GDI bietet nur einen kleinen Teil der Funktionalität an die ein WDDM Treiber implementiert. D.h. man kann über GDI viele Dinge nicht machen. Und ich würde Direct3D auch als näher an WDDM sehen als GDI.Ja, war zu allgemein ausgedrueckt ...
Da Grakas/Treiber ja directX befehle direkt unterstützen ist das per definition low level
gilt auch für (Open)GLdie Winapi ist aber die Low Level Schnittstelle zum Betriebssystem, und damit zum "FensterManager" ... ALso wenn es um Fenster, Rahmen, Controls geht, ist das die low level Schnittstelle
Klar, das aus HW sicht da noch was dazwischen istCiao ...