[MFC] Membervariable eines Dialoges schießt quer

sTEk

Erfahrenes Mitglied
Ich habe mal wieder ein Problem.
Ich öffne vom Hauptfenster aus einen modalen Dialog.
In diesem Dialog wird eine Datei eingelesen und der Fortschritt soll in einem Statusbalken angezeigt werden. Ich habe also alles folgendermaßen eingebunden (im Dialog):

Code:
CKabelliste_DatEinlesen::CKabelliste_DatEinlesen(CWnd* pParent /*=NULL*/)
 	: CDialog(CKabelliste_DatEinlesen::IDD, pParent)
 {
 		int		i,n=1;
 		m_EEPROM_Inhalt=new BYTE[262144];
 
 		FILE* eepromdatei;
 		eepromdatei = fopen("test.dat", "rb");
 		fseek( eepromdatei, 0L, SEEK_SET );
 		
 		for	(i=0; i<262144; i++)
 		{
 			m_EEPROM_Inhalt[i] = (char)fgetc(eepromdatei);
 			m_stat.SetPos(i/2622);	//Hier macht er blöde!
 												  // m_stat ist CProgressCtrl
 			
 		}
 		fclose(eepromdatei);
 	//CDialog::OnOK();   //Damit sich der Dialog später wieder von allein schließt
 
 	//{{AFX_DATA_INIT(CKabelliste_DatEinlesen)
 	//}}AFX_DATA_INIT
 }
Da ich dachte, dass es vielleicht daran liegt, dass er beim Öffnen nicht gleich nen Status neu zeichnen kann, habe ich alles nötige in eine extra Funktion geschrieben und am Anfang mittels Timer 1000ms warten lassen.
Im Hauptfenster hatte ich vor DoModal() diese Funktion aufgerufen - klappt aber auch nicht - immer was mit Speicherfehler.
Es muss ja an der Variable m_stat liegen, die er wohl versucht im Hauptfenster zu ändern, denke ich mir jedenfalls.
 
Hi!

machs doch so :

Code:
m_stat.SetRange(0, 262144);
m_stat.SetStep(1);

das fügst du vor deiner for Schleife ein. In der Schleife rufst du dann statt SetPos
einfach :

Code:
m_stat.StepIt();

auf
 
Danke Dir, aber leider geht das immernoch nicht so....

Ich möchte den Dialog, der nur die Fortschrittsanzeige beinhaltet öffnen und dieser Dialog soll dann sofort und selbstständig ein paar Aktionen machen und nebenbei die Fortschrittsanzeige füllen. Wenn ich das jedoch so wie oben bereits gepostet implementiere stürzt das Programm ab. :/
 
Du kannst die Membervariablen, die auf Controls gemappt sind, erst ab OnInitDialog verwenden. OnInitDialog wird erst innerhalb von DoModal aufgerufen.

MFC-Klammerklassen sind NICHT direkt die Controls. Wenn eine MFC-Klasse existiert, kann das attach-te HWND immer noch ungültig sein.
 
Danke - und da hab ich schon mein dickes Problem, ich habe kein OnInitDialog() in diesem Dialog...habe einfach unter Ressourcen>Dialog>"Dialog hinzufügen" gewählt.
Wenn ich OnInitDialog() selbst reinschreibe, nutzt er das dann auch?
 
Nee, du musst das über die Eigenschaften-Tabs machen.
Da gibt's ein Tab mit einer grüngrauen Box drauf, da sind alle möglichen überschreibbaren Funktionen gelistet. Wenn du die Dialog-Cpp aufmachst (als aktives Dokument hast), dann in den Eigenschaften-Dialog dieses Tab ansiehst, sollte in der Liste auch OnInitDialog stehen. Dort lässt du dir die Memberfunktion anlegen.

Wenn du's per Hand machst, musst du OnInitDialog anlegen und auch einen Eintrag in der Messagemap machen. Wenn du nicht weisst, wo bzw. was die Messagemap ist, siehe oben.

Bei VS 6 geht das über den ClassWizard (Ctrl-W?).
 
Ähm...ich glaube ich bin blind...hab so ein Tab nicht. :(
Aber ich habe mir die virtuelle Funktion OnInitDialog() von Hand angelegt...und es klappt endlich! *freu*
Ich danke Dir für den Fingerweis in Richtung "Wann wird was wo abgearbeitet". Kann man denn sowas auch irgendwo nachlesen? Mal abgesehen von der MSDN, die gibt ihre Infos nur richti gpreis, wenn man weiß, was man sucht...
 
Ich habe eigentlich alles grossteils aus der MSDN, das Blöde ist nur, da ist alles an die jeweils relevanten Stellen verteilt. Und wenn man nicht weiss, wonach man sucht, findet man es nicht.
 
sTEk hat gesagt.:
Ähm...ich glaube ich bin blind...hab so ein Tab nicht. :(
Aber ich habe mir die virtuelle Funktion OnInitDialog() von Hand angelegt...und es klappt endlich! *freu*
Ich danke Dir für den Fingerweis in Richtung "Wann wird was wo abgearbeitet". Kann man denn sowas auch irgendwo nachlesen? Mal abgesehen von der MSDN, die gibt ihre Infos nur richti gpreis, wenn man weiß, was man sucht...

Hi!

Versuch mal nach laden deines Arbeisbereiches "ALT + W"... Dann sollte der Dialog kommen, mit dem man die Funktionen anlegen lassen kann.
 

Neue Beiträge

Zurück