Kleinstmögliches Win-Programm - und es funktioniert nicht ...



  • Nach dem Durcharbeiten des Anfangswissen in C/C++ hab' ich mich daran getraut ein kleines Windows-Fenster zu programmieren. Nur ein Problem: Es funktioniert nicht. Nach stundenlanger Fehlersuche bin ich zu dem Schluss gekommen mir anderweitig Hilfe zu besorgen.

    Der Code sieht folgendermaßen aus:

    /* Windows Minimal-Programm */
    
    #include <windows.h> /* Windows-Header inkludieren */
    
    LONG FAR PASCAL WnDProc_pd (HWND, UINT, UINT, LONG);
    int PASCAL WinMain (HANDLE hInstance_pd,
                        HANDLE hPrevInstance_pd,
                        LPSTR lpszCmdParam,
                        int nCmdShow)
     {
      MSG msg_pd;
      HWND hwnd_pd;
      WNDCLASS wndclass_pd;
    
      if(!hPrevInstance_pd)
      {
       wndclass_pd.style = CS_HREDRAW | CS_VREDRAW;
       wndclass_pd.lpfnWndProc = WndProc_pd;
       wndclass_pd.cbClsExtra = 0;
       wndclass_pd.cbWndExtra = 0;
       wndclass_pd.hInstance = hInstance_pd;
       wndclass_pd.hIcon = LoadIcon (NULL, IDI_APPLICATION);
       wndclass_pd.hCursor = LoadCursor (NULL, IDC_ARROW);
       wndclass_pd.hbrBackground = GetStockObject (LTGRAY_BRUSH);
       wndclass_pd.lpszMenuName = NULL;
       wndclass_pd.lpszClassName = "WndClassName_pd"; /* ... gibt der zu registrierenden
       Fensterklasse einen Namen. */
       RegisterClass (&wndclass_pd); /* ... registriert die gerade definierte Fensterklasse. */
      }
    
      hwnd_pd = CreateWindow ("WndClassName_pd",
                              "MiniWin_pd",
                             WS_OVERLAPPEDWINDOW,
                             CW_USEDEFAULT,
                             CW_USEDEFAULT,
                             CW_USEDEFAULT,
                             CW_USEDEFAULT,
                             NULL,
                             NULL,
                             hInstance_pd,
                             NULL);
      ShowWindow (hwnd_pd, nCmdShow);
      while (GetMessage (&msg_pd, NULL, 0, 0))
      {
       DispatchMessage (&msg_pd);
      }
      return msg_pd.wParam;
      }
      LONG FAR PASCAL WndProc_pd (HWND hwnd , UINT message,
      UINT wParam, LONG lParam)
      {
       switch (message)
       {
        case WM_DESTROY:
         PostQuitMessage (0);
         return 0;
        }
    }
    

    So, das wär mal der Code - ich hab ihn 3mal neu geschrieben, es funktioniert einfach nicht ... weiß wer wo der Fehler liegt?

    btw: Ist der Code veraltet? Das Tutorial mit dem ich arbeite ist zwar professionell aber nicht mehr auf dem allerneuesten Stand ...



  • du hast TranslateMessage vergessen



  • Gehört ins WinAPI Forum. Translate ist es nicht. das fehlt:

    LONG FAR PASCAL WndProc_pd (HWND hwnd , UINT message,
      UINT wParam, LONG lParam)
      {
       switch (message)
       {
        case WM_DESTROY:
         PostQuitMessage (0);
         return 0;
    /*WICHTIG:*/
        case default:
         return DefWindowsProc(hwnd, message, wParam, lParam);
    /*        */
        }
    }
    


  • Verschoben ins WinApi Forum.
    Wohin mit meiner Frage?


Anmelden zum Antworten