eVC++ Waarde uit dialoog venster doorgeven aan hoofdapp

Pagina: 1
Acties:

  • urk_forever
  • Registratie: Juni 2001
  • Laatst online: 16:19
Hallo allemaal, ik ben een applicatie aan het maken in eMbedded Visual C++ en maak deze voor PPC2003. Nu heb ik een hoofdvenster gemaakt waarin ik bepaalde dingen doe. Maar ik wil de gebruiker de mogelijkheid geven om iets in te voeren waar ik dan mee ga zoeken in de hoofdapplicatie. Dus ik heb een dialoog venster gemaakt met een editbox en een Ok en een Cancel knop.

Zo gauw ik op de Ok knop in het dialoog venster roep ik een functie aan in de hoofdapplicatie die de zoekterm in een variabele zet. Alleen gaat dit niet goed. Als ik ga debuggen dan zie ik dat de functie goed aangeroepen wordt en dat de variabele ook wordt doorgegeven. Alleen als ik terug kom in de hoofdapp dan is de variabele weer leeg :? Hoe kan dit en waarom gebeurt dit en hoe kan ik het oplossen?

Wat code.

1. De OnOk van het dialoogvenster waar de waarde wordt ingevoerd:
C++:
1
2
3
4
5
6
7
8
void CSearchDialog::OnOK() 
{
    // TODO: Add extra validation here
    UpdateData(TRUE);
    CRFIDDemoDlg bla;
    bla.SetSearchTerm(m_strSearchTerm);
    CDialog::OnOK();
}


2. De functie die de variabele goed zet.
C++:
1
2
3
4
void CRFIDDemoDlg::SetSearchTerm(CString _strSearchTerm)
{
    strSearchTerm = _strSearchTerm;
}


3. De functie die het dialoog venster opent
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
void CRFIDDemoDlg::OnSBank1() 
{
    // TODO: Add your control notification handler code here
    CSearchDialog dlg;
    int nResponse = dlg.DoModal();
    if (nResponse == IDOK) {
        MessageBox(strSearchTerm, TEXT("Info"), MB_OK);
        m_strBank1 = strSearchTerm;
        UpdateData(FALSE);
    } else if (nResponse == IDCANCEL) {
        MessageBox(TEXT("Cancel clicked"), TEXT("Info"), MB_OK);
    }
}


4. De variabele die ik probeer te vullen
C++:
1
2
public:
    CString strSearchTerm;

Hail to the king baby!


  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 09-04 22:08
strSearchTerm zit niet in je "hoofdapplicatie" maar in CRFIDDemoDlg? Vind je het gek dat je dan geen wijziging ziet in je hoofdapplicatie.

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


  • urk_forever
  • Registratie: Juni 2001
  • Laatst online: 16:19
CRFIDDemoDlg is het dialoog venster van mijn hoofdapplicatie. Dus hij zit wel in mijn hoofdapplicatie.

Hail to the king baby!


  • MBV
  • Registratie: Februari 2002
  • Laatst online: 22:37

MBV

urk_forever schreef op dinsdag 02 augustus 2005 @ 16:00:
[...]
1. De OnOk van het dialoogvenster waar de waarde wordt ingevoerd:
C++:
1
2
3
4
5
6
7
8
void CSearchDialog::OnOK() 
{
  [...]
    CRFIDDemoDlg bla;
    bla.SetSearchTerm(m_strSearchTerm);
    CDialog::OnOK();
}
[...]
je maakt een NIEUW object DemoDialog aan, en die noem je 'bla'. In 'bla' stel je een waarde in. Waar o waar zie ik dat jij de waarde in je hoofddialoog invult?

[edit]
foei, ga terug naar school :P Jij en ik zijn allebei objecten van het type GotUser. Toen ik op dit forum kwam heeft iemand de volgende code uitgevoerd:
code:
1
2
GotUser mbv; 
mbv.setRealName("Goh leuk, een google resultaat");

Toen jij kwam, heeft iemand hetzelfde soort code uitgevoerd:
code:
1
2
GotUser urk_forever; 
urk_forever.setRealName("WeetIkVeel");

Dat bij jouw een setRealName operatie wordt uitgevoerd, heeft niks met mij te maken.

Terug naar jouw applicatie. Jij hebt nadat jouw code is uitgevoerd twee objecten van het type CRFIDDemoDlg (hoe kom je bij die naam, gebruik eens QT ipv MFC ofzo): main_dialog of iets in die geest, wat werd aangemaakt in de winmain routine, en bla. Die twee hebben niets met elkaar te maken. Als je de goede functie uitvoert op bla zal je zien dat een nieuw maindialog verschijnt.

[ Voor 52% gewijzigd door MBV op 04-06-2015 22:30 ]


  • urk_forever
  • Registratie: Juni 2001
  • Laatst online: 16:19
Aah, ik snap het, ik maak een nieuw CRFIDDemoDlg object aan wat dus niks te maken heeft met het al bestaande object.
Maar hoe roep ik dan die functie aan in de al bestaande object?

Hail to the king baby!


  • MBV
  • Registratie: Februari 2002
  • Laatst online: 22:37

MBV

heb je niet iets van een tree, zodat je vanaf this terug kan gaan naar de hoofdapplicatie? this->parent ofzo.

néé, ik ga níét uitleggen waar this vandaan komt :P ga dan maar een C++ cursus doen

  • urk_forever
  • Registratie: Juni 2001
  • Laatst online: 16:19
Ik heb het al anders opgelost. In het dialoog venster waar ik de zoek term in kan vullen heb ik de volgende functie gemaakt:

C++:
1
2
3
4
CString CSearchDialog::GetSearchTerm()
{
    return m_strSearchTerm;
}


En de aanroep naar het dialoog venster in de hoofdapplicatie heb ik als volgt gemaakt:
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
void CRFIDDemoDlg::OnSBank1() 
{
    // TODO: Add your control notification handler code here
    CSearchDialog dlg;
    int nResponse = dlg.DoModal();
    if (nResponse == IDOK) {
        MessageBox(strSearchTerm, TEXT("Info"), MB_OK);
        m_strBank1 = dlg.GetSearchTerm();
        UpdateData(FALSE);
    } else if (nResponse == IDCANCEL) {
        MessageBox(TEXT("Cancel clicked"), TEXT("Info"), MB_OK);
    }
}


Maar het wordt idd wel tijd voor een C++ cursus. ;)

Hail to the king baby!

Pagina: 1