winapi addition



  • @Badestrand, manchmal kann man schon verzweifeln an den Fragestellern (und deren Fragen), aber ich glaube trotzdem nicht, daß der Threadersteller auch nur ein Wort verstanden hat.

    @ATt: Lass es erst einmal mit WinAPI, GUI und sonstigem Gedöns. Lern erstmal die Grundlagen mit Hilfe einer einfachen Konsolenanwendung... In ein paar Monaten kannst du dann nochmal Fragen zur WinAPI stellen (aber hoffentlich nicht dieselben) -)



  • hallo badestrand!

    Der Funktionsaufruf

    GetEditText(hDlg).c_str()
    

    tut mich nur ein wenig verwirren, da es immer nur den Titel des HWND's, also Fensters ausgibt.

    http://img85.imageshack.us/img85/3788/prbldd3.jpg

    Ich danke dir auf jeden Fall für deine Mühe, also für deinen ganzen Text 😉
    Ich hab alles andere außer das

    Also wandelt die "GetEditText"-Funktion ganz bestimmt nicht einfach eine Zahl in einen string um, sondern fragt von Windows passend zur übergebenen ID das Handle des Editfelds ab und holt sich mit dem Aufruf "GetWindowText" den Text von dem Editfeld.

    verstanden 😞

    Weil da
    GetWindowTextLength(hWnd) + 1 steht 😕

    mfg



  • ich bin mir nicht sicher, was ich nun machen soll.
    Ich verstehe zwar wo die Unterschiede zwischen String und Integer liegen, aber weiß leider nicht, wie ich das in mein Programm hineinintepretieren soll.

    Ich bitte dich/euch um Hilfe.

    mfg Adv. Tech. TOa



  • Vielleicht solltest du mal dein Ziel überlegen 😉

    Also, dein Ziel ist es ja gerade, den Text aus dem Editfeld auszulesen und in einer MessageBox (mit noch etwas Text davor) auszugeben.
    Spaßeshalber gehen wir einfach mal back-to-front (oder so :D) vor. Aaaaaaaaaaalso, wir fangen hinten an, mit der MessageBox.

    string msg, edittext;
    // Text aus dem Editfeld auslesen in edittext
    // msg soll aus "Irgendwas" plus dem edittext bestehen
    MessageBox( hDlg, msg.c_str(), "", MB_OK );
    

    ->

    string msg, edittext;
    // Text aus dem Editfeld auslesen in edittext
    
    // msg soll aus "Irgendwas" plus dem edittext bestehen
    msg = string("Irgendwas") + edittext;
    MessageBox( hDlg, msg.c_str(), "", MB_OK );
    

    ->

    string msg, edittext;
    // Text aus dem Editfeld auslesen in edittext
    edittext = LoadMyEditFieldContent( hDlg, IDC_EDIT1 );
    // msg soll aus "Irgendwas" plus dem edittext bestehen
    msg = string("Irgendwas") + edittext;
    MessageBox( hDlg, msg.c_str(), "", MB_OK );
    

    Die "LoadMyEditFieldContent"-Funktion kannst du dir selber schreiben. Auf Grundlage der Funktion "GetEditText( HWND hWnd )" von vorhin und der Funktion "GetDlgItem", die du bei der MSDN nachschlagen kannst 🙂

    MSDN: http://msdn2.microsoft.com/en-us/library/default.aspx



  • Oh... danke Badestrand, dass du mir noch immer helfen möchtest 😉

    Zum Thema:

    std::string GetEditText( HWND hWnd ) 
    { 
    	GetDlgItem(hWnd, IDC_EDIT1);
        int len = GetWindowTextLength(hWnd) + 1; // +1 wegen der abschließenden '\0' 
        char* raw = new char [len]; 
        GetWindowText(hWnd, raw, len); 
    	std::string ret = raw; 
        delete[] raw; 
        return ret; 
    }
    
    if(LOWORD(wParam) == IDSUM)
    		{
    			std::string msg, textIn;
    			textIn = GetEditText(hDlg);
    			msg = std::string("TEST") + textIn;
    			MessageBox(hDlg,  msg.c_str(), "..", NULL); 
    
    		}
    

    so, nun gibt es aber das Problem, dass da nun "TEST" und der Titel vom Fenster angezeigt wird.

    Irgendetwas hab ich noch falsch gemacht und ich bin mir nicht sicher,dass es das ist,weil ich ja eine Art verlinkung zum eingegebenen Text machen soll und nicht zum Fenster(vllt deswegen die ausgabe vom titel)

    oder die funktion stimmt nicht, evtl. die parameteranzahl bei der def. der funktion 🙂

    mfg



  • Ich geb dir nen Tipp: Die Funktion "GetEditText" bekommt ja ein Fensterhandle und gibt dir den Text von eben diesem Fenster zurück. Du übergibst ihr ja das Fensterhandle zu deinem Hauptfenster (hDlg), also bekommst du den Text vom Hauptfenster. Da du ja den Text vom Editfeld willst, musst du der Funktion das Fensterhandle vom Editfeld übergeben. Und da kommt nunmal die Funktion GetDlgItem ins Spiel 🙂

    ATt schrieb:

    Oh... danke Badestrand, dass du mir noch immer helfen möchtest 😉

    Du zeigst ja auch, dass du es wenigstens versuchst.. 🙂



  • hi

    kannst du mir bitte die funktion aufschreiben, ich will mal noch ein bisschn versuchen, bevor ich schlafen gehe und morgen werd ich mir die Lösung anschauen?;)

    ich bin jetzt zwar sehr müde, versuch es trodzdem noch ein bisschen.

    mfg



  • Sorry, hab deinen Beitrag nicht mehr gesehen 😕

    Und welche Funktion meinst du? Die GetDlgItem? Die steht doch in der MSDN, hier die Signatur:

    // The GetDlgItem function retrieves a handle to a control in the specified dialog box.
    HWND GetDlgItem( HWND hDlg, int nIDDlgItem );
    


  • std::string GetEditText( HWND hWnd ) 
    { 
        int len = GetWindowTextLength(hWnd) + 1; // +1 wegen der abschließenden '\0' 
        char* raw = new char [len]; 
        GetWindowText(hWnd, raw, len); 
        std::string ret = raw; 
        delete[] raw; 
        return ret; 
    }
    
    // ...
    if(...)
    {
        std::string text = GetEditText(GetDlgItem(hDlg, IDC_EDIT1));
        MessageBox(NULL, text.c_str(), "..", NULL); 
    }
    

    Hm?



  • Badestrand schrieb:

    Sorry, hab deinen Beitrag nicht mehr gesehen 😕

    Und welche Funktion meinst du? Die GetDlgItem? Die steht doch in der MSDN, hier die Signatur:

    // The GetDlgItem function retrieves a handle to a control in the specified dialog box.
    HWND GetDlgItem( HWND hDlg, int nIDDlgItem );
    

    Ja, ich hab es leider wieder falsch gemacht und dann bei hustbaer abgeschaut und da bin ich draufgekommen,dass eine funktion in einer anderen aufgerufen wird .. sorry,dass ich daran nicht gedacht habe.

    DANKE an Badestrand und hustbaer für ihre nette Hilfe!

    Nun weiß ich wie man Strings,etc.. ausgibt.

    Danke!

    mfg
    Adv. Tech. TOa


Anmelden zum Antworten