OnInitDialog



  • Vielen Dank für Deinen Tip. Ich habe im Eigenschaftsfenster unter Überschreibungen gesucht, da war OnInitDialog aber auch nicht dabei.
    Ist das nicht ein Code, der s 🙂 tandardmäßig in einem neuen Porgramm angelegt wird? 🙂



  • Der steht glaube bei WM_INIT, guck mal im Klassenassistenten



  • OnInitDialog ist ein MessageHandler für WM_INITDIALOG. 🙂



  • Bei Dialogen muss ich immer unter Overrides nachschauen.



  • Ich danke Euch. OnInitDialog befindet sich ganz unten in der .cpp Datei.
    Wer lange sucht, der findet. 😃
    Nochmals ein Lob für dieses tolle Forum!!!!!! 😉



  • Ach ja und nicht vergessen: nicht alle Messages sind im Klassenassisenten aufgeführt. Da hilft dann nur selbst hand anlegen(hatte ich z.B: vorns erst bei WM_ENABLE)



  • Jetzt habe ich noch ein anderes Problem. Warum erkennt mein Programm den Pointer PDC nicht? 😕
    Hier ein paar Zeilen aus dem Programm:
    [/cpp][code]
    COLORREF TextColor = pDC->SetTextColor(Red ? RGB(255, 0, 0) : RGB(0, 0, 255));
    pDC->TextOut(X, Y, Word);
    pDC->SetTextColor(TextColor);

    Dazu die Fehlremeldung:
    \Beispiel1Doc.cpp(54): error C3861: 'pDC': Bezeichner wurde auch mit einer argumentbezogenen Suche nicht gefunden
    \Beispiel1Doc.cpp(54): error C2227: Der linke Teil von '->TextOutA' muss auf Klasse/Struktur/Union zeigen
    \Beispiel1Doc.cpp(53): error C2227: Der linke Teil von '->SetTextColor' muss auf Klasse/Struktur/Union zeigen
    \Beispiel1Doc.cpp(53): error C2065: 'pDC': nichtdeklarierter Bezeichner

    Der RichEditor ist eingebunden. Wäre schön, wenn Ihr mir nochmal helfen könntet! 🙂



  • Der kennt ihn nicht weil er wohl nicht da ist.
    Poste mal die ganze Methode.



  • Muß ich den irgendwo deklarieren?

    [cpp][code]
    BOOL CBeispiel1Doc::OnNewDocument()
    {
    if (!CDocument::OnNewDocument())
    return FALSE;

    // TODO: Hier Code zur Reinitialisierung einfügen
    // (SDI-Dokumente verwenden dieses Dokument)
    //Color
    CString greeting = "Hello Sir, how are you today?";
    int X = 0, Y = 0; // Position where string is printed
    int Pos = greeting.Find(" "); // Position of first blank
    BOOL Red = TRUE; // Word is red colour or not
    while (Pos >= 0)
    {
    // Picks up the first or next word
    CString Word = greeting.Mid(0, Pos + 1);
    // Sets colour and prints the word
    COLORREF TextColor = pDC->SetTextColor(Red ? RGB(255, 0, 0) : RGB(0, 0, 255));
    pDC->TextOut(X, Y, Word);
    pDC->SetTextColor(TextColor);
    // Updates position for next word
    X += pDC->GetTextExtent(Word).cx;
    // Discards the word from the sentance
    greeting = greeting.Mid(Pos + 1);
    // Finds position of next blank
    Pos = greeting.Find(" ");
    // Updates flag for text colour
    Red = !Red;
    }
    // Sets colour and prints the last word
    COLORREF TextColor = pDC->SetTextColor(Red ? RGB(255, 0, 0) : RGB(0, 0, 255));
    pDC->TextOut(X, Y, greeting);
    pDC->SetTextColor(TextColor);
    return TRUE;



  • vor dem Quellcode

    [cpp]

    schreiben
    danach

    [/cpp]

    schreiben
    so kann das doch keiner entziffern^^

    aber in der Tat, von nichts kommt nichts.
    Den musst du anlegen und mit nem Fenster füttern, damit er weis wohin
    er zeichnen soll (schau MSD nach CDC und CClientDC, je nachdem)



  • Sorry, bin noch nicht solange hier!

    BOOL CBeispiel1Doc::OnNewDocument()
    {
    	if (!CDocument::OnNewDocument())
    		return FALSE;
    
    	// TODO: Hier Code zur Reinitialisierung einfügen
    	// (SDI-Dokumente verwenden dieses Dokument)
    //Color
    CString greeting = "Hello Sir, how are you today?";
    int  X = 0, Y = 0;			// Position where string is printed
    int  Pos = greeting.Find(" ");		// Position of first blank
    BOOL Red = TRUE;			// Word is red colour or not
    while  (Pos >= 0)
    {
    	// Picks up the first or next word
    	CString Word = greeting.Mid(0, Pos + 1);
    	// Sets colour and prints the word
    	COLORREF TextColor = pDC->SetTextColor(Red ? RGB(255, 0, 0) : RGB(0, 0, 255));
    	pDC->TextOut(X, Y, Word);
    	pDC->SetTextColor(TextColor);
    	// Updates position for next word
    	X += pDC->GetTextExtent(Word).cx;
    	// Discards the word from the sentance
    	greeting = greeting.Mid(Pos + 1);
    	// Finds position of next blank
    	Pos = greeting.Find(" ");
    	// Updates flag for text colour
    	Red = !Red;
    }
    // Sets colour and prints the last word
    COLORREF TextColor = pDC->SetTextColor(Red ? RGB(255, 0, 0) : RGB(0, 0, 255));
    pDC->TextOut(X, Y, greeting);
    pDC->SetTextColor(TextColor);
    	return TRUE;
    


  • So richtig schlau werde ich aus der MSDN ja nicht. Wo muß ich diesen Pointer denn überall anmelden? Danke Euch!



  • Du missbrauchst hier irgendwie die Dokumentklasse.
    Die Dokumentklasse soll Daten nur speichern.
    Andere Fenster sollen nun die Daten aus der Dokumentklasse holen und sie darstellen.
    Wenn du in einer Fensterklasse(!!!) bist machst du einfach

    CClientDC dc(this);
    dc.SetTextColor(Red ? RGB(255, 0, 0) : RGB(0, 0, 255));
    //usw.
    

    Ausnahme: du befindest dich in der OnDraw(..) Methode, dort hast du dann schon deinen Device Context und kannst ihn einfach benutzen.



  • Danke für Deinen Tip.
    Ich habe den oben aufgeführten Teil aus der Dokumentenklasse herausgenómmen und in OnDraw kopiert. Es kommt immer noch die Fehlermeldung, das pDC nicht deklariert ist.
    Ich dachte in der OnDraw Klasse braucht man das nicht mehr? 😞



  • also in meiner OnPaint()-Methode wird das hier automatisch vom Assistenten erstellt:

    CPaintDC dc(this); // device context for painting
    

    heißt halt dc anstatt pDC



  • Das Problem mit dem Pointer habe ich danke Deiner Hilfe erledigt. Bei mir hieß der pDoc.
    Jetzt habe ich noch eine Frage zur Funktion SetTextColor. Mein Compiler macht eine Fehlermeldung, weil er diese Funktion nicht kennt. Ich habe aber ein Klasse RichEditCtrl erstellt, also müssten diese Befehle doch bekannt sein, oder habe ich noch etwas vergessen? 🙂



  • *lol* einen lügenden Compiler habe ich noch nicht gesehen 😉
    Die Klasse beistzt die Funktion wirklich nicht.
    "?->Index" im VC 6, Dort Klassennamen eingeben und schwups kann man sich die Memberfunktionen(Class Members) anzeigen lassen. Falls es zu wenig erscheint unten auf Base Class Members klicken. damit man auch die geerbten Methoden sieht.
    Das hilft oft.



  • Erstmal vielen Dank für die Hilfe. Werde es später mal ausprobieren. Vielleich melde ich mich dann nochmal.
    Schönes WE! 🙂


Anmelden zum Antworten