IsWindow(h_mWnd) Assertion ???
-
Hallo an Alle,
hab irgendwie ein unverständliches Problem. Und zwar habe ich in meiner Anwendung zwei Dialoge. Der eine Dialog macht einen anderen Dialog auf, und wird während der Anzeige des zweiten Dialoges versteckt. Nachdem ich den zweiten Dialog schliesse, wird wieder der erste Dialog angezeigt und und es werden noch ein paar Variablen aus dem Zweiten Dialog an den ersten übergeben. In Source-Sicht sieht das so aus:
Dialog 1 öffnet Dialog zwei...
void CMenue::OnApi() { if (rPConnection.IsConnected()){ rPConnection.Disconnect(); } CMenue::ShowWindow(FALSE); Anmeldung api(this); if (api.DoModal()==IDOK) { CMenue::ShowWindow(TRUE); } CMenue::SetRpConnectionObject(api.GetRpConnectionObject()); CMenue::SetDBConnectionObject(api.GetDBConnectionObject()); CMenue::OnInitDialog(); api.OnOK(); }
Nachdem ich in dem Dialog 2 auf den Button mit der ID IDOK gehe, wird wie oben gezeigt, der zweite Dialog geschlossen...
Dialog 2...
void Anmeldung::OnOK() { CDialog::OnOK(); }
Nun weiss ich nicht, warum ich da auf einmal eine Debug Assertion Failed Meldung bekomme, und zwar mit der Expression: !::IsWindow(m_hWnd), warum bricht er da ab?
er sagt mir noch wo es zu dieser Assertion kam und zwar an der Stelle:
WndImage.cpp
BOOL CWndImage::CreateFromStatic(CWnd * sc) { _ASSERTE(!::IsWindow(m_hWnd)); // <--- hier kommt es zu dem Abbruch if (!sc || !::IsWindow(sc->m_hWnd)) return false; CWnd * dlg = sc->GetParent(); if (!dlg || !::IsWindow(dlg->m_hWnd)) return false;
Wäre wirklich nett, wenn mir da einer weiter helfen könnte...ich bin schon am Verzweifeln...
Gruss,
chullain
-
Nur soviel: Wenn das m_hWnd nichtda ist, heißt das wohl, das das Fenster nicht creiert worden ist.
An Deinem Code ist mir erstmal nichts besonderes aufgefallen, außer dass duCMenue::OnInitDialog();
in Deiner Funktion aufrufst. Warum das? Der Dialog sollte doch in diesem Moment schon initialisiert sein. Am besten du verfolgst mal in derAufrufliste rückwärts, von wo CreateFromStatic aufgerufen wird.
-
...genau das wollte ich eben hinschreiben , mir ist aufgefallen, dass der Fehler in der OnInitDialog()-Methode auftritt und zwar bei CreateFromStatic
...hier ist ein Code-Schnipsel...
BOOL CMenue::OnInitDialog() { CDialog::OnInitDialog(); m_img.CreateFromStatic( GetDlgItem(IDC_ST_IMG) ); // <-- hier ist der Abbruch m_img.SetImg(IDB_BITMAP2); // specify a valid bitmap resource here m_img.SetBltMode(CWndImage::bltFitXY); ...
Gruss,
chullain
-
Na also:
m_img ist sicher auch urgendein Control. Wenn dessen m_hWnd meber == NULL ist, dann wird es wohl noch nicht creiert sein. Was passiert denn wenn du Dein ASSERT einfach ignorierst?
Wenn CMenue::OnApi() ein normales Menu-click-event ist, dann frage ich mich, warum du OnInitDialog dort überhaupt aufrufst. Giebt es dafür einen vernünftigen Grund?
-
...ja, ich hatte da Anweisungen gehabt, die jedes Mal meine Dialogoberfläche aktualisieren sollten, aber das war falsch platziert, ich habs jetzt in eine andere Methode diese Anweisung verschiebt, und die OnInitDialog-Methode wird jetzt nur einmal beim Neureröffnen des Dialogs ausgeführt, wie es auch der Fall sein sollte...
jetzt klappts, vielen Dank...