Dialog...



  • Hallo, ich möchte Eine Funktion erstellen, die folngendermaßen aussieht:

    void input_dialog(string& a, string b)
    {
      // ... DIalogbox soll erzeugt werden und a udn b zurückgeben, also zwei einzugebene Strings
    }
    

    Wie kann ich das realisieren, bzw wie kann ich mithilfe der DLG Proc werte zurückgeben? ich möchte keine globalen Variablen nutzen!

    mfg



  • void input_dialog(string& a, string& b)
    {
    // ... Dialogbox soll erzeugt werden und a und b zurückgeben, also zwei einzugebene Strings
    }



  • Verwende DialogBoxParam und gib im letzten Parameter einen Zeiger auf eine, von Dir definierte Struktur an. Dann ließt Du die Strings im Dialog ein und speicherst die Strings anschließend in den übergebenen Referenzparametern 😉 .

    Also -prinzipiell- so:

    struct SDlgData
    {
       std::string* a;
       std::string* b;
    };
    
    INT_PTR CALLBACK DlgProc(..., LPARAM lParam)
    {
       static SDlgData* pData; // statisch, damit unter WM_COMMAND noch gültig
    
    // ...
    
      case WM_INITDIALOG:
         pData = reinterpret_cast<SDlgData*>(lParam); // Strukturzeiger nitialisieren
    
    // ...
    
      case WM_COMMAND:
         // ...
         *pData->a = ...; // Strings auslesen und in übergebenen
         *pData->b = ...; // Referenzvariablen (a und b) speichern
         // ...
    
    // ...
    }
    
    void input_dialog(string& a, string& b)
    {
       // ...
    
       SDlgData dgdInfo; // Daten für die DlgProc
       dgdInfo.a = &a;
       dgdInfo.b = &b;
       // Funktion kehrt erst zurück, wenn Dialog vom Benutzer geschlossen wurde:
       DialogBoxParam(..., DlgProc, reinterpret_cast<LPARAM>(&dgdInfo));
    
       // ...
    }
    


  • Vielen Dank!!!


Log in to reply