hwnd von WinMain einer anderen Funktion übergeben...



  • wie kann ich ein

    HWND        hwnd;
    

    welches ich in int

    WINAPI WinMain(...)
    

    zum erstellen des hauptfensters verwende
    einer funktion

    CreateProcessBar (hwnd);
    

    übergeben??? CreatProcessBar wird mit

    WM_CREAT
    

    aufgerufen....

    cu 👍



  • u wie übergebe ich das hwnd aus winmain an _beginthread (startRender, 0, NULL);
    ???

    cu 👍



  • Ich versteh dein Problem nicht 😕



  • Die Übergabe von Variablen ist ein C-Problem, nichts WinAPI-spezifisches.

    Mein Tipp: Lern erstmal richtig C/C++ (mit Konsolenprogrammierung). Dann hast du es später, bei der WinAPI, viel leichter.



  • Dieser Thread wurde von Moderator/in cd9000 aus dem Forum WinAPI in das Forum ANSI C verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • das problem ist ich hab im moment HWND hwnd; global gemacht u das das gefällt mir nicht so gut! könnte ja das hwnd mit pointern übergeben!!??

    cu



  • häh??
    sorry, aber ich versteh' irgendwie nicht so richtig, was du meinst... 😕

    wenn du jetzt zum beispiel die funktion "hallo" hast:

    void hallo(HWND hWnd)
    {MessageBox(hWnd, "Test", "Hallo!", MB_OK);}
    

    ist das übergeben der Variable hwnd doch gar kein problem 😕 :

    hallo(hwnd);
    


  • will in void Render (...) das hwnd verwenden....

    cu

    #include <windows.h>
    
    LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM);
    
    void Render(hwnd)
    {
      // will hier das HWND         hwnd;
      // aus nt WINAPI WinMain verwenden....
    
    }
    
    int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
                        PSTR szCmdLine, int iCmdShow)
    {
       static TCHAR szAppName[] = TEXT ("Klassenname");
       HWND         hwnd;
       MSG          msg;
       WNDCLASSEX   wndclassex = {0};
    
       // verkürzt....
       hwnd = CreateWindowEx (WS_EX_OVERLAPPEDWINDOW, // erweiterter Fensterstil
                      szAppName, // Name der Fensterklasse
                      TEXT ("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);
       }
       return msg.wParam;
    }
    
    // Die Hauptnachrichtenschleife
    LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
       HDC hdc;
       PAINTSTRUCT ps;
    
       switch (message)
       {
       case WM_CREATE:
          Render(hwnd);
          return (0);
    
       case WM_PAINT:
          hdc = BeginPaint (hwnd, &ps);
          TextOut (hdc, 0, 0, "Hallo, ich bin ein Fenster!", 27);
          EndPaint (hwnd, &ps);
          return (0);
    
       case WM_DESTROY:
          PostQuitMessage (0);
          return (0);
       }
    
       return DefWindowProc (hwnd, message, wParam, lParam);
    }
    


  • void Render(HWND hwnd) {
       /* ... */
    }
    


  • Achtung, ich bin selbst noch nub in diesem Thema, allerdings habe ich das folgendermaßen verstanden:

    Wenn ich meine Acht Buttons mit Bitmaps bestücken möchte, verwende ich den Fall WM_PAINT. Innerhalb dieses Falls beziehe ich mich auf meine zu Beginn des Programms festgelegte Funktion PaintButtons:

    int PaintButtons(HWND hButton)      // meine HWND innerhalb dieser Funktion heisst hButton. Die weiter unten in der WM_PAINT übergebenen Buttons h1Button etc. ersetzen beim Aufruf der Funktion nun alle hButton innerhalb der Funktion durch h1Button, h2Button etc.
    {
       static PAINTSTRUCT ps;
       static HDC hdc;
       RECT rect;
       int hoehe;
       int breite;
             hdc = BeginPaint(hButton, &ps);        // also hier: hButton wird h1Button für PaintButtons(h1Button)
             GetClientRect(hButton, &rect);         // ebenso hier
             hoehe = rect.bottom - rect.top;       
             breite = rect.right - rect.left; 
             HBITMAP h2Bitmap = (HBITMAP)LoadImage(NULL, "test2.bmp", IMAGE_BITMAP, 40, 40, LR_LOADFROMFILE);  // Achtung: die beiden Zahlenwerte müssen gleich gross sein, ansonsten kann man sie benutzen um Teile der Bitmap von unten oder von links abzuschneiden.
             BITMAP bmp;
             GetObject(h2Bitmap,sizeof(bmp),&bmp); 
             HDC hDC = GetDC(hButton);              // und hier
             HDC hBitmapDC = CreateCompatibleDC(hDC); 
             SelectObject(hBitmapDC,h2Bitmap); 
             StretchBlt(hdc,0,0, breite, hoehe,hBitmapDC,0,0,bmp.bmWidth,bmp.bmHeight,SRCCOPY); 
             DeleteObject(h2Bitmap); 
             ReleaseDC(hButton,hBitmapDC);         // hier
             ReleaseDC(hButton,hDC);               // und hier
        return 0;
    }
    
    [ ...... ]
    
          case WM_PAINT:
          {
             PaintButtons(h1Button);        // dieses h1Button wird übergeben an die Funktion PaintButtons, die oben steht. HWND hButton erhält innerhalb der Funktion die Bezeichnung h1Button
             PaintButtons(h2Button);
             PaintButtons(h3Button);
             PaintButtons(h4Button);
             PaintButtons(h5Button);
             PaintButtons(h6Button);
             PaintButtons(h7Button);
             PaintButtons(h8Button);
          }
    

    Ich hoffe, ich habe das einigermaßen richtig / verständlich erklärt - wie gesagt, ich bin Anfänger, kann sein dass ich Mist schwafele


  • Mod

    Bitte keine uralten Threads grundlos hervorkramen.


Anmelden zum Antworten