Hallo Gemeinde,
ich versuch mal, mein Problem anschaulich zu zeigen, hoffe, dass mir das gelingt.
Ich hab eine Dok-Klasse, eine View-Klasse und eine selbst erstellte CButton-Klasse. Diese ist von CView abgeleitet.
In der Dok-Klasse gibt es eine Liste aus Strukturen, die Daten, wie Position, Zustand etc. der Buttons speichert.
Aus der View-Klasse heraus, greife ich nun die Daten aus der Dok-Klasse in der OnPaint über eine Schleife ab, die eben solange läuft, bis alle Buttons dargestellt.
In der Schleife selbst rufe ich die Methode CButton::ShowButton(Daten aus Dok-Klasse) auf.
Dies Methode malt nun über die OnPaint des Buttons selbst diesen Button.
Zur Übersicht hier mal die Schleife in der OnPaint der View-Klasse:
Ähnlich funktioniert auch die Prüfung, ob der Button geklickt wurde oder nicht.
So, und jetzt kommt mein Problem:
Ist diese Architektur denn korrekt? Entspricht sie dem Dok / View Modell?
Denn wenn ich objektorientiert denke, dann wäre die Position und all die anderen Daten, die ich derzeit in der Dok habe, eine Eigenschaft des Buttons, müssten also dort gespeichert werden und nicht in der Dok. Dann allerdings müsste ich zwecks Serialisierung eine Doppelableitung machen, nämlich von CView und CDokument.
Das allerdings erscheint mir so gar nicht konform mit dem Dok / View Modell zu sein. ;-)
Wer kann mir da weitergehende Gedanken oder Lösungsvorschläge machen. Wie könnte ich die Architektur abändern?
Ich hoffe, das war einigermaßen verständlich, wenn nicht, bitte nachfragen.
In diesem Zusammenhang gleich das nächste Problem:
Die Lösung, die ich zur Zeit habe, funktioniert soweit eigentlich. Und genau das ist mir eigentlich sehr schleierhaft.
Wenn ich genau die Fläche für ungültig erkläre, auf der ein Button ist, dann malt er auch genau diese Fläche neu. Woher weiß meine OnPaint denn nun bei diesem komplexen Aufbau, was sie neuzeichnen soll und was nicht? Eigentlich kann sie ja nur sequentiell abgearbeitet werden. Das hieße ja aber, dass es keinen Unterschied macht, ob ich den gesamten Bildschirm ungültig erkläre oder nur einen Teil, den er arbeitet ja eh die gesamte OnPaint ab !
Grüße und vielen Dank im Voraus
Squeegee
ich versuch mal, mein Problem anschaulich zu zeigen, hoffe, dass mir das gelingt.
Ich hab eine Dok-Klasse, eine View-Klasse und eine selbst erstellte CButton-Klasse. Diese ist von CView abgeleitet.
In der Dok-Klasse gibt es eine Liste aus Strukturen, die Daten, wie Position, Zustand etc. der Buttons speichert.
Aus der View-Klasse heraus, greife ich nun die Daten aus der Dok-Klasse in der OnPaint über eine Schleife ab, die eben solange läuft, bis alle Buttons dargestellt.
In der Schleife selbst rufe ich die Methode CButton::ShowButton(Daten aus Dok-Klasse) auf.
Dies Methode malt nun über die OnPaint des Buttons selbst diesen Button.
Zur Übersicht hier mal die Schleife in der OnPaint der View-Klasse:
Code:
Button oneButton; //Die Struktur
CRotateButton MyButton; //temporärer Button
pDoc->ResetListButtons();
while ( pDoc->GetButton( oneButton ) ) //Hole Daten
{
//Zeige den Button mit den Daten aus der Dok
MyButton.ShowButton(pDC,oneButton.xPos,oneButton.yPos,
oneButton.angle, oneButton.usedBitmap);
}
Ähnlich funktioniert auch die Prüfung, ob der Button geklickt wurde oder nicht.
So, und jetzt kommt mein Problem:
Ist diese Architektur denn korrekt? Entspricht sie dem Dok / View Modell?
Denn wenn ich objektorientiert denke, dann wäre die Position und all die anderen Daten, die ich derzeit in der Dok habe, eine Eigenschaft des Buttons, müssten also dort gespeichert werden und nicht in der Dok. Dann allerdings müsste ich zwecks Serialisierung eine Doppelableitung machen, nämlich von CView und CDokument.
Das allerdings erscheint mir so gar nicht konform mit dem Dok / View Modell zu sein. ;-)
Wer kann mir da weitergehende Gedanken oder Lösungsvorschläge machen. Wie könnte ich die Architektur abändern?
Ich hoffe, das war einigermaßen verständlich, wenn nicht, bitte nachfragen.
In diesem Zusammenhang gleich das nächste Problem:
Die Lösung, die ich zur Zeit habe, funktioniert soweit eigentlich. Und genau das ist mir eigentlich sehr schleierhaft.
Wenn ich genau die Fläche für ungültig erkläre, auf der ein Button ist, dann malt er auch genau diese Fläche neu. Woher weiß meine OnPaint denn nun bei diesem komplexen Aufbau, was sie neuzeichnen soll und was nicht? Eigentlich kann sie ja nur sequentiell abgearbeitet werden. Das hieße ja aber, dass es keinen Unterschied macht, ob ich den gesamten Bildschirm ungültig erkläre oder nur einen Teil, den er arbeitet ja eh die gesamte OnPaint ab !
Grüße und vielen Dank im Voraus
Squeegee