SDI-Anwendung

Silvercreast

Erfahrenes Mitglied
Hallo,

ich bin ein richtiger Anfänger auf dem Gebiet der SDI-Anwendung, habe bis jetzt nur Dialog basierte Anwendungen geschrieben.
Um mich in SDI reinzuarbeiten habe ich die Seite http://www.cpp-tutor.de benutzt.

Hier ist die Lektion 1 zur MFC http://cpp-tutor.de/mfc/mfc/kap8/lektion1.htm

Dort habe ich auch gute theorie bekommen. Nur mit der Praxis haperts bei mir :(
In dem Bereich MFC (SDI) auf der Internetseite stellt der Ersteller der Seite dem Leser eine Aufgabe und zwar das er Text in der SDI Anwendung ausgeben soll.
Nur ich schaffe es einfach nicht Text geschweige denn irgendetwas anderes einzufügen.
Kann mir jemand da vielleicht helfen. Wie ich meine SDI Anwendung erweitern kann usw.
Würde mich sehr freuen wenn mir da jemand helfen kann. Wenn es noch wichtig ist zu wissen wofür ich das brauche, ich möchte eine Server Client Anwendung schreiben und mir wurde gesagt das dies besser mit SDI als Dialog zu realisieren ist.

Gruß Silver
 
Habe ein Problem schon gelöst und zwar habe ich die OnCreate falsch interpretiert. Ich dachte diese Methode wäre zur Erstellung der Fensters und dessen Inhalt zuständig.
Aber für den Inhalt ist die gute alte OnDraw verantwortlich.
Ich grübbel jetzt nur noch über die PreCreateWindow. ich weiss das diese Fenstereigenschaften erstellt, aber was kann ich darunter verstehen Die Symbolleiste z.B. Wie kann ich die Fenstereigenschaften verändern welche Befehle gibt es da
Ich weiss das unter Fenstereigenschaften nicht der Rahmen und soweiter fällt, dafür ist die InitInstance zuständig. Hmm kann mir jemand bei der Frage helfen
 
Ich habe die Aufgabe, Text darzustellen, in der angegebenen Lektion nicht gefunden, aber normalerweise geht das mit der DeviceContext-Funktion
Code:
TextOut(int x, int y, const CString& str)
und zwar in der OnDraw-Methode Deines Views. Die bekommt einen Zeiger auf den DeviceContext mitgeliefert.
 
Dann hast Du das ja schon gefunden.

In PreCreateWindow kannst Du die einzelnen Member der CREATESTRUCT-Struktur verändern und damit Dinge wie z.B. den Fensterstil (WS_... oder WS_EX_...) oder die Fenstergröße beeinflussen.
 
InitInstance ist eine Funktion der Applikationsklasse (von CWinApp abgeleitet). Dort geht es erstmal um das Starten und Initialisieren der Applikation. Das hat erstmal mit den Fenstern nichts zu tun. So wird hier z.B. der Dokumenttyp mit seinen Ansichten in der Applikation registriert.
 
Aso dann ist das also falsch was auf der Internetseite steht, dort steht das InitInstance das Hauptfenster erstellt. :( Hmm .

Wie kann ich den diese PreCreate verändern. Ich kann ja mit der vorgegebenen Referenz cs arbeiten. Aber ich weiss nicht so recht wie ich mit der am besten arbeite
Um Änderungen am Stil vorzunehmen.
 
Aso dann ist das also falsch was auf der Internetseite steht, dort steht das InitInstance das Hauptfenster erstellt.
Nein, ganz falsch ist das nicht, das Anzeigen des Hauptfensters wird von dort aus mit ShowWindow(SW_SHOW) angestoßen.
Der Aufruf von PreCreateWindow wird über das Erzeugen eines neuen Dokumentes von ProcessShellCommand angestoßen.
Mach Dir doch enfach mal ein paar Breakpoints in InitInstance (Applikation), PreCreateWindow (MainFrame) und OnInitialUpdate (View) und steppe durch die InitInstance. Dann siehst Du, was wann woher aufgerufen wird.
 
Ich habe noch ein weiteres Problem und zwar bin ich gerade so ein paar Funktionen am testen unter anderem die einen Hintergrund farbig zu machen.
Dazu benutze ich CBrush.

Code:
void CSDIView::OnDraw(CDC* pDC)
{	

	pDC->SetTextColor(RGB(0,0,255));
	pDC->TextOut(200,50, "Die ist meine SDI Anwendung"); 

	CBrush pCB;

	pCB.CreateSolidBrush(RGB(255,255,0));
		
	
	CSDIDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	// ZU ERLEDIGEN: Hier Code zum Zeichnen der ursprünglichen Daten hinzufügen


}

Aber der Hintergrund wird nicht gelb warum
 

Neue Beiträge

Zurück