Weiß nicht mehr weiter - DialogBox



  • Folgendes:

    Das ist bisher der Code:

    #include <windows.h> 
    LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM); 
    INT_PTR CALLBACK DialogProc(HWND,UINT,WPARAM,LPARAM);
    
    int WINAPI WinMain (HINSTANCE hI, HINSTANCE hPrI, PSTR szCmdLine, int iCmdShow) 
    { 
     char szName[] = "Fensterklasse"; 
     HBRUSH hintergrund = CreateSolidBrush( RGB( 255, 255, 255 ) ); 
     WNDCLASS wc; 
    
     wc.style         = CS_HREDRAW | CS_VREDRAW; 
     wc.lpfnWndProc   = WndProc; 
     wc.cbClsExtra    = 0; 
     wc.cbWndExtra    = 0; 
     wc.hInstance     = hI; 
     wc.hIcon         = LoadIcon (NULL, IDI_WINLOGO); 
     wc.hCursor       = 0; 
     wc.hbrBackground = hintergrund; 
     wc.lpszMenuName  = NULL; 
     wc.lpszClassName = szName; 
    
     RegisterClass (&wc); 
    
     int window_x,window_y,window_w=1024,window_h=768, aufl_x=1024, aufl_y=768;
     window_x=(aufl_x/2)-(window_w/2);
     window_y=(aufl_y/2)-(window_h/2);
    
     HWND hwnd = CreateWindow (szName, "RomMatch", WS_OVERLAPPEDWINDOW, 
                                window_x, window_y, window_w, window_h, NULL, NULL, hI, NULL); 
     ShowWindow   (hwnd, iCmdShow); 
     UpdateWindow (hwnd); 
    
     HWND hwnd_dlg=DialogBox(      
        hI,
        "Muhaha",
        hwnd,
        ??);
    //----------------------------------------------------------------------------------- 
    
      MSG msg; 
    
      while (GetMessage (&msg, NULL, 0, 0)) 
      { 
        TranslateMessage (&msg); 
        DispatchMessage  (&msg); 
      } 
      return msg.wParam; 
    } 
    
    //----------------------------------------------------------------------------------- 
    
    INT_PTR CALLBACK DialogProc(HWND hwnd_dlg,UINT uMsg,WPARAM wParam,LPARAM lParam)
    {
    
    }
    
    LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) 
    { 
     HDC hdc; 
     PAINTSTRUCT ps; 
     HWND hwndButton; 
    
     switch (message) 
     { 
    
      /*case WM_PAINT: 
        hdc = BeginPaint (hwnd, &ps); 
          SetTextColor(hdc, RGB(255,0,0) ); 
          SetBkColor(hdc, RGB(255,255,0) ); 
          TextOut (hdc, 20, 20, "Ich bin ein Fenster.", 20); 
          EndPaint (hwnd, &ps); 
      return 0; 
    */
    case WM_CREATE : 
    
      hwndButton = CreateWindow ( 
      "button", "File", 
      WS_CHILD | WS_VISIBLE | BS_FLAT, 
      0, 0, 100, 20, 
      hwnd, (HMENU)1,((LPCREATESTRUCT) lParam)->hInstance, NULL); 
    
      return 0 ; 
    
      case WM_COMMAND:
        switch (LOWORD(wParam)) 
            { 
                 case 1:
                      MessageBox(hwnd,"Click auf Knopf 1", "Die Nachricht WM_COMMAND wurde erzeugt", MB_OK);
                 break;
            } 
            return 0L; 
      return 0;
    
      case WM_DESTROY: 
        PostQuitMessage (0); 
      return 0; 
     } 
    
     return DefWindowProc (hwnd, message, wParam, lParam); 
    }
    

    Da wo die Fragezeichen sind:

    HWND hwnd_dlg=DialogBox(      
        hI,
        "Muhaha",
        hwnd,
        ??);
    

    , weiß ich einfach nicht weiter, hab zwar bei msdn gelesen, aber weiß nicht was damit gemeint ist. Danke für die Hilfe!



  • ?? == MB_OK oder eine der anderen MB_* Konstanten.



  • Es geht darum, das cih Menue erzeugen will,z.B. ein ganz einfaches Datei-> Beenden menue. Ich nutze kein VC++ deswegen will ich auch keine rc dateien benutzen.



  • .. schrieb:

    ?? == MB_OK oder eine der anderen MB_* Konstanten.

    muuaahhhhaaa 😃 woll eher nicht

    @regaa

    HWND hwnd_dlg=DialogBox(      
        hI,
        "Muhaha",
        hwnd,
        (DLGPROC)DialogProc);
    

    so muss es aussehen.

    schau dir das noch mit dazu an
    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/windowing/dialogboxes/usingdialogboxes.asp
    bei dem beispielen findest genügend infos



  • Leider kommt bei mir diese Fehlermeldung 😞

    invalid conversion from `int' to `HWND__*'

    Aber auf jeden FAll FETTEN DANK an dich.



  • ups bösser fehler von mir 😃

    DialogBox(      
        hI,
        "Muhaha",
        hwnd,
        (DLGPROC)DialogProc);
    

    dialogbox gibt keinen fensterhandle zurück

    CreateDialogBox gibt einen zurück
    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/WinUI/WindowsUserInterface/Windowing/DialogBoxes/DialogBoxReference/DialogBoxFunctions/CreateDialog.asp



  • Vielen Dank.



  • lol, hatte MessageBox gelesen 🤡



  • Ok, jetzt schätz ich mal ist alles erzeugt, damit ich anfangen kann dieses auch graphisch darzustellen. Das muss soviel ich weiß hier rein:

    INT_PTR CALLBACK DialogProc(HWND hwnd_dlg,UINT uMsg,WPARAM wParam,LPARAM lParam)
    {

    }

    Aber was genau muss denn darein? Also inem Block weiter unten und dem was ich in msdn gelesen und verstanden hab, beruht halt diese WinAPI auf das Windows Message System usw. Also müsste ich damit alöle Nachrichten abfangen können.

    INT_PTR CALLBACK DialogProc(HWND hwnd_dlg,UINT uMsg,WPARAM wParam,LPARAM lParam)
    {
    switch (uMsg)
    {
    }
    }

    Das hab ich versucht, leider geht das irgendwie nicht:

    NT_PTR CALLBACK DialogProc(HWND hwnd_dlg,UINT uMsg,WPARAM wParam,LPARAM lParam)
    {
    switch (uMsg)
    {
    
      case WM_CREATE:
          MessageBox(hwnd_dlg,"DialogBox wurde erzeugt", "Die Nachricht WM_COMMAND wurde erzeugt", MB_OK);
      break;
    
      case WM_COMMAND: 
        switch (LOWORD(wParam)) 
        { 
    
        } 
      break;
    }
    }
    


  • mit den nachrichten das stimmt, allerdings ist beim dialog WM_INITDIALOG und bei einem fenser WM_CREATE



  • Vielen Dank, jetzt bin ich schon viel schlauer geworden, aber verzeiht mir die Frage, was soll denn

    The CreateDialog function uses the CreateWindowEx function to create the dialog box. CreateDialog then sends a WM_INITDIALOG message (and a WM_SETFONT message if the template specifies the DS_SETFONT or DS_SHELLFONT style) to the dialog box procedure. The function displays the dialog box if the template specifies the WS_VISIBLE style. Finally, CreateDialog returns the window handle to the dialog box.

    in dem Satz

    The function displays the dialog box if the template specifies the WS_VISIBLE style

    heißen, also von welchem Template ist hier die Rede?? Sry das ich so dumm Frage, aber ich bin absoluter neuling c++ . 🙂



  • der zweite parameter ist dein template.

    wo hast du den "Muhaha" definiert ?!?



  • Ok, hab das Zauberwort gefunden. CreateMenu()
    mfg regaa



  • regaa schrieb:

    Ok, hab das Zauberwort gefunden. CreateMenu()
    mfg regaa

    was hat das jetzt mit deinem dialog zu tun 😕



  • regaa schrieb:

    Es geht darum, das ich Menue erzeugen will,z.B. ein ganz einfaches Datei-> Beenden menue. Ich nutze kein VC++ deswegen will ich auch keine rc dateien benutzen.



  • Ich nutze kein VC++ deswegen will ich auch keine rc dateien benutzen.

    Hä? Das ist ja ein tolles Argument. Ich benutze auch nicht immer den VC, aber benutze stets Resourcen-Dateien.



  • Schau Dir doch lieber erstmal auf WinAPI.net diesen Codeschnipsel an.

    Da siehst Du, wie man eine Anwendung baut, die nur aus einem modalen Dialog besteht...


Anmelden zum Antworten