Hintergrund für Windowsprogrammierung
-
HALLO.
ich quäle mich nun seit längerer zeit (also mehreren monaten) mit Windowsprogrammierung (WinAPI und MFC) herum. leider habe ich aber das gefühl, dass ich nicht so richtig damit vorankomme. sobald ich mal etwas "eigenes" in mein programm einfügen will, was es nicht gleich in jedem tutorial oder beispielcode gibt, dann bleibe ich hängen, weil ich die windowsprogrammierung immer noch nicht durchschaut habe.
meine frage wäre nun, ob mir hier einfach der hintergrund fehlt (habe VERMESSUGSWESEN studiert)? sind die meisten hier, die windowsprogrammierung betreiben, studierte informatiker oder wo habt ihr euch euer wissen angeeignet?
DANKE.
STICK.
-
stick_thai schrieb:
meine frage wäre nun, ob mir hier einfach der hintergrund fehlt (habe VERMESSUGSWESEN studiert)? sind die meisten hier, die windowsprogrammierung betreiben, studierte informatiker oder wo habt ihr euch euer wissen angeeignet?
Die meisten hier wohl schon, ich aber nicht.
Ich habe mir C/C++ Programmierung durch Windowsprogrammierung angeeignet.
Ich schreibe bewusst C/C++, weil ich merke, dass sich viele an diesem Mischmasch stören.Wie auch immer, wo liegen denn jetzt deine Probleme?
Verlierst du in der API den Überblick oder haperts an den Sprachkenntnissen?
-
stick_thai schrieb:
meine frage wäre nun, ob mir hier einfach der hintergrund fehlt (habe VERMESSUGSWESEN studiert)? sind die meisten hier, die windowsprogrammierung betreiben, studierte informatiker oder wo habt ihr euch euer wissen angeeignet?
Ich habe WinAPI programmiert als ich noch in die Schule ging. Ist nicht gerade ein Kunststück, sogar ziemlich einfach. Aber wohl auch nur, wenn du ein Buch dazu liest:
Windows-Programmierung | ISBN: 3860631888
Ob sich das für dich lohnt, musst du selbst entscheiden. Zumindest ist der Preis gnadenlos gefallen. Wenn ich dran denke, dass ich noch 120 DM dafür hinblättern musste ...
-
HI MINHEN.
danke für die email. dass buch habe ich auch da. mein problem ist aber, dass ich damit nichts so richtig anfangen konnte.
darum habe ich dann mein glück mit MFC versucht, aber auch das scheint mir zu hoch.
grüsse,
STICK.
-
stick_thai schrieb:
HI MINHEN.
danke für die email. dass buch habe ich auch da. mein problem ist aber, dass ich damit nichts so richtig anfangen konnte.
darum habe ich dann mein glück mit MFC versucht, aber auch das scheint mir zu hoch.
grüsse,
STICK.MFC und WinAPI sind dir wohl zu niedrig vom Abstraktionsgrad und deswegen ist es nicht so angenehm damit zu arbeiten.
Wieso nimmst du nicht einfach ein höher abstrahierendes Framework?Eigentlich ist die WinAPI doch sehr einfach, wenn du was eigenes machen willst und nicht weißt wie, dann fehlen dir wohl die nötigen Funktionen aus der WinAPI und die musst du einfach suchen (google/msdn). Das geht jedem so.
-
WinAPI und MFC sind auch unnötig komplexe und veraltete Frameworks. Das es damit schwierig ist, was eigenes auf die Beine zu stellen ist klar. Der Lernaufwand ist viel zu hoch und sonderlich zukunftsträchtig ist es auch nicht.
Wenn du also keine Windows-Systeminternen-Sachen machen willst, sondern nur ein paar Fenster, Knöpfe und ähnliches haben willst, bieten sich andere GUI-Frameworks, wie fltk an.
Siehe auch http://www.c-plusplus.net/forum/viewtopic-var-t-is-81596.html
-
WinAPI ist "umständlich" sofern Low-Level eben umständlich ist. Aber jedes x-beliebige, "bequeme" und moderne Framework stellt die WinAPI was Lernaufwand und Komplextität angeht mit Leichtigkeit in den Schatten. Das ist letztlich wie C und C++. In C muss man viel zu Fuß gehen und selbst machen, hat dafür aber auch ein furchtbar simples System. In C++ gibt's bequemere Konstrukte, die aber den Preis von deutlich größerem Lernaufwand und Komplexität verlangen. Und so ist's mit der WinAPI auch. Sie ist nicht bequem in der Handhabung aber extrem simpel und einfach.
Wen schon eine einzelne Callback-Funktion für Nachrichten (WinAPI) überfordert wird z.B. mit Signals und Slots (Qt) sicher erst recht nicht glücklich.
-
stick_thai schrieb:
dass buch habe ich auch da. mein problem ist aber, dass ich damit nichts so richtig anfangen konnte.
wie wär's, wenn du mal ein paar konkrete fragen im winapi forum stellst? vielleicht lernst du durch interaktion mit anderen besser als aus büchern...
-
Hier steht nicht, dass du unbedingt mit C++ programmieren musst. Wenn das kein Muss-Kriterium ist kannst du wahrscheinlich nahezu alle deiner derzeitigen syntaktischen C++-Kenntnisse nach C# übernehmen. Dort hast du mit WinForms ein sehr gutes und mächtiges aber auch einfach zu verwendendes GUI-Framework zur Verfügung.
Tutorials zur .NET-Programmierung mit C# findest du auch sehr gute im Internet - das sollte dann keinerlei Probleme mehr schaffen
MfG SideWinder
-
minhen schrieb:
WinAPI ist "umständlich" sofern Low-Level eben umständlich ist. Aber jedes x-beliebige, "bequeme" und moderne Framework stellt die WinAPI was Lernaufwand und Komplextität angeht mit Leichtigkeit in den Schatten. [...]
So ein Blödsinn. Die WinAPI ist der umständlichste und komplexeste Weg um ein Fenster darzustellen. Schau dir nur mal ein HelloWorld für die WinAPI an (Quelle Wikipedia)
#include <windows.h> LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) { static TCHAR szAppName[] = TEXT ("Klassenname"); HWND hWnd; MSG msg; WNDCLASSEX wndclassex; wndclassex.cbSize = sizeof(WNDCLASSEX); wndclassex.style = CS_HREDRAW | CS_VREDRAW; wndclassex.lpfnWndProc = &WndProc; wndclassex.cbClsExtra = 0; wndclassex.cbWndExtra = 0; wndclassex.hInstance = hInstance; wndclassex.hIcon = LoadIcon (NULL, IDI_APPLICATION); wndclassex.hCursor = LoadCursor (NULL, IDC_ARROW); wndclassex.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); wndclassex.lpszMenuName = NULL; wndclassex.lpszClassName = szAppName; wndclassex.hIconSm = wndclassex.hIcon; if(!RegisterClassEx(&wndclassex)) { MessageBox (NULL, "RegisterClassEx fehlgeschlagen!", szAppName, MB_OK | MB_ICONERROR); return -1; } hWnd = CreateWindowEx(WS_EX_OVERLAPPEDWINDOW, // erweiterter Fensterstil szAppName, // Name der Fensterklasse "Fenstertitel", // Fenstertitel WS_OVERLAPPEDWINDOW, // Fensterstil CW_USEDEFAULT, // X-Position des Fensters CW_USEDEFAULT, // Y-Position des Fensters CW_USEDEFAULT, // Fensterbreite CW_USEDEFAULT, // Fensterhöhe NULL, // übergeordnetes Fenster NULL, // Menü hInstance, // Programm-Kopiezähler (Programm-ID) NULL); // zusätzliche Parameter ShowWindow(hWnd, iCmdShow); UpdateWindow(hWnd); while(GetMessage(&msg, NULL, 0, 0)) { TranslateMessage (&msg); DispatchMessage (&msg); } UnregisterClass(szAppName, hInstance); return (int) msg.wParam; } // Die Hauptnachrichtenschleife LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { HDC hdc; PAINTSTRUCT ps; switch(message) { case WM_PAINT: hdc = BeginPaint(hWnd, &ps); TextOut(hdc, 0, 0, TEXT("Hello World!"), 12); EndPaint(hWnd, &ps); return 0; break; case WM_CLOSE: DestroyWindow(hWnd); break; case WM_DESTROY: PostQuitMessage(0); return (0); break; } return DefWindowProc(hWnd, message, wParam, lParam); }
Dann schau dir mal ein simples Beispiel in zB fltk an
#include <FL/Fl.H> #include <FL/Fl_Double_Window.H> #include <FL/Fl_Button.H> int main(int argc, char *argv[]) { Fl_Double_Window* w; { Fl_Double_Window* o = new Fl_Double_Window(330, 190); w = o; new Fl_Button(110, 130, 100, 35, "Okay"); o->end(); } w->show(argc, argv); return Fl::run(); }
Die WinAPI benutzt man einfach nicht, außer man muss irgend welche Windows-System-frickeleien machen oder sich ein Framework basteln/erweitern. Für Anfänger ist die WinAPI-Gift, da sie extrem schlecht designt ist.
-
rüdiger schrieb:
Für Anfänger ist die WinAPI-Gift, da sie extrem schlecht designt ist.
winapi ist 'historisch gewachsen'
die steckte schon in windows 1.0 und ich glaub' die ersten versuche damit machte m$ im textmodus...
-
Was auch immer dieses fltk sein soll, ein Framework das heutzutage noch fixe Positionsangaben für Komponenten benützt ist mir zu ekelhaft
MfG SideWinder
-
Was für ein blödsinniger Schwachsinn.
Du brauchst mir nicht ein Hello World als Beispiel zeigen. Vermutlich im Gegensatz zu dir hab ich schon mit der WinAPI gearbeitet und weiß, wovon ich rede. WinAPI ist umständlich insofern als dass man viel Code hat. Aber hättest du mal mit der WinAPI gearbeitet und wüsstest du, wovon du redest, wäre dir auch klar, dass sich das Hello World der WinAPI auf:
TextOut(hdc, 0, 0, TEXT("Hello World!"), 12);
beschränkt. Der Rest ist letztlich Copy & Paste. Das Witzige an deinem dämlichen Beispiel ist auch noch, dass das nur die Initilaisierungssachen sind. Das gröbste ist damit erledigt.
Willst du den Fensterstil ändern? Ändere die Zeile:
WS_OVERLAPPEDWINDOW, // Fensterstil
Soll sich der Mauszeiger über deinem Fenster ändern? Änder die Zeile:
wndclassex.hCursor = LoadCursor (NULL, IDC_ARROW);
Und so weiter. Es ändert sich praktisch nichts am Anfangscode. Und der ist Copy & Paste.
Wie gesagt, viel zu Fuß (und damit viel Text) aber schrecklich einfach.Also spar dir deinen dummen Text von "So ein Blödsinn.". Zeig doch mal her, wie du in fltk ein Fenster machst, welches:
- an der eingestellten Standard-Position für neue Fenster in Windows erscheint
- einen modifizierten Mauszeiger lädt, wenn man über das Fenster fährt
- einen dicken Fensterrahmen, kein Fenstermenü, keine Titelleiste
hat. Beim WinAPI-Code ändert sich praktisch nichts durch diese Anforderungen.
-
net schrieb:
rüdiger schrieb:
Für Anfänger ist die WinAPI-Gift, da sie extrem schlecht designt ist.
winapi ist 'historisch gewachsen'
die steckte schon in windows 1.0 und ich glaub' die ersten versuche damit machte m$ im textmodus...Das glaube ich. Da hat irgend wer eine erste API hingewürfelt und die wurde dann mit jedem neuen Release aufgebläht und zurecht gepatcht.
SideWinder schrieb:
Was auch immer dieses fltk sein soll, ein Framework das heutzutage noch fixe Positionsangaben für Komponenten benützt ist mir zu ekelhaft
FLTK kann das auch anders. Ich hab einfach nur das erst beste Beispiel kopiert.
minhen schrieb:
Was für ein blödsinniger Schwachsinn.
Du brauchst mir nicht ein Hello World als Beispiel zeigen. Vermutlich im Gegensatz zu dir hab ich schon mit der WinAPI gearbeitet und weiß, wovon ich rede. WinAPI ist umständlich insofern als dass man viel Code hat. Aber hättest du mal mit der WinAPI gearbeitet und wüsstest du, wovon du redest, wäre dir auch klar, dass sich das Hello World der WinAPI auf:
TextOut(hdc, 0, 0, TEXT("Hello World!"), 12);
beschränkt. Der Rest ist letztlich Copy & Paste. Das Witzige an deinem dämlichen Beispiel ist auch noch, dass das nur die Initilaisierungssachen sind. Das gröbste ist damit erledigt.
Willst du den Fensterstil ändern? Ändere die Zeile:
WS_OVERLAPPEDWINDOW, // Fensterstil
Soll sich der Mauszeiger über deinem Fenster ändern? Änder die Zeile:
wndclassex.hCursor = LoadCursor (NULL, IDC_ARROW);
Und so weiter. Es ändert sich praktisch nichts am Anfangscode. Und der ist Copy & Paste.
Wie gesagt, viel zu Fuß (und damit viel Text) aber schrecklich einfach.blablabla. Interessiert mich alles ein feuchten Furz. Ich habe auch mal mit der WinAPI gearbeitet. Aber ich habe daraus keine Religion gemacht. Vielleicht ist das Beispiel übertrieben lang, aber es zeigt womit man sich da rumschlagen muss. Das ist redundant, umständlich und absolut überfordernd für jemand, der einfach nur ein paar Fenster zeichnen will.
Also spar dir deinen dummen Text von "So ein Blödsinn.". Zeig doch mal her, wie du in fltk ein Fenster machst, welches:
- an der eingestellten Standard-Position für neue Fenster in Windows erscheint
- einen modifizierten Mauszeiger lädt, wenn man über das Fenster fährt
- einen dicken Fensterrahmen, kein Fenstermenü, keine Titelleiste
hat. Beim WinAPI-Code ändert sich praktisch nichts durch diese Anforderungen.Keine Ahnung. Aber es würde mich wundern, wenn es umständlich wäre. Natürlich muss man Code hinzufügen. Aber da zeigst du ja wunderbar auf, was das Problem der WinAPI ist. Man muss sich mit irgend welchen minimal Sachen rumschlagen. Wozu sollte ich meiner Anwendung explizit sagen, das es den Standard-Mauszeiger laden soll und den Standard-Style und an der Standard-Stelle erscheinen soll, wenn ich das eh 98% der Zeit so haben will. Wenn ich es eben anders will, füge ich ein paar Zeilen Code hinzu und basta.
-
rüdiger schrieb:
blablabla. Interessiert mich alles ein feuchten Furz.
Eben, das ist das Problem. Aber trotzdem schreist du laut rum und bezeichnest andere Meinungen als Blödsinn. Ich mache auch keine Religion aus der WinAPI aber du machst aus alles anderem und WinAPI-Hassen eine Relgion. Und das ist erbärmlich.
Lies noch mal ganz genau, was ich zur WinAPI geschrieben habe. Umständlich und viel Code, aber schrecklich primitiv und einfach.Vielleicht mal ein Vergleich, vielleicht verstehst du es dann:
Mit einem Speer auf die Jagd gehen ist sehr mühsam und umständlich, aber den Speer verstehen ist furchtbar einfach und simpel. Beides eine Folge der Primitivität.
Mit einem Maschinengewehr auf die Jagd gehen ist furchtbar bequem, aber versuch die Technik vom Maschinengewehr zu verstehen und du hast den Salat im Vergleich zum Speer.Jetzt klarer was ich die ganze Zeit sage? Nur zur Sicherheit: die WinAPI ist der Speer ...
-
minhen schrieb:
rüdiger schrieb:
blablabla. Interessiert mich alles ein feuchten Furz.
Eben, das ist das Problem. Aber trotzdem schreist du laut rum und bezeichnest andere Meinungen als Blödsinn. Ich mache auch keine Religion aus der WinAPI aber du machst aus alles anderem und WinAPI-Hassen eine Relgion. Und das ist erbärmlich.
Nö, ist mir eigentlich ziemlich egal die WinAPI. Ich versuch den Leuten hier nur zu helfen. Aber bitte: benutzt die WinAPI wie ihr es wollt. Interessiert mich echt nicht.
Lies noch mal ganz genau, was ich zur WinAPI geschrieben habe. Umständlich und viel Code, aber schrecklich primitiv und einfach.
primitiv sicher. einfach nicht.
-
rüdiger schrieb:
primitiv sicher. einfach nicht.
Da du erst unsicher die Wikipedia zitierst und dann vermutest, dass das eventuell unnötig viel Code sei (was es nicht ist), denke ich, hast du wohl kaum die notwendige Kenntnis der WinAPI um das beurteilen zu können. Und erst recht nicht um dich so weit aus dem Fenster zu lehnen, wie du es hier getan hast.
-
minhen schrieb:
rüdiger schrieb:
primitiv sicher. einfach nicht.
Da du erst unsicher die Wikipedia zitierst und dann vermutest, dass das eventuell unnötig viel Code sei (was es nicht ist), denke ich, hast du wohl kaum die notwendige Kenntnis der WinAPI um das beurteilen zu können. Und erst recht nicht um dich so weit aus dem Fenster zu lehnen, wie du es hier getan hast.
Wunderbar, wenn das also nicht zu viel Code ist. Dann gibst du mir also recht, das es zu umfangreich ist für einen Anfänger?
-
*g* High-Level API vs Low-Level API
Alles hat seine Daseins-Berechtigung, aber prügelt euch nur weiter.
-
Da freut sich aber jemand etwas vermeintlich gefunden zu haben. Aber nein, ich bin mir zwar durchaus bewusst, dass es bei der heutigen PISA-Jugend, wo viele schon von drei zusammenhängenden Sätzen überfordert sind (sieht man leider viel zu oft auch hier im Forum), problematischer sein kann. Doch grundsätzlich folgt aus "viel Text" in keinster Weise "schwer zu verstehen". Und das gilt so auch für die WinAPI.