CListCtrl und nicht modularer Dialog Fehler???



  • Hallo,
    ich arbeite mit VS6 und SP6.

    Zur Zeit habe ich ein Problem welches ich nicht verstehe:

    1. Dialogbasierte Anwendung erstellt = ok
    2. Dialog hinzugefügt (mit Klassenassistent und neue Klasse erstellt) = ok
    3. Buton hinzugefügt und mit Funktion belegt, die den neuen Dialog aufrufen soll. Als nicht modularen Dialog.
    Einstellung des Dialogs (untergeordnet und dünn).

    Hier der Codeabschnitt zum einblenden des Dialogs in der Hauptanwendung:

    CCCenterDlg* pDialog;
    pDialog = new CCCenterDlg();
    pDialog->Create(IDD_XCLCD,this);
    pDialog->ShowWindow(SW_SHOW);
    pDialog->MoveWindow(110,42,500,234,TRUE);
    

    4. Alles kompiliert und siehe da es funzt wie es soll.
    5. Nun habe ich im Hauptdialog ein ListCtrl hinzugefügt. Wieder kompiliert und alles ok.
    6. Dann habe ich mit dem Klassenassistenten eine Variable dem ListCtrl hinzugefügt, Programm erstellt und kein Fehler.
    7. Drücke ich nun meine Button um den zweiten Dialog einzublenden kommt folgende
    Fehlermeldung :

    dlgdata.cpp
    Line 43

    Da ich noch Anfänger bin weiß ich nicht wie ich den Fehler beheben kann. Ich verstehe nicht was ein ListControl mit dem zweiten Dialog zu tuen hat. Es bsteht noch keine Verknüpfung.

    Ziel soll es sein, später durch anwählen im Listctrl verschiedene Dialoge aufzurufen.

    Kann mir jemand das erklären, danke.
    Mfg
    Anlen



  • Die Fehlermeldung:

    dlgdata.cpp
    Line 43

    kommt immer dann, wenn man eine Variablen auf eine Resource im Dialog (Edit-Feld, LisCtrl, Button) hat und die Resource selbst gar nicht existiert. Debugge mal deine DoDataExchange-Methode.


  • Mod

    Oder anders gesagt. Du willst ein Control miteiner bestimmten ID aber diese ID existiert in dem Dialog-Template nicht.



  • Hallo,
    und erstmal danke für die Hinweise.

    Also meine DoDataExchange Methode sieht so aus.

    void CCCenterDlg::DoDataExchange(CDataExchange* pDX)
    {
    	CDialog::DoDataExchange(pDX);
    	//{{AFX_DATA_MAP(CCCenterDlg)
    	DDX_Control(pDX, IDC_LIST2, m_liste);
    	//}}AFX_DATA_MAP
    }
    

    dies ist ein Auszug aus der resource.h

    IDD_CCENTER_DIALOG DIALOGEX 0, 0, 412, 201
    STYLE WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
    EXSTYLE WS_EX_APPWINDOW
    CAPTION "CCenter"
    FONT 8, "MS Sans Serif"
    BEGIN
        PUSHBUTTON      "Abbrechen",IDCANCEL,355,185,50,14
        LTEXT           "ZU ERLEDIGEN: Dialogfeld-Steuerelemente hier plazieren.",
                        IDC_STATIC,15,10,200,8
        PUSHBUTTON      "Button1",IDC_BUTTON1,230,5,50,14
        PUSHBUTTON      "Button2",IDC_BUTTON2,290,5,50,14
        PUSHBUTTON      "Button3",IDC_BUTTON3,350,5,50,14
        CONTROL         "List2",IDC_LIST2,"SysListView32",WS_BORDER | WS_TABSTOP,
                        15,25,60,150
    END
    

    also das Listenelement hat die ID "IDC_LIST2" sowie es in den resourcen angegeben ist.
    Was mich verwundert ist, das ich den nicht modularen Dialog überhaupt nicht mit den Hauptdialog verknüpft habe. Also noch keine Variabeln zugewiesen. Da beide Dialoge auch noch keine Funktionen haben. Erfolgt auch dort keine Zusammenarbeit.
    Wie gesagt lösche die membervariable(control) welche ich dem Listenelement zugewiesen habe, Funzt alles wieder 😞

    Weiß jemand noch einen Rat?

    Mfg
    Anlen



  • Sieh mal in der resource.h nach, welchen int-Wert dein IDC_LIST2 hat. Hat vielleicht noch ein anderes Control denselben Wert?

    Wenn ja, gib dem Control mal andere Werte. Du musst dann evt. aber auch den Wert für _APS_NEXT_CONTROL_VALUE entsprechend erhöhen (höchster Control-Wert + 1).
    Dann aber unbedingt Rebuild all ausführen.

    Oder du entfernst die Variable, dann das ListCtrl aus der Resource und machst das Ganze neu.


Anmelden zum Antworten