fisianer2009 Geschrieben 6. Juni 2012 Geschrieben 6. Juni 2012 Hallo zusammen, ich bin totaler C++ Noob. Habe eine Verstädnisfrage: z.B.: LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { oder: HWND hWnd = CreateWindow( Was bedeuten diese großgeschriebene Wörter HWMD, UINT, WPARAM, etc. genau? Ich weiß das es Datentypen sein müssten. Ist das ein spezieller der irgendwas mit Klassen zutun hat? Kann mir jemand das vielleicht näher erläutern? MFG FISI Zitieren
Klotzkopp Geschrieben 6. Juni 2012 Geschrieben 6. Juni 2012 Mit Klassen haben die nichts zu tun. Die stammen alle aus der Windows-API, die ist eine reine C-API. Windows Data Types (Windows) Zitieren
fisianer2009 Geschrieben 6. Juni 2012 Autor Geschrieben 6. Juni 2012 Danke für die Antwort. und was bringt mir das dass wen ich z.B. bei HWND hWnd = CreateWindow( nu das HWND davor gesetzt habe? Also ich habe eine Funktion "CreateWindow" mit einigen Paramter. Diese Funktion gibt etwas zurück. Diese wird dann in die Variabel z.B. hWnd gespeichert. So, und nu setzt der Programmierer ein HWND davor. Aber warum? :confused: Zitieren
fisianer2009 Geschrieben 6. Juni 2012 Autor Geschrieben 6. Juni 2012 ah ok... das muss so sein weil CreateWindow diesen Typ zurückgibt Zitieren
fisianer2009 Geschrieben 6. Juni 2012 Autor Geschrieben 6. Juni 2012 Kann man den Thread nicht als "erledigt" markieren? ^^ Zitieren
Klotzkopp Geschrieben 6. Juni 2012 Geschrieben 6. Juni 2012 ah ok... das muss so sein weil CreateWindow diesen Typ zurückgibtNein, das hat damit nichts zu tun, und ist auch nicht spezifisch für die WinAPI-Datentypen, sondern ganz allgemein. Was ist der Unterschied zwischen a = foo(); undint a = foo(); Im ersten Fall muss die Variable a vorher bereits deklariert worden sein, im zweiten Fall wird sie an dieser Stelle definiert. Zitieren
fisianer2009 Geschrieben 6. Juni 2012 Autor Geschrieben 6. Juni 2012 Nein, das hat damit nichts zu tun, und ist auch nicht spezifisch für die WinAPI-Datentypen, sondern ganz allgemein. Könnte ich jetzt auch statt HWND auch zB Char benutzen? Was ist der Unterschied zwischen a = foo(); undint a = foo(); Im ersten Fall muss die Variable a vorher bereits deklariert worden sein, im zweiten Fall wird sie an dieser Stelle definiert. Mir gehts nicht darum ob es deklariert ist oder nicht. Mir gehts nur darum was dieses HWND bedeutet. Char, Int, Float, BOOL usw. sind mir geläufig. Dein Link sagte mir das es ein "handler" ist. Zitieren
Klotzkopp Geschrieben 6. Juni 2012 Geschrieben 6. Juni 2012 Könnte ich jetzt auch statt HWND auch zB Char benutzen?Der Typ muss schon auf den Rückgabetyp der Funktion passen. Mir gehts nicht darum ob es deklariert ist oder nicht.Das ist aber der Unterschied zwischen Davorschreiben und nicht Davorschreiben. Mir gehts nur darum was dieses HWND bedeutet.HWND ist ein Handle auf ein WiNDow. Ein Handle ist ganz allgemein ein Verweis auf eine Ressource, um deren Verwaltung du dich nicht kümmern sollst. In diesem Fall kümmert sich Windows darum. Und immer, wenn Windows mit dem Fenster, zu dem dieses Handle gehört, etwas tun soll, musst du dieses Handle angeben. Zitieren
fisianer2009 Geschrieben 6. Juni 2012 Autor Geschrieben 6. Juni 2012 Super Danke. darf ich dieses Forum dann auch für (eventuell) weitere Fragen in Benutzung nehmen? Zitieren
fisianer2009 Geschrieben 6. Juni 2012 Autor Geschrieben 6. Juni 2012 und wenn man eine eigene funktion schreibt, dann kann man theoretisch auch ein eigenen datentyp erstellen? Zitieren
Klotzkopp Geschrieben 6. Juni 2012 Geschrieben 6. Juni 2012 und wenn man eine eigene funktion schreibt, dann kann man theoretisch auch ein eigenen datentyp erstellen? Du kannst immer eigene Datentypen erstellen, auch wenn du keine eigene Funktion schreibst Zitieren
fisianer2009 Geschrieben 6. Juni 2012 Autor Geschrieben 6. Juni 2012 also wenn ich eine eigens geschrieben klasse instanziere dann benutze ich ja quasi einen eigenen datentyp, richtig? Zitieren
fisianer2009 Geschrieben 6. Juni 2012 Autor Geschrieben 6. Juni 2012 So, habe eine weitere Frage betreffend: LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { PAINTSTRUCT ps; HDC hdc; TCHAR greeting[] = _T("Hello, World!"); switch (message) { case WM_PAINT: hdc = BeginPaint(hWnd, &ps); // Here your application is laid out. // For this introduction, we just print out "Hello, World!" // in the top left corner. TextOut(hdc, 5, 5, greeting, _tcslen(greeting)); // End application-specific layout section. EndPaint(hWnd, &ps); break; case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc(hWnd, message, wParam, lParam); break; } return 0; } Das Case fragt "message" ab, welches vom Typ UINT ist. Aber UINT ist ein unsigned Integer. wie kann es sein er was tut wenn z.B. der Fall "WM_PAINT" ist?!?! Also irgendwie versteh ich nicht wieso er bei WM_PAINT z.B überhaupt reinspringen würde wenn doch eigentlich nach Zahlen (The range is 0 through 4294967295 decimal) abgefragt wird?!? Also manchmal hängst doch nur Zitieren
Guybrush Threepwood Geschrieben 6. Juni 2012 Geschrieben 6. Juni 2012 Weil WM_PAINT einfach nur eine lesbare Definition für einen Zahlenwert ist. Wie wärs wenn du dir mal ein entsprechendes C Buch nimmst und das durcharbeitetst um erstmal die Grundlagen zu lernen? Zitieren
fisianer2009 Geschrieben 6. Juni 2012 Autor Geschrieben 6. Juni 2012 hm und wo wird dieser Wert definiert?!? Zitieren
lilith2k3 Geschrieben 6. Juni 2012 Geschrieben 6. Juni 2012 Wer lernt auch anhand der WinAPI C? Zitieren
Klotzkopp Geschrieben 6. Juni 2012 Geschrieben 6. Juni 2012 Wer lernt auch anhand der WinAPI C?Ich befürchte, es ist noch schlimmer: Er schreibt ja von Klassen, also will er womöglich C++ lernen. @fisianer2009: Was genau willst du lernen? Die WinAPI ist ein denkbar schlechter Einstieg, wenn du C++ lernen willst. Zitieren
Aras Geschrieben 6. Juni 2012 Geschrieben 6. Juni 2012 In der windows.h werden diese Windowsspezifischen Datentypen (z.B. HWND), Strukturen(z.B. PAINTSTRUCT), Konstanten(WM_PAINT) etc. definiert. Die aktuelle windows.h ist immer in der aktuellen Windows SDK enthalten. Zitieren
fisianer2009 Geschrieben 6. Juni 2012 Autor Geschrieben 6. Juni 2012 (bearbeitet) In der windows.h werden diese Windowsspezifischen Datentypen (z.B. HWND), Strukturen(z.B. PAINTSTRUCT), Konstanten(WM_PAINT) etc. definiert. Die aktuelle windows.h ist immer in der aktuellen Windows SDK enthalten. ah ok. und woher weiß ich welchen Wert die Konstante WM_PAINT hat, z.B. "1" ? --> ist das die Lösung meiner Fragen? http://docs.embarcadero.com/products/rad_studio/delphiAndcpp2009/HelpUpdate2/EN/html/delphivclwin32/Messages_WM_PAINT.html ^^ Bearbeitet 6. Juni 2012 von fisianer2009 Zitieren
Aras Geschrieben 6. Juni 2012 Geschrieben 6. Juni 2012 Für den Windows-Programmierer sollte es egal sein welchen Wert die Konstante WM_PAINT hat. Wenn du ein Windows Programm in C oder C++ programmieren willst, dann musst du nur wissen, dass in Windows eine sogenannte Message Queue gibt, und dass in dieser Queue Window Messages abgesetzt werden. Durch die Messages werden Ereignisse systemweit ausgelöst und abgefangen. Dein Windows Programm greift von der Windows Message Queue per GetMessage die Window Messages für ihn ab. WM_PAINT löst das gesamte neu zeichnen des betroffenen Windows und der ihm untergeordneten Windows aus. Zitieren
fisianer2009 Geschrieben 6. Juni 2012 Autor Geschrieben 6. Juni 2012 dank erstmal. ist aber ganz schön hartes brot :/ Zitieren
Aras Geschrieben 7. Juni 2012 Geschrieben 7. Juni 2012 Ist ja auch sehr Systemnah was du da vor dir hast. Ich hab mich vor 7-8 Jahren damit intensiv beschäftigt und seitdem nicht mehr und das wissen ist bombenfest. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.