ich möchte von einer fremden klasse eine listbox in meiner dialogklasse mit daten füllen. hab's damit versucht: CListBox* pList = (CListBox*)GetDlgItem(AfxGetMainWnd()->m_hWnd,IDC_LIST); pList->AddString("hallo"); das führt aber nur dazu, daß das programm abstürzt. kann mir da jemand weiterhefen.
ich hab eine sdi anwendung und das window existiert noch nicht.
ich hab mir gedacht, daß es möglich ist auf die listbox zuzugreifen, nachdem ich folgendes aufrufe InitModalIndirect( HGLOBAL hDialogTemplate); aber wie komme ich an hDialogTemplate ??
Hi! Naja. Hab leider noch nie mit dem Befehl gearbeitet. An welcher Stelle rufst du das auf? Warum rufst du es nicht beim initialisieren auf? mfg -- Dieser Post wurde am 07.12.2003 um 23:39 Uhr von mike editiert.
ich wollte sie außerhalb der dialogklasse aufrufen. CMyDialog m_mydlg; m_mydlg.InitModalIndirect((DLGTEMPLATE*)pBuffer); ich bin mir aber nicht mehr so sicher, daß es klappt, weil ich gelesen hab daß diese funktion nicht resourcen-basiert ist. ich hab noch gelesen, daß es möglich wäre auf eine listbox zuzugreifen, wenn man innerhalb von OnInitDialog (also innerhalb der dialogklasse) AddString aufruft. dabei müssen die anzuzeigenden daten innerhalb der dialogklasse und außerhalb dieser zugreifbar sein. die frage ist nur wie ?
Hi! Genau das ist meiner Meinung das Problem. AddString fügt nicht nur den String hinzu, sondern ruft bestimmt eine Routine auf, die das Item auch zeichnet - und das funktioniert nur, wenn die Liste bereits erzeugt wurde. Das heißt, du kannst dafür WM_INITIALDIALOG oder WM_SHOWWINDOW nehmen.
danke für deine hilfe. ich habs rausgefunden. ich hab ein feld von CString in meiner dialogklasse angelegt. und rufe dann AddString in OnInitDialog meiner dialogklasse auf.bevor ich DoModal in der anderen klasse aufrufe belege ich dieses feld mit daten.