Problem Text in Dialog auszugeben



  • Ja wie heißt den der Zeiger bei dir? 🙄

    ABeginner schrieb:

    ich hab auch keinen hwnd, sondern einen cwnd!? 😕 😕 😕

    Der den du da meinst.



  • so, jetzt mal in ruhe von vorne 🙂
    hiermit wird der dialog aufgerufen, in dem ich die comboboxen habe. die gewählten daten der boxen werden dann in variablen gespeichert usw.

    void CPicToLightApp::OnAppSettings()
    {
    	CSettingsDlg settingsDlg;
    	settingsDlg.DoModal();
    	m_baud= settingsDlg.m_baudr;
    
        CString cbaud;
        cbaud= "test";
    	SetDlgItemText(IDC_BAUDRATE, cbaud);
    }
    

    der dialog, in dem ich die daten in den ariablen wieder anzeigen will ist in der klasse PicToLightView

    habe nun mal folgends probiert, habe einfach einen button genommen und wenn man auf den klickt, werden die daten in dem dialog angezeigt. die funktion dazu sieht so aus, das funzt auch:

    void CPicToLightView::OnNeu() 
    {
        SetDlgItemText(IDC_HARDWARETYPE,"2");
    	SetDlgItemText(IDC_BAUDRATE,"test");
    	SetDlgItemText(IDC_MESSAGETYPE,"Standard");
    
    	UpdateData(FALSE);
    
    }
    

    nur ich weiß irgendwie nicht, wie ich das mit demdialog anstellen soll, also mit dem zeiger...da stehe ich voll auf der leitung


  • Administrator

    Also sag mal, wenn du so programmierst, ohne dir dabei was zu überlegen, dann würde ich dir vorschlagen es zu lassen, denn das endet in der Katastrophe! Und es hat auch keinen Sinn, sry ^^

    Oder dann schlage ich vor, dass du dir dringend ein paar Tutorials holst und andere Lernbücher, um mindestens mal eine Grundahnung zu bekommen was verschiedene Zeiger und co sind. Und damit du dann auch lernst, was ein nicht deklarierter Bezeichner ist, bzw. da müsstest du wohl fast besser einen Duden kaufen 😉

    Grüssli



  • Okay, ich versuchs mal nicht so niederschmetternd:
    Was machen diese Zeilen?

    CSettingsDlg settingsDlg;
        settingsDlg.DoModal();
        m_baud= settingsDlg.m_baudr;
    
        CString cbaud;
        cbaud= "test";
        SetDlgItemText(IDC_BAUDRATE, cbaud);
    

    Schreib bitte mal hinter jede Zeile, was das deiner Meinung nach tut. 🙂



  • CSettingsDlg settingsDlg;
        settingsDlg.DoModal(); //öffnet den Dialog IDD_Settings als modalen Dialog
        m_baud= settingsDlg.m_baudr; //m_baudr ist eine variable in dem Settings                   
                                     //dialog, diese daten weden in die variable 
                                     //m_baud übernommen
    
        CString cbaud;               //"Stringvariable" deklarieren
        cbaud= "test";               // Inhalt zuweisen
        SetDlgItemText(IDC_BAUDRATE, cbaud); //Inhalt von cbaud an das Textfeld in dem 
                                             //Dialog IDD_INPUT_FORM ausgeben, welches  
                                             //das Hauptfenster ausfüllt, allerdings   
                                             //steckt dieser dialog ja in der klasse
                                             //CPicToLightView
    

    na so einigermaßen zumindest



  • Okay, das sieht gut aus. 🙂
    Noch kurze Frage: Willst du mit dem SetDlgItemText auf etwas im settingsDlg zugreifen?

    Wenn ja, überlegt mal, was "öffnet [...] als modalen Dialog" genau bedeutet.



  • nein, darauf möchte ich nicht zugreifen.

    wenn ich das programm starte, öffnet sich ein fenster mit menüleise usw. dieses wird von dem dialog INPUT_FORM ausgefüllt. über das menü öffne ich dann den SETTINGS Dialog, stelle in diesem etwas an den comboboxen ein. diese daen, werden in variablen gespeichert, wenn ich diesen dialog schließe. mit

    m_baud= settingsDlg.m_baudr;
    

    lese ich ja die daten aus (hier als beispiel an einer variablen) und schreibe das in die variable m_baud. abhängig davon, was in der variablen drin steht, will ich dann in dem hauptfensterdialog einen text ausgeben.

    CString cbaud;               
    cbaud= "test";
    SetDlgItemText(IDC_BAUDRATE, cbaud);
    

    nur ich kann auf den dialog, der das hauptfenster ausfüllt nicht zugreifen, da hakt es ja......
    hoffe man kann das so einigermaßen verstehen



  • Ach, du meinst den Formview? 😮
    http://www.c-plusplus.net/forum/viewtopic-var-t-is-125623.html
    Abschnitt 5 🙂



  • im prinzip so, ich hab auch die

    # C...App
    # CMainFrame
    # C...Doc
    # C...View

    und der hauptfensterdialog stekct nunmal in der C(PicToLight)View



  • ekomme auch immer die fehlermeldung getActivevie keine element von cwnd ist

    und

    error C2664: 'SetDlgItemTextA': Konvertierung des Parameters 1 von 'CPicToLightView *' in 'HWND' nicht möglich



  • Sama was ist das hier für nen Zusammen geschußter =!

    CString strBaud;
    strBaud = "Test";
    SetDlgItemText(IDC_BAUDRATE, strBaud);
    

    Das gehört in diesem Fall in die OnInitDialog des Dialoges in dem sich das Ctrl befindet.!

    Es kommt auch immer die Fehlermeldung GetActiveView: Keine element von CWnd

    Das liegt daran das GetActiveView auch wenig mit einem CWnd zu tun hat. ... Hast du evt. Versucht mit AfxGetMainWnd()->GetActiveView an einen Pointer auf dein View zu kommen?! Das ist ja auch nicht so falsch... muss aber korrekt heißen:

    ((CMainFrame*)AfxGetMainWnd())->GetAcviteView()->...
    

    [edit]
    Jo noch was vergessen:

    error C2664: 'SetDlgItemTextA': Konvertierung des Parameters 1 von 'CPicToLightView *' in 'HWND' nicht möglich

    Also. Jetzt weiß ich glaube ich was du willst... willst du von außerhalb einen Pointer von der View Klasse bekommen und da dann acces auf ein Item ?!

    CPicToLightView* pView = (CPicToLightView*)(((CMainFrame*)AfxGetMainWnd())->GetActiveView());
    pView->SetDlgItemText(IDC_..., ...);
    


  • die fehlermeldung kommt trotzdem noch 😞



  • Benutze doch die Funtion GetSafeHwnd() an der Stelle wo der HWND gefordert wird.



  • uih, vielen dank, das ist es jetzt funktioniert es voelen dank, das war genau das ding!!! 🙂 🙂 🙂 🙂

    danke, aber jetzt erst einmal ranmachen, schauen was da passiert



  • Welche Version hast de denn nu genommen 😉

    Aja... mit GetSafeHwnd einen handle zu bekommen.. jo das geht natürlich... meiner Meinung nach aber nicht sooo eine schöne Lösung 😉



  • habe das genommen

    CPicToLightView* pView = (CPicToLightView*)(((CMainFrame*)AfxGetMainWnd())->GetActiveView());
    pView->SetDlgItemText(IDC_..., ...);



  • (D)Evil schrieb:

    Aja... mit GetSafeHwnd einen handle zu bekommen.. jo das geht natürlich... meiner Meinung nach aber nicht sooo eine schöne Lösung 😉

    Da muss ich Dir unbedingt zustimmen, aber hier ist ja eh schon..hm gabs da nicht mal so einen Spruch um verloren Bierzutaten 😉
    @ABeginner: Sollte man wirklich nicht so machen aber Dir ist doch sicher erstmal wichtiger, dass überhaupt was funktioniert o.?

    Edit: sorry wegen obigem post 🙄



  • stimmt, ich habe mit programmierennix am hut, aber das gehört zu einem projekt und anstatt, dass das jemand mcht, der das gelernt hat, sollenwir das machen



  • 😃 😃 😃


  • Administrator

    ABeginner schrieb:

    stimmt, ich habe mit programmierennix am hut, aber das gehört zu einem projekt und anstatt, dass das jemand mcht, der das gelernt hat, sollenwir das machen

    Sagt das beim nächsten Mal gleich, dann reg ich mich selber nicht so auf. 😃
    Zudem hätte man dann gleich nicht probiert Teillösungen zu posten, damit du selber auf den Lösungsweg kommst, sondern dir das fertige Produkt vor die Nase geschmissen (naja solange es nicht zuviel Arbeit ist) ^^

    Grüssli


Anmelden zum Antworten