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.


Anmelden zum Antworten