C++ - Winapi programmieren

  • C/C++

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • C++ - Winapi programmieren

    Hallo erstmal,

    Der Titel verratet nicht alles den so einfach wie es klingt ist es nicht (glaub ich) also ich programmiere grade ein bisschen c++ aber ohne irgend eine IDE sondern ich schreibe alles mit dem Editor speichers als .cpp ab und compiliers manuell via eingabehilfe mit minGw. So Dos-fenster programme funktionieren auch super aber da ich ja alles so manuell mache kann man sich nicht aussuchen ob win32 konsolen anwendung oder win32 app, etc. und ich vermute die Ide von [...] fügt dem code einfach irgend so ein initalisierungsskript zu oder??? wie geht den der für so ne win32 applicaton (Mit winapi halt :D)???

    Mfg WhiteRock
  • Das sollte dir helfen:

    Quellcode

    1. #include
    2. const char g_szClassName[] = "myWindowClass";
    3. // Step 4: the Window Procedure
    4. LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
    5. {
    6. switch(msg)
    7. {
    8. case WM_CLOSE:
    9. DestroyWindow(hwnd);
    10. break;
    11. case WM_DESTROY:
    12. PostQuitMessage(0);
    13. break;
    14. default:
    15. return DefWindowProc(hwnd, msg, wParam, lParam);
    16. }
    17. return 0;
    18. }
    19. int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
    20. LPSTR lpCmdLine, int nCmdShow)
    21. {
    22. WNDCLASSEX wc;
    23. HWND hwnd;
    24. MSG Msg;
    25. //Step 1: Registering the Window Class
    26. wc.cbSize = sizeof(WNDCLASSEX);
    27. wc.style = 0;
    28. wc.lpfnWndProc = WndProc;
    29. wc.cbClsExtra = 0;
    30. wc.cbWndExtra = 0;
    31. wc.hInstance = hInstance;
    32. wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
    33. wc.hCursor = LoadCursor(NULL, IDC_ARROW);
    34. wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
    35. wc.lpszMenuName = NULL;
    36. wc.lpszClassName = g_szClassName;
    37. wc.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
    38. if(!RegisterClassEx(&wc))
    39. {
    40. MessageBox(NULL, "Window Registration Failed!", "Error!",
    41. MB_ICONEXCLAMATION | MB_OK);
    42. return 0;
    43. }
    44. // Step 2: Creating the Window
    45. hwnd = CreateWindowEx(
    46. WS_EX_CLIENTEDGE,
    47. g_szClassName,
    48. "The title of my window",
    49. WS_OVERLAPPEDWINDOW,
    50. CW_USEDEFAULT, CW_USEDEFAULT, 240, 120,
    51. NULL, NULL, hInstance, NULL);
    52. if(hwnd == NULL)
    53. {
    54. MessageBox(NULL, "Window Creation Failed!", "Error!",
    55. MB_ICONEXCLAMATION | MB_OK);
    56. return 0;
    57. }
    58. ShowWindow(hwnd, nCmdShow);
    59. UpdateWindow(hwnd);
    60. // Step 3: The Message Loop
    61. while(GetMessage(&Msg, NULL, 0, 0) > 0)
    62. {
    63. TranslateMessage(&Msg);
    64. DispatchMessage(&Msg);
    65. }
    66. return Msg.wParam;
    67. }
    Alles anzeigen

    Und ne simple Messagebox:

    Quellcode

    1. #include
    2. int WINAPI
    3. WinMain(HINSTANCE hInst, HINSTANCE hPrev, LPSTR pszCmdLine, int iCmdShow)
    4. {
    5. MessageBox(NULL, "Lol", "Wie gehts?", MB_OK | MB_ICONEXCLAMATION);
    6. return 0;
    7. }

    Einfach als c++ datei speichern und kompilieren.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von Benni1000 ()

  • Es ist Hardcore, mit der Winapi zu programmieren.. Es gibt ja noch so Dinge wie Qt, gtk, Mfc, wxwidkets und weis nicht was alles... Ich denke das ist "the way to go" für native C++ Apps, Winapi ist nur für Low Level Dinge oder Hacks geeignet finde ich... Wenn du die Möglichkeit dazu hast, steig auf .Net um und benutze WinForms oder (besser) Wpf, ansonsten google mal nach den oben erwähnten Frameworks.

    Have fun ;P
    "das war meine letzte flamewar PM an dich ."
  • Ok danke!
    Ich brauch das ganze für ein Project in das ich einen c++ compiler (mingw) einbinde. Also kann ich keinen Forms editor, Visual c++, dev-c++, etc. verwenden. ^^
    +
    Edit: könnte mir jemand mal einfach so ein example mit wxwidgets o.ä. machen. Einfach ein Fenster mit nem button oder ner checkbox oder so!
    Wäre total nett :thumbsup: :D

    Edit2: habs jetzt getestet benni1000, voll cool nur wie krieg ich das schwarze fenster dahinter weg? und wie lautet so ein code für nen einfachen button?

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von whiterock ()

  • und wir wissen immer noch nicht, welche parameter du g++ mitgibst und wie deine files aussehen..

    programmingforums.org/thread7219.html
    tinf2.vub.ac.be/~dvermeir/manuals/uintro/gpp.html#tth_sEc3.2

    Ich war neugierig und hab ein wenig studiert(allerdings auf linux, hab hier grad kein windows).
    - mit -I kannst du include directories angeben, zB: -I/C://wxWidgets/include/ (oder was in der Art)
    - mit -L gibst du die Library-Suchpfäde an, zB; -L/C://wxWidgets/lib/
    - mit -l gibst du die einzelnen Librarynamen an, etwa: -L/C://wxWidgets/lib/ -lwxWidgets (keine Ahnung)
    die Libraries sucht er dann in den mit -L angegebenen Pfaden.

    Das hier ist mein kleiner Test mit Qt4, der funktioniert hat.
    g++ test.cpp -o test -I/usr/include/qt4/QtCore/ -I/usr/include/qt4/QtGui -L/usr/lib/ -lQtCore -lQtGui
    Auf Windows dürfte der Syntax gleich sein, aber keine Ahnung...
    "das war meine letzte flamewar PM an dich ."
  • Was hast du runtergeladen, in welchem Ordner hast du nachgegugt(und was darin gefunden) und wie sieht dein Kompilierungs-Befehl aus?
    "das war meine letzte flamewar PM an dich ."
  • whiterock schrieb:

    soweit so gut, ich hab jetzt in den ordner mit den ganzen header datein nachgekuckt und nix mit wxwidgets.h oder ähnlichem gefunden! Liegts daran? Muss ich mir es wo downloaden? :huh:


    Es ist zwar schon eine Weile her, dass ich mit wxWidgets gearbeitet habe, aber afair musst du dir die Bibliothek erst von deren Webseite runterladen, dann selbst kompilieren und anschließend entweder die Pfade in PATH eintragen oder dem Compiler mit -I übergeben (<- das ist ein großes i).

    Schau dich hier mal um. Wenn du unter Windows und mit MinGW entwickelst, empfehle ich dir eclipse mit CDT als IDE, da beim Kompilieren für gewöhnlich eine Menge Flags übergeben werden müssen, die du so nur einmal bei den Projekteinstellungen angeben musst.
  • Nein, denn die Bibliothek besteht ja nicht nur aus den Headern, sondern auch aus Implementationen. Die Klassen, die dort bereitgestellt werden haben ja Methoden, die in irgendwelchen Sourcedateien implementiert wurden; ohne diese wirst du beim Kompilieren Fehler vom Linker bekommen, dass du jede Menge Funktionen deklariert hast, die nirgendwo definiert sind.

    Du könntest natürlich irgendwie versuchen, die gesamte wxWidgets-Bibliothek in den Ordner deines Projketes zu stecken und als Teil dieses Projektes behandeln, aber das hätte einige Nachteile:
    1.: Du müsstest jedes Mal, wenn du dein Projekt kompilieren willst, die gesamte wxWidgetsbibliothek mit kompilieren (es sei denn, du lässt alte Dateien liegen)
    2.: Du müsstest deren Buildprozess irgendwie anpassen: Die Bibliothek hat gewisse "Schalter" (Symbole, die man definieren kann oder nicht), um zu steuern, welche Features man (wie) nutzen möchte. Normalerweise gibst du die einmal beim Kompilieren an, und gut ist. Wenn du die Bibliothek nun in dein Projekt integrierst, musst du darauf achten, dass diese "Schalter" überall gleich gesetzt sind.

    Da ist es wirklich viel einfacher, einmal die Bibliothek an sich mit den gewünschten Einstellungen zu kompilieren um sie dann nur noch zu verlinken.