Ein Kombinationsfeld mit Werten füllen!
-
Zu 1.)
Ich glaube ich weiß worauf du hinaus möchtest hab auch schon nIndex als Variable
eingespart. Leider kenne ich für den String "strHelp" keine Möglichkeit, um diesen direkt in die Schleife einbauen zu können.
Den Pointer "pPointer" brauche ich um auf die Elemente in meinem Array zugreifen zu können.void CMainDialog::OnAdd() { // Variablen Deklarationen CAddDialog AddDlg(pDoc); CString strHelp; CClearance* pPointer = NULL; // Dialog aufrufen AddDlg.DoModal(); for (int i=0; i <= pDoc->m_oaClearance.GetUpperBound(); i++) { pPointer = (CClearance*)pDoc->m_oaClearance.GetAt(i); strHelp.Format("%d",pPointer->m_nClearance); if ( AddDlg.m_strClearanceCombo == FormatstrHelp) pDoc->m_pWorkPosition = pPointer; } // Bringt das Steuerfenster wieder in den Vordergrund pDoc->m_pMainDialog->BringWindowToTop(); }Zu 2.)
Da bin ich mir leider nicht sicher wieso.

Für gewöhlich kann man ja Konstruktoren beliebig überladen, also müßte das Ergebnis doch das gleiche sein.Zu 3.)
Ich hab beide Varianten ausprobier, sie funktionieren beide. Hier reichten leide mein Wissen und meine Erfahrung nicht mehr aus.

Wäre aber schön, wenn du mir trotzdem hier etwas beibringen könntest.
Mein Wissenshunger ist hier recht groß
, nur die Zeit ist knapp.Gruß
Umleag
-
zu 1: Ahh, die Schleife hattest du vorhin weggelassen, ich hab nix gesagt...

zu 2: So zwingst du den Benutzer (deines Codes), einen Zeiger auf das doc mitzugeben.
Ohne könnte dein Dialog nicht richtig arbeiten, also sollte man verhindern, dass das Doc nicht mitgegeben wird.zu 3: Eigentlich hätte der Compiler meckern müssen, dass Parameter mit Defaultwert immer die letzten sein müssen.
Oder hast du dem Doc auch NULL als Defaultwert gegeben? (Dann mach das bitte weg, siehe 2).
-
Das mit dem Konstruktor(zu 2.))leuchtet mir ein, ist klar
.Das mit pDoc hinter dem Parent ist jetzt auch klar, da hab ich dich falsch verstanden:
BAD:

CAddDialog::CAddDialog(CImpulseVoltageDoc* pDoc, CWnd* pParent /*=NULL*/) : CDialog(CAddDialog::IDD, pParent,m_pDoc(pDoc)) { //{{AFX_DATA_INIT(CAddDialog) m_strClearanceCombo = _T(""); //}}AFX_DATA_INIT }GOOD:

CAddDialog::CAddDialog(CImpulseVoltageDoc* pDoc, CWnd* pParent /*=NULL*/) : CDialog(CAddDialog::IDD, pParent),m_pDoc(pDoc) { //{{AFX_DATA_INIT(CAddDialog) m_strClearanceCombo = _T(""); //}}AFX_DATA_INIT }Gruß
Umleag
-
Wenn ich zu beginn meiner Anwendung auch gleichzeitig zwei Dialogfelder darstellen möchte, wo ist da der beste Platz um es zu initalisieren?
Ich initalisiere diesen in der Funktion OnNewDocument meiner SDI-Dokumentenklasse. Ist das so sinnvoll? Gibt es da besser Möglichkeiten?
An dieser Stell ist noch zu erwähnen das es mir sehr wichtg wäre, dass der Dialog "m_pNewDialog" im Vodergrund steht!Hier der Code von OnNewDocument():
BOOL CImpulseVoltageDoc::OnNewDocument() { if (!CDocument::OnNewDocument()) { m_pNewDialog->ShowWindow(SW_SHOW); m_pNewDialog->BringWindowToTop(); return FALSE; } else { // Startdialog erzeugen if (m_pNewDialog == NULL) { m_pNewDialog = new CNewDialog(this); m_pNewDialog->Create(IDD_NEWDIALOG, NULL); } // Steuerfenster erzeugen if (m_pMainDialog == NULL) { m_pMainDialog = new CMainDialog(this); m_pMainDialog->m_bBreakdown = FALSE; m_pMainDialog->m_fVoltage = 0; m_pMainDialog->Create(); } m_pNewDialog->ShowWindow(SW_SHOW); m_pNewDialog->BringWindowToTop(); return TRUE; } }Gruß
Umleag
-
Ich meinte eher so:
BAD:
CAddDialog::CAddDialog(CWnd* pParent /*=NULL*/, CImpulseVoltageDoc* pDoc) : CDialog(CAddDialog::IDD, pParent) , m_pDoc(pDoc) { //{{AFX_DATA_INIT(CAddDialog) m_strClearanceCombo = _T(""); //}}AFX_DATA_INIT }Na egal.

Zwei Dialogfelder? Das wird evtl. schwieriger.
Sollen die gleichzeitig aktiv sein? Also nicht modal?
Oder sollen nur beide aufgehen und eines über dem anderen liegen?

-
Beide Dialoge sind nicht modal, wobei der "NewDialg" im Vordergrund stehen sollte
und das Hauptrahmenfenster meiner Anwendung hinterdiesem. Derzeit ist dies genau anderts herum
.
Er soll aufgehen und über den anderen liegen!
-
Ich muß jetzt leider Arbeiten gehen, ich hoffe ich darf dich morgen mit weiteren Fragen bombardieren.
Auf alle Fälle möchte ich mich hier schon einmal für deine bisherige Hilfe bedanken.
Ohne die wäre ich wohl weiter in der Finsternis der Unwissenheit geblieben.Gruß
Umleag

DANKE
-
Hallo,
ich hab hier noch so ein Problem mit Kombinationsfeldern. Ich habe nun ein zweites Kombinationsfeld in den Dialog eingebaut, das soll mit Werten gefüllt werden sobald man eine Vorauswahl im ersten Kombinationsfeld vorgenommen hat.
Hierzu habe ich mit dem Klassen-Asistenten die Funktion OnSelchangeDeleteImpulseCombo eingebunden. Leider spricht meine IF-Anweisung nicht an, da offenbar keine aktullen Daten aus dem ersten Kombinationsfeld vorliegen.
Wie kann ich die Funktion dazu bringen sich den ausgewählten Wert zu holen?Hier mein C++ Code:
// Füllt das zeite Combo-Element BOOL CDeleteImpulseDialog::OnSelchangeDeleteImpulseCombo() { // Variablen Deklarationen CClearance* pPointer = NULL; CString strFill; // zweite Kombobox akivieren GetDlgItem(IDC_DELETE_IMPULSE_COMBO2)->EnableWindow(TRUE); // Liste nach der gewünschten Schlagweite durchsuchen for (int i=0; i <= m_pDoc->m_oaClearance.GetUpperBound(); i++) { // Zeiger auf die Mesungen der jeweiligen Schlagweite pPointer = (CClearance*)m_pDoc->m_oaClearance.GetAt(i); // Hilfsvariable mit für Vergleich vorbereiten strFill.Format("%d",pPointer->m_nClearance); // Sucht Schlagweite und bricht Schleife ab if (m_strDeleteImpulseCombo == strFill) { // Füllt die Kombobox2 mit Elementen for (i=0; i <= pPointer->m_oaData.GetUpperBound(); i++) { strFill.Format("%d",i+1); m_DeleteImpulseCombo2.AddString(strFill); } // Abbruch, wenn alle Elemente eingetragen return TRUE; } } return FALSE; }Gruß
Umleag
-
Umleag schrieb:
Leider spricht meine IF-Anweisung nicht an, da offenbar keine aktullen Daten aus dem ersten Kombinationsfeld vorliegen.
Meinst du damit, dass m_strDeleteImpulseCombo leer ist?
Hast du UpdateData(TRUE); gemacht?
-
Hallo,
ja ich vermute das der String leer ist. UpdateData(TRUE) habe ich versucht, was leider ohne Erfolg blieb
.
Den Aufruf hatte ich wie unten im Code dargestellt eingebaut.// Füllt das zeite Combo-Element BOOL CDeleteImpulseDialog::OnSelchangeDeleteImpulseCombo() { // Variablen Deklarationen CClearance* pPointer = NULL; CString strFill; // zweite Kombobox akivieren GetDlgItem(IDC_DELETE_IMPULSE_COMBO2)->EnableWindow(TRUE); UpdateData(TRUE);Ist der Aufruf von UpdateData falsch plaziert oder brauche ich hier eine andere
Funktion.Gruß
UmleagPS: Danke das du dich gemeldest hast
