Probleme mit Neuzeichnen von nem zusätzlichen Dialog
-
Hi,
ich erstell mit folgenden Anweisung einen BitteWartenDialog
CBitteWartenDialog* pDialog; pDialog = new CBitteWartenDialog(); if(pDialog == NULL) { MessageBox("Fehler beim Versuch den BitteWartenDlg zu erstellen", "ImageUpper", MB_ICONERROR); return; } pDialog->init(0, 2*(bilderliste.GetCount()-2), 1, "Komprimiere jetzt die Bilder ... Bitte warten ..."); // GetCount()-2 weil bilderliste[1] = ordnerpfad und bilderliste[2] = dateiendung
mit dieser Anweisung lass ich die Statusbar des Dialogs weiterwandern
pDialog->incr();
und mit dieser Funktion zerstöre ich den Dialog wieder
pDialog->DestroyWindow();
Hier noch die beiden aufgerufenen Funktionen:
int CBitteWartenDialog::init(int Min, int Max, int Step, CString strMessage) { BOOL ret = Create(IDD_DIALOG1,this); if(!ret) { AfxMessageBox("Error creating Dialog"); return -1; } ShowWindow(SW_SHOW); m_ctrlProgressCtrl.SetRange(Min,Max); m_ctrlProgressCtrl.SetStep(Step); SetDlgItemText(IDC_EDIT1, strMessage); RedrawWindow(0, 0, RDW_UPDATENOW); return 0; } void CBitteWartenDialog::incr() { m_ctrlProgressCtrl.StepIt(); RedrawWindow(0, 0, RDW_ERASE | RDW_UPDATENOW | RDW_INVALIDATE); MessageBox("Hallo"); }
CBitteWartenDialog::incr() soll meinen Dialog auch neu zeichnen. Im Moment wird mein Dialog auch neugezeichnet solange ich nix anderes mach. Sobald ich aber was anderes zwischendruch gemacht hab (z.B. IExplorer maximiert geöffnet) wird mein Dialog nicht mehr neu gezeichnet.
Was muss ich denn da ändern damit mein Dialog auch beim wieder einblenden weiter neu gezeichnet wird?
Muss ich die erste 0 bei RedrawWindow(... durch einen Handle auf diesen Dialog ersetzen und wenn ja, woher bekomm ich den Handle?
Muss ich UpdateWindow(...) nutzen (wenn ja wo bekomm ich den Handle für diesen Dialog her?Wär cool wenn mir jemand helfen kann
-
Du mußt die Nachrichten auch verarbeiten. Ersetz RedrawWindow(0, 0, RDW_UPDATENOW); durch:
MSG msg; while( ::PeekMessage( &msg, NULL, NULL, NULL, PM_NOREMOVE ) ) ::AfxGetThread()->PumpMessage();
Dann sollte es laufen.