Newbee frage zu win32 app



  • Hi
    Grad hab ich mir ne win32 anwendung geschrieben.
    Die lies sich mit vc++ auch ganz toll compilieren, nur, wenn ich sie ausführe so endet sie sofort!
    Die Anwendung ist ein POPUP-Fenster ohne menü und buttons. Auch die messages lass ich DefWindowProc() behandeln.
    Also mein Problem...:
    Wie krieg ichs hin das das Fenster geöffnet bleibt?? 😕 😕
    wenn jemand einen kleinen Tipp hat...



  • du bist hier wohl im falschen forum!

    trotzdem: hast du auch eine nachrichten schleife eingerichtet?



  • falsches Forum? ..... naja!
    ja hab ich schon eingebaut, also die Nachrichten-Schleife.
    Ich prüfe die PeekMessage-Methode auf wahr oder falsch um dann Translate und DispatchMessage auszuführen.
    Sollte ich diese Schleife, also if(peekmessage...) in die WinMain() reinschreiben? Denn da steht sie gerade...



  • poste mal den ganzen kode!



  • hmm, hmm, wenn du meinst...

    #define WIN32_LEAN_AND_MEAN
    #include <windows.h>
    #include "prototypen.h"
    #include "e:\Entwicklung\files\resource.h"

    int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
    {
    // erstmal unser Fenster deklarieren:

    WNDCLASSEX fuck_fenster;
    MSG fuck_fenster_msg;
    HWND fuck_fenster_hwnd;
    HBITMAP hBitmap;

    fuck_fenster.cbClsExtra = 0;
    fuck_fenster.cbSize = sizeof(WNDCLASSEX);
    fuck_fenster.cbWndExtra = 0;
    fuck_fenster.hbrBackground = (HBRUSH)GetStockObject(GRAY_BRUSH);
    fuck_fenster.hCursor = LoadCursor(NULL, IDC_ARROW);
    fuck_fenster.hIcon = LoadIcon(NULL, IDI_WINLOGO);
    fuck_fenster.hIconSm = LoadIcon(NULL, IDI_WINLOGO);
    fuck_fenster.hInstance = hInstance;
    fuck_fenster.lpfnWndProc = MsgHandler;
    fuck_fenster.lpszClassName = "Fuck Fenster";
    fuck_fenster.lpszMenuName = NULL;
    fuck_fenster.style = CS_VREDRAW | CS_HREDRAW | WNDC | CS_DBLCLKS;

    RegisterClassEx(&fuck_fenster);

    fuck_fenster_hwnd = CreateWindowEx(NULL, "Fuck Fenster", "Aktives Fenster",
    WS_POPUP | WS_VISIBLE, 100, 100, 620, 480, NULL, NULL, hInstance, NULL);

    // und checken ob das gut ging und dann zeigen!!

    if(fuck_fenster_hwnd == 0)
    {
    MessageBox(fuck_fenster_hwnd, "Fenster erstellen hat nicht geklappt!",
    "Fehler", MB_ICONEXCLAMATION | MB_OK);
    }
    if((PeekMessage(&fuck_fenster_msg, fuck_fenster_hwnd, 0, 0, PM_REMOVE)))
    {
    TranslateMessage(&fuck_fenster_msg);
    DispatchMessage(&fuck_fenster_msg);
    }else
    {
    MessageBox(fuck_fenster_hwnd, "Kann keine Messages lesen!",
    "Fehler", MB_ICONEXCLAMATION | MB_OK);
    }

    hBitmap = (HBITMAP)LoadImage(NULL, SLIMY.bmp, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
    ShowWindow(fuck_fenster_hwnd, nCmdShow);
    UpdateWindow(fuck_fenster_hwnd);
    //ZeigeFenster(fuck_fenster_hwnd, fuck_fenster_msg);

    return(fuck_fenster_msg.wParam); //Rückgabe an das System
    }// Ende WinMain!

    // Anfang MsgHandler
    LRESULT CALLBACK MsgHandler(HWND fuck_fenster_hwnd, UINT fuck_fenster_msg,
    WPARAM wParam, LPARAM lParam)
    {
    if(fuck_fenster_msg == WM_CLOSE)
    {
    DestroyWindow(fuck_fenster_hwnd);
    return(0);
    }
    if(fuck_fenster_msg == WM_DESTROY)
    PostQuitMessage(0);
    if(fuck_fenster_msg == WM_PAINT)
    {

    HDC hdc;
    PAINTSTRUCT ps;
    int pixel = 1;
    hdc = BeginPaint(fuck_fenster_hwnd, &ps);
    RECT textrect = {100, 100, 500, 500};

    SetTextColor(hdc, RGB(255,0,0));
    SetBkColor(hdc, RGB(0,0,0));
    SetBkMode(hdc, TRANSPARENT);
    TextOut(hdc, 50, 50, "Ist das eine schoene Welt!", 26);

    DrawText(hdc, "man ist das ein geiler Text!!!", 29, &textrect, DT_CENTER);

    HDC pixel_hdc = GetDC(fuck_fenster_hwnd);
    if(!(SetPixelV(pixel_hdc, 100, 300, RGB(255,0,0))))
    pixel = 0;
    ReleaseDC(fuck_fenster_hwnd, pixel_hdc);
    if(pixel == 0)
    {
    MessageBox(fuck_fenster_hwnd, "Ich konnte keinen Pixel malen!",
    "Fehler!", MB_ICONEXCLAMATION | MB_OK);
    }else
    MessageBox(fuck_fenster_hwnd, "Ich konnte Pixel malen!",
    "Info!", MB_ICONEXCLAMATION | MB_OK);
    EndPaint(fuck_fenster_hwnd, &ps);
    return(0);
    }

    return(DefWindowProc(fuck_fenster_hwnd, fuck_fenster_msg, wParam, lParam));
    }// Ende MsgHandler

    ....soweit!
    uwerfend ist das nicht und geht wohl auch ein bisschen durcheinander.



  • Sollte die Nachrichtenschleifge für ein fenster nicht besser so aussehen:

    MSG msg;
      while (GetMessage (&msg, NULL, 0, 0)) {
          TranslateMessage (&msg);
          DispatchMessage (&msg);
        }
      }
      return msg.wParam;
    


  • *LOL* fuck_fenster 😃
    Nimm das nächste mal Code-Tags.



  • die winmain hat überhaupt keine schleife, da kann das prog auch net lang leben 🙂



  • Was für eine Schleife meinst du?
    Also das soll wahrscheinlich eine do...while(true) - Schleife sein, aber
    was schreibe ich in die rein?
    Die Msgs-Behandlungen oder sowas wie UpdateWindow()?



  • @ultraschatten: Wenn ich du wäre, würd ich mir zuerst ein paar Tutorials reinziehen, die tun gut :):

    http://www.germandevnet.de ist z.B. eins (unter Knowledgebase).

    cu



  • würd dir auch mal raten paar tut's über winapi durchzuackern...
    luckie hat btw. ne typische hauptschleife schon gepostet



  • Am besten Fuck durch Geil ersetzen. Dann ist Windows auch motivierter deinen Code auszuführen



  • *lol* 😃 😃

    cya



  • Joooooo,
    hab mal mit dem Tut von Magic Creator angefangen, also von dem link, und muss sagen das ist nicht schlecht 🙂 !
    Löst doch so einige offene Stellen in meinem Code... 😃
    thx auf alle Fälle!!!



  • Ja, mit dem Tutorial hab ich auch angefangen, ist recht gut zum Einsteigen. Jetzt hab ich aber den getreuen Petzold neben mir liegen :)!

    cu


Anmelden zum Antworten