Fehler durch Subclass

B

Bombenbodo

Hallo allerseits,

ich muss im Rahmen einer Belegarbeit einen "Imagetransformer" ähnlich Photoshops "Save To Web"-Dialogbox erstellen und benötige daher zwei Scrollbare Fensterausschnitte innerhalb einer SD-Applikation. Dazu habe ich zunächst folgenden Code hinzugefügt:

Code:
int CImageTransView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
	if (CView::OnCreate(lpCreateStruct) == -1)
		return -1;

	if (!m_myCScrollView_Original.Create(NULL, NULL, WS_CHILD | WS_VISIBLE, CRect(0,0,0,0), this, ID_ORIGINAL, NULL))
	{
              TRACE0("Failed to create view window\n");
              return -1;
	}

	if (!m_myCScrollView_Edit.Create(NULL, NULL, WS_CHILD | WS_VISIBLE, CRect(0,0,0,0), this, ID_EDIT, NULL))
	{
              TRACE0("Failed to create view window\n");
              return -1;
	}
	return TRUE;
}

Die zwei myCScrollViews-Objekte sind natürlich von der CScrollView-Klasse abgelitten und werden noch mittels der OnSize-Methode an die richtige Fensterposition geschoben. Das ganze funktioniert wunderbar - ich kann Bilder anzeigen lassen, scrollen + zoomen. Alles wunderbar...

Aber:

(I) sobald ich das Programm beende (Datei-Exit oder Schliessen-Button) bekomme ich die Fehlermeldung "Unhandled exception at 0x77f65a58 in ImageTrans.exe: User breakpoint.", die ich mir nicht erklären kann. Weiss irgendjemand eine Lösung?

(II) Wie schaffe ich es aus der Unterklasse (CScrollView) eine Methode der Hauptklasse aufzurufen. Also ich will z.B. dass, wenn ein MouseWheel-Event in der Subklasse abgefangen wird eine Methode des Parentfensters aufgerufen wird.

ein:
Code:
  this->GetParent()->meineMethode();
geht nicht, da dies ein CWnd zurückliefert und die entsprechende Methode nciht bekannt ist. Casting hat auch nichts gebracht. Andere Vorschläge?
 
zu II)
Du kannst natürlich immer sowas machen, wenn du vorher die .h vom Parent includest.
Code:
 ((CMyParentClass*)(GetParent()))->meineMethode(); // mit vieeeelen Klammern! :)
Aber wenn du sowas häufiger machst, empfiehlt es sich, einen Pointer vom Elterntyp als Member in der Unterklasse zu definieren, der auf das Parentwindow zeigt. Das Parent setzt diesen Pointer, sobald es created ist.

zu I)
Da hilft nur Debugging. Kannst du in OnDestroy() oder so Haltepunkte anbringen? Oder versuch, die Exception zu catchen (try...catch). Ich weiss allerdings so auch nicht, wo du da ansetzen könntest.
 

Neue Beiträge

Zurück