G
Wie gesagt, ich hab folgendes Problem :
Der Dravere hat mir ja schon dazu geraten den Datenaustausch über DoDataExchange zu machen. Bei mir jedoch funzt das net, er schmirrt mit einer Debug Fehlermeldung ab.Warum er abschmirrt, das weiss ich nicht. Dieser Dialog ist allerdings nicht mein Primärer Dialog der Anwendung, sondern es wird ein modaler Dialog in einer Klasse aufgerufen ( die auch nicht von CDialog abgeleitet ist).
Bei mir klappt es nur, wenn ich es alles mit GetDlgItem() anspreche. Ich nehme mal an das der Fehler bei mir ist, nur ich finde ihn nicht
In der Klasse CEingang verwalte ich eine lineare Liste, mit Namen,Vornamen und Geburtstag.
class CEingang
{
public:
CEingang(void);
~CEingang(void);
CPerson *item;
list <CPerson*> m_personenliste;
list <CPerson*> ::iterator it_personenliste;
public:
void AddPerson(CString Name,CString Vorname,CString Ueberweiser,CString Einsendedatum,CString befund,CString DayOfEndBefund);
CString GetDayOfEingang(CString Name,CString Vorname);
CString GetUeberweiser();
CString GetBefundArt(CString Name,CString Vorname);
int GetNumberOfMissingValues();
void SetDayOfEingang(CString Name,CString Vorname,CString Datum);
int len(const char *wert);
};
Mit Hilfe der Methode GetNumberOfMissingValues ermittel ich die Anzahl der Kanditaten, bei denen das Eingangsdatum fehlt - welches dann nachgetragen werden muss in dem Listenelement beim modalen Dialog.Diesen Dialog starte ich dann so :
..
..
if(anzahl > 0)
{
CUpdatePersonData m_data;
m_data.link(eingang);
m_data.DoModal();
}
..
..
Beim modalen Dialog habe ich dann als erstes die OnInitDialog Methode überschirieben, damit er mir gleich bei der Initialisierung des Dialoges das Listenfeld mit den Daten füllt.
BOOL CUpdatePersonData::OnInitDialog()
{
m_ListCtrl = (CUpdateList*)GetDlgItem(IDC_LIST1);
m_ListCtrl->SetExtendedStyle(LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES);
m_ListCtrl->InsertColumn(0,"Name",LVCFMT_CENTER,120,1);
m_ListCtrl->InsertColumn(1, "Vorname",LVCFMT_CENTER,120,1);
m_ListCtrl->InsertColumn(2,"Eingangsdatum",LVCFMT_CENTER,108,1);
eingang->it_personenliste=eingang->m_personenliste.begin();
while(eingang->it_personenliste != eingang->m_personenliste.end())
{
eingang->item=*eingang->it_personenliste;
if(strcmp(eingang->item->EinsendeDatum,"")==0)
{
m_ListCtrl->InsertItem(0,eingang->item->Name);
m_ListCtrl->SetItemText(0,1,eingang->item->Vorname);
m_ListCtrl->SetItemText(0,2,eingang->item->EinsendeDatum);
}
eingang->it_personenliste++;
}
return true;
}
Dann habe ich mir eine Klasse von CListCtrl abgeleitet :
#pragma once
#include "afxcmn.h"
class CUpdateList :
public CListCtrl
{
public:
CUpdateList(void);
~CUpdateList(void);
afx_msg void OnPaint();
BOOL OnNotify(WPARAM wParam,LPARAM lParam,LRESULT *pResult);
DECLARE_MESSAGE_MAP()
};
und hab dann die OnPaint Methode und OnNotify Methode überschrieben.Ich bin mir auch nicht ganz sicher, das ich die Message WM_NOTIFY korrekt abfange. In der Message Map habe ich nur folgendes stehen :
BEGIN_MESSAGE_MAP(CUpdateList,CListCtrl)
ON_WM_PAINT()
END_MESSAGE_MAP()
Muss ich da eventuell noch was eintragen ?
Gruss Bodo