Neu in WinApi
-
Holla.
Ich habe mich entschlossen, mir die Windows Api anzueignen,
da ich mich von Visual Basic komplett verabschieden will.
Die grundlagen von C++ kenne ich ja schon.Bin schon mit dieser Seite dieses Tutorials durch:
http://pronix.linuxdelta.de/C/win32/win32_4.shtml#include <windows.h> #include "resource.h" LPCSTR MainClassName = "Texteditor"; // Zum Empfangen und Auswerten der messages LRESULT CALLBACK WndProc(HWND hWnd,UINT iMsg, WPARAM wParam, LPARAM lParam); int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) { // Fensterstruktur setzen WNDCLASSEX wc; wc.cbSize = sizeof(WNDCLASSEX); wc.style = 0; wc.lpfnWndProc = WndProc; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance = hInstance; wc.hIcon = LoadIcon(GetModuleHandle(NULL), MAKEINTRESOURCE(ID_ICON)); wc.hCursor = LoadCursor(NULL, IDC_ARROW); wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); wc.lpszMenuName = MAKEINTRESOURCE(IDR_MENU1); wc.lpszClassName = MainClassName; wc.hIconSm = (HICON)LoadImage(GetModuleHandle(NULL), MAKEINTRESOURCE(ID_ICON), IMAGE_ICON, 16, 16, 0); // Fenster registrieren if(!RegisterClassEx(&wc)) { MessageBox(NULL, "Windows Registrations Fehler", "Error!", MB_ICONEXCLAMATION | MB_OK); return 0; } // Fenster erstellen HWND hWnd = CreateWindowEx(WS_EX_CLIENTEDGE, MainClassName, "Texteditor", WS_OVERLAPPEDWINDOW|WS_VISIBLE, CW_USEDEFAULT, CW_USEDEFAULT, 300, 150, NULL, NULL, hInstance, NULL); if(hWnd == NULL) { MessageBox(NULL, "Fehler beim Erstellen des Fensters!", "Error!", MB_ICONEXCLAMATION | MB_OK); return 0; } // Fenster anzeigen ShowWindow(hWnd, iCmdShow); // Auf Messages reagieren MSG wmsg; while( GetMessage(&wmsg, hWnd, 0, 0) ) { TranslateMessage(&wmsg); DispatchMessage(&wmsg); } return wmsg.wParam; } LRESULT CALLBACK WndProc(HWND hWnd, UINT iMsg, WPARAM wParam, LPARAM lParam) { char string[255]; switch (iMsg) { case WM_CLOSE: DestroyWindow(hWnd); break; case WM_DESTROY: PostQuitMessage(0); return 0; case WM_COMMAND: switch(LOWORD(wParam)) { case ID_FILE_OPEN: LoadString(GetModuleHandle(NULL), ID_STRING_OPEN, string, sizeof(string)); MessageBox(hWnd, string, "Öffnen", MB_ICONINFORMATION); break; case ID_FILE_SAVE: LoadString(GetModuleHandle(NULL), ID_STRING_SAVE, string, sizeof(string)); MessageBox(hWnd, string, "Speichern", MB_ICONINFORMATION); break; case ID_OPTIONS_OPTIONS_OPTION1: LoadString(GetModuleHandle(NULL), ID_STRING_OPTION1, string, sizeof(string)); MessageBox(hWnd,string, "Option 1", MB_ICONINFORMATION); break; case ID_OPTIONS_OPTIONS_OPTION2: LoadString(GetModuleHandle(NULL), ID_STRING_OPTION2, string, sizeof(string)); MessageBox(hWnd,string, "Option 2", MB_ICONINFORMATION); break; case ID_\1: LoadString(GetModuleHandle(NULL), ID_STRING_ABOUT, string, sizeof(string)); MessageBox(hWnd,string, "Über", MB_ICONINFORMATION); break; case ID_FILE_EXIT: DestroyWindow(hWnd); break; } break; } return DefWindowProc(hWnd, iMsg, wParam, lParam); }Ein Haufen Sachen sind für mich nicht nachvollziehbar.
Das meißte habe ich in diesem Turorial nur
heuristisch zum reinpasten gelernt
Zum Beispiel verstehe ich nicht, wieso man ein Fenster
bei Windows registriert mit einem struct, dass man
al Argument zum Registrieren übergibt und dann noch
das Fenster erstellt!?Jede 2e Zeile in diesem Tutorial heißt es "dafür schauen sie
bitte in der msdn nach", "dazu genauer unter der msdn" ich
meine, wenn man diese Andeutungen weglässt, hat man bloß noch
code zum pasten, jetzt mal im Ernst!Aus einem msdn Artikel wurde ich in meinem ganzen Leben noch nicht schlau!
Ich schaffe es nicht einmal, per Google eine Erklärung
zum typedef LRESULT zu finden, wozu er a ist bzw. was er bringt.
Wieso LRESULT CALLBACK? Ist doch nur eine simple Funktion,
die durch wc ausgelöst wird.
Was bringt der MainClassName? Was bringt Translate Message?Ich will zuerst mal einen simplen Texteditor coden.
Verdammt, ich weiß nichtmal, wie ich das Problem schildern soll!!!// edit
Hab jetzt ne Runde recharchiert und kann das meißte jetzt nachvollziehen.
Ein Problem fällt mir jetzt aber auf. Wenn ich das Fenster schliesse,
läuft das Programm noch weiter im Taskmanager.MessageBox(NULL, "test", "test", MB_OK); return wmsg.wParam; }Habe vor return wmsg.wParam zur Fehleranalyse ne messagebox eingefügt.
Sie wird nicht ausgegeben. Die Fensterklasse wird korrekt zerstört
nach dem Schließen des Fensters aber die Schlefife geht noch weiter.
Ich kann nichts über die Rückgabe dieser Funktion reecharchieren bzw
wann sie mal false zurückgibt.Die PostQuitMessage sendet dem Fenster die Nachricht WS_QUIT, dass
die Unendlich-Schleife beendet wird. Aber wozu ist der Parameter?
PostQuitMessage(0);
-
sjBlack schrieb:
Ein Problem fällt mir jetzt aber auf. Wenn ich das Fenster schliesse, läuft das Programm noch weiter im Taskmanager.
Sobald das Hauptfenster WM_DESTROY verarbeitet hat, ist "hWnd" ungültig.
GetMessage () probiert dann die ganze Zeit, Botschaften für ein ungültiges Fensterhandle zu holen.
Das geht aber nicht, deshalb liefert GetMessage () ständig -1 zurück (schwerer fehler), was aber nirgendwo abgefragt wird.MSG wmsg; // while( GetMessage(&wmsg, hWnd, 0, 0) ) while( GetMessage(&wmsg, 0, 0, 0) ) // <- besser so hier { ... }sjBlack schrieb:
Die PostQuitMessage sendet dem Fenster die Nachricht WS_QUIT, dass die Unendlich-Schleife beendet wird.
Aber wozu ist der Parameter? PostQuitMessage(0);PostQuitMessage () sorgt nur dafür, daß GetMessage () als Botschaft WM_QUIT holt woraufhin GetMessage () 0 (also FALSE) zurückgibt und die While-Schleife verlassen werden kann.
Der Parameter ist dann der Wert von "wmsg.wParam" den die Anwendung an das Betriebssystem zurückgibt.
Dieser Rückgabewert kann dann z.B. von einem anderen Programm via GetExitCodeProcess () abgefragt werden.
-
ah! und wozu ist die funktion CALLBACK LRESULT?
wofür steht überhaupt jetzt CALLBACK LRESULT?
-
sjBlack schrieb:
ah! und wozu ist die funktion CALLBACK LRESULT?
wofür steht überhaupt jetzt CALLBACK LRESULT?Callback bezeichnet eine Rückruffunktion in der Informatik. Leicht verständliche Beispiele hier:
-
Also ist CALLBACK ein Attribut, welches dafür sorgt, dass hier
wc.lpfnWndProc = WndProc;Eine Kopie der Funktion reingesetzt wird, anstatt dass es so verstanden wird,
dass die Rückgabe der Funktion dem Strukturelement zugewiesen wird?Dass der Compiler keien Fehelermeldung wirft, die Aktualparameterliste würde
fehlen, sondern die Kopie der Funktion zugewiesen wird und ohne
dieses Attribut ist es nicht möglich.Spiele damit rum, damit ich aus dem Fensterprogramm auch wirklich alles verstehe:
#include <windows.h> // Zum Empfangen und Auswerten der messages LRESULT CALLBACK WndProc(); int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) { struct test { LRESULT funktion; int aufrufe; } bla; bla.funktion = WndProc; while (int i = 0; i <= 4; i++) { bla.funktion(); bla.aufrufe++; } return 0; } // LRESULT CALLBACK WndProc() { MessageBox(NULL, "Hallo", "hi", MB_OK); }Bekomme hier aber die Fehlermeldung
14 C:\Dokumente und Einstellungen\sjBlack\Desktop\Neuer Ordner (2)\main.cpp invalid conversion from `LRESULT (*)()' to `LRESULT'Kennt jemand eine WinApi Datenbank, wo man Funktionen, structs und
Klassen von windows.h nachschlagen kann? Bräuchte ich mal dringend.
Das Recharchieren bei Google nach einzelnen Funktionen wird immer
aufwändiger.
-
Was du suchst, nennt sich MSDN (Microsoft Developer Network) Library.
Das deutsche Nachschlagewerk für Entwickler findet sich hier: http://msdn2.microsoft.com/de-de/library/default.aspx
-
Was ich suche ist das Gegenteil der MSDN

Auf dieser ver******* 5ch3!55-53!73 finde ich nie was brauche!
Und wenn, wird nicht mehr erklärt als ich schon weiß!Frage noch offen:
sjBlack schrieb:
Also ist CALLBACK ein Attribut, welches dafür sorgt, dass hier
wc.lpfnWndProc = WndProc;Eine Kopie der Funktion reingesetzt wird, anstatt dass es so verstanden wird,
dass die Rückgabe der Funktion dem Strukturelement zugewiesen wird?Dass der Compiler keien Fehelermeldung wirft, die Aktualparameterliste würde
fehlen, sondern die Kopie der Funktion zugewiesen wird und ohne
dieses Attribut ist es nicht möglich.Spiele damit rum, damit ich aus dem Fensterprogramm auch wirklich alles verstehe:
#include <windows.h> // Zum Empfangen und Auswerten der messages LRESULT CALLBACK WndProc(); int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) { struct test { LRESULT funktion; int aufrufe; } bla; bla.funktion = WndProc; while (int i = 0; i <= 4; i++) { bla.funktion(); bla.aufrufe++; } return 0; } // LRESULT CALLBACK WndProc() { MessageBox(NULL, "Hallo", "hi", MB_OK); }Bekomme hier aber die Fehlermeldung
14 C:\Dokumente und Einstellungen\sjBlack\Desktop\Neuer Ordner (2)\main.cpp invalid conversion from `LRESULT (*)()' to `LRESULT'please
// edit
Und noch eine Fragecase WM_CLOSE: DestroyWindow(hWnd); break; case WM_DESTROY: PostQuitMessage(0); return 0;Kann man sich das nicht sparen mit:
case WM_CLOSE: DestroyWindow(hWnd); PostQuitMessage(0); return 0;
-
Kann man sich das nicht sparen mit:
case WM_CLOSE: DestroyWindow(hWnd); PostQuitMessage(0); return 0;Könnte man...
Aber ich sage mal: Nein. Das kann man nicht. Wenn Dein Fenster direkt durch DestroyWindow zerstört werden würde, dann wird kein PostQuitMessage ausgelöst.
Weil in diesem Moment WM_CLOSE nicht gesendet wird.Besser und protabel (best practice) ist es einfach erst auf WM_DESTROY hin erst PostQuitMessage zu senden.
-
sjBlack schrieb:
Holla.
Ich habe mich entschlossen, mir die Windows Api anzueignen,
da ich mich von Visual Basic komplett verabschieden will.
Die grundlagen von C++ kenne ich ja schon.Bin schon mit dieser Seite dieses Tutorials durch:
http://pronix.linuxdelta.de/C/win32/win32_4.shtmlEin Haufen Sachen sind für mich nicht nachvollziehbar.
Das meißte habe ich in diesem Turorial nur
heuristisch zum reinpasten gelernt
Das ist zum Lernen aber nicht unbedingt sinnvoll...

Zum Beispiel verstehe ich nicht, wieso man ein Fenster
bei Windows registriert mit einem struct, dass man
al Argument zum Registrieren übergibt und dann noch
das Fenster erstellt!?Da gibt es nichts zu verstehen, es ist eben so. Ein Sinn liegt darin, daß der Fenstermanager überprüft, ob die Daten des registrierten Fensters gültig sind. Falls nicht, kann das Fenster nicht erstellt werden und er gibt "RegisterClassEx()" einen Fehlerwert zurück, den man analysieren kann. Ohne diese Prodzedur würde CreateWindowEx wohl Datensalat produzieren.
Jede 2e Zeile in diesem Tutorial heißt es "dafür schauen sie
bitte in der msdn nach", "dazu genauer unter der msdn" ich
meine, wenn man diese Andeutungen weglässt, hat man bloß noch
code zum pasten, jetzt mal im Ernst!Internettutorials sind ein gutes Hilfsmittel zum Einstieg, reichen aber nicht aus, um sich eingehender damit zu befassen. Zum einen kannst Du Dir mehrere Tuts reinziehen, zum anderen gibt es dafür auch Bücher (Charles Petzold). Aber die meisten und umfangreichsten Infos gibt eben die MSDN. Man muß nur mit ihr umgehen können.
Aus einem msdn Artikel wurde ich in meinem ganzen Leben noch nicht schlau!
Ich schaffe es nicht einmal, per Google eine Erklärung
zum typedef LRESULT zu finden, wozu er a ist bzw. was er bringt.
Wieso LRESULT CALLBACK? Ist doch nur eine simple Funktion,
die durch wc ausgelöst wird.
Was bringt der MainClassName? Was bringt Translate Message?LRESULT CALLBACK ist der Funktionstyp. Der ist in Windows.h definiert. Sowas steht im Petzold.
MainClassName ist nur der Name der Fensterklasse, der dem Strukturelement wc.lpszClassName zugewiesen wird. Wenn Du die C++-Grundlagen kannst, müßtest Du das eigentlich wissen.Zu TranslateMessage:
Borland-Hilfe schrieb:
The TranslateMessage function translates virtual-key messages into character messages. The character messages are posted to the calling thread's message queue, to be read the next time the thread calls the GetMessage or PeekMessage function.
BOOL TranslateMessage(
CONST MSG *lpMsg // address of structure with message
);Parameters
lpMsg
Points to an MSG structure that contains message information retrieved from the calling thread's message queue by using the GetMessage or PeekMessage function.
Return Values
If the message is translated (that is, a character message is posted to the thread's message queue), the return value is nonzero.
If the message is not translated (that is, a character message is not posted to the thread's message queue), the return value is zero.
Windows NT: The TranslateMessage function returns a nonzero value for function and arrow keys as well as for character and digit keys.Remarks
The TranslateMessage function does not modify the message pointed to by the lpMsg parameter.
WM_KEYDOWN and WM_KEYUP combinations produce a WM_CHAR or WM_DEADCHAR message. WM_SYSKEYDOWN and WM_SYSKEYUP combinations produce a WM_SYSCHAR or WM_SYSDEADCHAR message.
TranslateMessage produces WM_CHAR messages only for keys that are mapped to ASCII characters by the keyboard driver.If applications process virtual-key messages for some other purpose, they should not call TranslateMessage. For instance, an application should not call TranslateMessage if the TranslateAccelerator function returns TRUE.
Die Fensterklasse ist eine Kathegorisierung, um bestimmte Attribute für alle Fenster dieser Klasse zu setzen (mit wc.cbClassExtra). Das nähert sich der OOP an.
Ich will zuerst mal einen simplen Texteditor coden.
Verdammt, ich weiß nichtmal, wie ich das Problem schildern soll!!!// edit
Hab jetzt ne Runde recharchiert und kann das meißte jetzt nachvollziehen.
Ein Problem fällt mir jetzt aber auf. Wenn ich das Fenster schliesse,
läuft das Programm noch weiter im Taskmanager.MessageBox(NULL, "test", "test", MB_OK); return wmsg.wParam; }Habe vor return wmsg.wParam zur Fehleranalyse ne messagebox eingefügt.
Sie wird nicht ausgegeben. Die Fensterklasse wird korrekt zerstört
nach dem Schließen des Fensters aber die Schlefife geht noch weiter.
Ich kann nichts über die Rückgabe dieser Funktion reecharchieren bzw
wann sie mal false zurückgibt.Die PostQuitMessage sendet dem Fenster die Nachricht WS_QUIT, dass
die Unendlich-Schleife beendet wird. Aber wozu ist der Parameter?
PostQuitMessage(0);PostQuitMessage teilt dem Fenster (und dem OS) mit, daß das Programm beendet wird und der dafür reservierte Speicher freigegeben werden kann. Auch das steht im Petzold.
-
sjBlack schrieb:
Also ist CALLBACK ein Attribut, welches dafür sorgt, dass hier
wc.lpfnWndProc = WndProc;Eine Kopie der Funktion reingesetzt wird, anstatt dass es so verstanden wird,
dass die Rückgabe der Funktion dem Strukturelement zugewiesen wird?Einfach gesagt ist eine Callback-Funktion eine Funktion, die zwar im Quellcode vorhanden ist, aber nirgendwo aufgerufen wird.
Das mag ja verwirrend sein, daß man bei der WinAPI Funktionen schreiben muß, die man sowieso nicht aufruft.
Aber wenn Du via RegisterClassEx () eine selbstdefinierte Fensterklasse registrierst, dann braucht das Betriebssystem u.a. noch die Adresse einer bestimmten Funktion.
Diese Funktion wird immer dann aufgerufen wenn das Fenster eine Botschaft verarbeiten soll/muß.
Aufgerufen wird sie aber vom Betriebssystem. Deshalb Callback.
Als Callback-Funktion darf man allerdings keine x-beliebige Funktion schreiben.
Das Betriebssystem erwartet als Callback eine Funktion die folgende "Signatur" hat :1 2 3 4 5 6 LRESULT CALLBACK WndProc(HWND hWnd, UINT iMsg, WPARAM wParam, LPARAM lParam); 1 Rückgabetyp 2 Aufrufkonvention 2-6 Parameter (Argumente)Mit "wc.lpfnWndProc = WndProc;" übergibt man dem Betriebssystem nur die Adresse der (selbstgeschriebenen) Callback-Funktion.
-
merker schrieb:
sjBlack schrieb:
Also ist CALLBACK ein Attribut, welches dafür sorgt, dass hier
wc.lpfnWndProc = WndProc;Eine Kopie der Funktion reingesetzt wird, anstatt dass es so verstanden wird,
dass die Rückgabe der Funktion dem Strukturelement zugewiesen wird?Einfach gesagt ist eine Callback-Funktion eine Funktion, die zwar im Quellcode vorhanden ist, aber nirgendwo aufgerufen wird.
Interessant. Wie soll ein Programm funktionieren, wenn LRESULT CALLBACK WndProc NIE aufgerufen wird?
Das mag ja verwirrend sein, daß man bei der WinAPI Funktionen schreiben muß, die man sowieso nicht aufruft.

Aber wenn Du via RegisterClassEx () eine selbstdefinierte Fensterklasse registrierst, dann braucht das Betriebssystem u.a. noch die Adresse einer bestimmten Funktion.
Diese Funktion wird immer dann aufgerufen wenn das Fenster eine Botschaft verarbeiten soll/muß.ALLE Fensterklassen haben eine Funktion. Bei den vorregistrierten Fensterklassen (MessageBox, Button, Editfelder o.ä.) ist die Funktion schon von der API vorgegeben, bei selbsterstellten Klassen oder Dialogen muß man sie eben selbst schreiben.
Aufgerufen wird sie aber vom Betriebssystem.
Also doch..?
Deshalb Callback.
Als Callback-Funktion darf man allerdings keine x-beliebige Funktion schreiben.
Das Betriebssystem erwartet als Callback eine Funktion die folgende "Signatur" hat :1 2 3 4 5 6 LRESULT CALLBACK WndProc(HWND hWnd, UINT iMsg, WPARAM wParam, LPARAM lParam); 1 Rückgabetyp 2 Aufrufkonvention 2-6 Parameter (Argumente)Mit "wc.lpfnWndProc = WndProc;" übergibt man dem Betriebssystem nur die Adresse der (selbstgeschriebenen) Callback-Funktion.
-
thx, elektronix. Ich habe mir schon den Kopf zerbrochen beim
Versuch zu Verstehen, was er mir sagen wollte.Ja, aber ist Callback jetzt ein Attribut?
Oder ist es ein typedef für einen pointer auf eine LRESULT Funktion?
Die Fensterstruktur verlangt ja doch eine Funktion als Referenz zw.
einen Pointer zu der Funktion, die als dessen Fensterprozedur
verwendet werden soll. Also nehme ich an, CALLBACK ist ein typedef
für einen pointer auf eine Funktion.Ich möchte alles detailgenau wie möglich wissen.
-
Derartige Details kannst du im Petzold nachlesen, wenn es für Dich wichtig ist (ich habs im Moment nicht auf Lager). Klar ist, daß Fensterfunktionen immer CALLBACK sein müssen, aber nicht unbedingt LRESULT. BOOL o.ä. geht auch (bei vielen Dialogfunktionen wird BOOL CALLBACK gesetzt). CALLBACK ist demnach ein Attribut für den Rückgabetyp. Der Zeiger auf die Funktion heißt lpfn (long pointer to Function), z. B. bei wc.lpfnWndProc.
-
Kannst du mir die URL zu Petzold pasten?
-
Ein gutgemeinter Rat:
Die WINAPI ist mMn sehr umständlich und alles andere als produktiv. Bevor Du dich hier ewig lang mit dem Zeug rumschlägst, würde ich dir eher empfehlen eine GUI-API wie wxWidgets, QT oder WinGTK zu verwenden. Wobei ich zu wxWidgets tendieren würde. Das Programmieren damit geht verdammt schnell von der Hand und ist saueinfach, wenn man den Einstieg mal geschafft hat. Ausserdem hat wx eine sehr gute Dokumentation.
Einfache Programme sind damit recht fix geschrieben und komplexe Programme sind auch kein Problem. Vor allem wenns dann mal ans Enwtickeln eigener Widgets (Buttons etc) geht, ist diese API Gold wert.
rya.
-
Ich will aber erst das meißte der WinApi beherrschen,
dann die MFC lernen und danach GUI.
Frage: Wie bekomme ich jetzt ein TextBox Control in
das Hauptfenster?
-
sjBlack schrieb:
Kannst du mir die URL zu Petzold pasten?
Ist keine URL, sondern eine ISBN:
http://www.amazon.de/Windows-Programmierung-m-CD-ROM-Charles-Petzold/dp/3860634879
Das Buch ist ja um ein Drittel billiger als vor 2 Jahren...Ich will aber erst das meißte der WinApi beherrschen,
dann die MFC lernen und danach GUI.Sehr vernünftig
. Aber nur zur Klärung: GUI ist der Oberbegriff für "Graphical User Interface". Also ist die WinAPI ein GUI. wxWidgets, GTK, MFC u. a. sind objektorientierte Kapselungen der WinAPI, enthalten aber nicht die gesamte API, sondern nur die wichtigsten Funktionen. Oft genung muß man trotz MFC auf das "Rohprodukt" zurückgreifen. Also nicht irre machen lassen 
-
mfc kann ich mit dev-c++ vergessen.
Ich weiß jetzt aber immer noch nicht, wie ich eine TextBox ins Fenster krieg!!!
Für visual basic find ich bei Google jeden Scheiß, aber für die WinApi
kann ich tagelang googlen und weiß noch immer nicht, wie ich eine
simple TextBox ins Fenster bekomme!
-
"CALLBACK" hat nichts großartig zu sagen, dahinter steckt (in der "windef.h"):
#define CALLBACK __stdcall...und das gibt lediglich die Aufrufkonvention an.
In der winuser.h findet man noch:
typedef LRESULT (CALLBACK* WNDPROC)(HWND, UINT, WPARAM, LPARAM);WNDPROC (zu finden als Member von WNDCLASS oder WNDCLASSEX) ist demnach nichts anderes als ein Zeiger auf eine Funktion vom Typ
LRESULT CALLBACK LustigerFunktionsname(HWND blupp, UINT bla, WPARAM bli, LPARAM blo)Textfeld erzeugen:
HWND textWnd=CreateWindow("EDIT","blupp",WS_CHILD|WS_VISIBLE,10,10,200,20,HauptFensterHandle,NULL,hInstance,NULL);...was die einzelnen Parameter einer WinAPI-Funktion sollen oder die Member einer Struktur kann man relativ gut in der msdn nachlesen.
Sehr zu empfehlen ist auch die Doku im "Platform SDK" oder "Windows SDK" - Und zwar deshalb weil man da über den Index sehr schnell Funktionen etc. nachschlagen kann und weil die msdn-online wie ich finde kacken lahm ist
-
http://msdn2.microsoft.com/de-de/default.aspx
Wo? Sagt mir doch einer, wo????
Wieso schmeißt mir imemr jeder die msdn an den Kopf?
Sagt mir einer, wo ich auf dieser Seite
nach Funktionen, structs und so weiter nachschlagen kann!!http://www.microsoft.com/germany/msdn/library/windows/default.mspx?mfr=true
oder wenn ich hier nen Funktionsnamen eingebe, krieg ich
ein paar Links zu Artikeln anderer Seiten, die nichts
mit dem zutun haben, wonach ich suchte.
P.S.: Danke für die TextBox / EDIT