wo stehen die Funktionsdefinitionen(Anfänger)



  • das versuche ich gerade nachzubauen, und da steht:
    *mhh..ahja...

    Nun habe ich unter den Funktionsdef. der Klasse*

    afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor);
    

    eingetragen.

    unter messagemap

    ON_WM_CTLCOLOR()
    

    *eingetragen.

    Uns siehe da es tuts
    Toll...und Danke*
    kann mir mal jemand sagen wo man afx_msg HBRUSH OnCtlColor... eintragen muss???

    danke



  • noch mal was dazu...
    ich habe in Startfenster.cpp folgendes eingefügt

    HBRUSH CStartfenster::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
    { 
        HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor); 
        pDC->SetTextColor(RGB(255,255,255)); 
        pDC->SetBkColor(RGB(255,0,0)); 
    
    return hbr; 
    }
    

    unter MessageMap in Startfenster.cpp:

    ON_WM_CTLCOLOR()
    

    und in den Header von Startfenster:

    afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor);
    

    allerdings weiss ich nicht so genau, wohin der muss, ich habe es jetzt erstmal unter

    protected:
    
    //Generierte Nachrichtenzuordnungsfunktionen
    //{AFX_MSG(CSTARTFENSTER)
    afx_msg HBRUSH OnCtlColor(CDC* pDC,CWnd, UINT nCtlColor);
    //{AFX_MSG
    DECLARE_MESSAGE_MAP()
    };
    

    und dabei kommt folgender fehler:
    Starfenster.cpp: Überladene Member Funktion ´struct HBRUSH__(class CDC,class CWnd*, unsigned int) nicht in CStartfenster gefunden
    Siehe Deklaration von ´CStartfenster´



  • afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor);
    

    Das gehört in deine Klassendefinition, also etwa so:

    class CStartfenster
    {
       ...
        afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor);    
    
    };
    


  • meinst du also in der header:

    class CStartfenster : public CDialog
    {
    public:
    CStartfenster(CWnd* pParent = NULL);
    
    //Dialogfelddaten
    ..
    ..
    ..
    ..
    //Überschreibungen
    ..
    ..
    ..
    ..
    //Implementierungen
    protected:
    //Generierte Nachrichtenzuordningsfunktionen
    ..
    ..
    ..
    DECLARE_MESSAGE_MAP()
    };
    

    und wo da? bekomme laufend den gleichen Fehler 😞



  • kann mir nicht mal einer helfen, wo

    afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor);
    

    hinein muss, verzweilfele noch 😡



  • Nach deinem //Generierte Nachrichtenzuordningsfunktionen müsste eigentlich noch sowas wie //{{AFX_MSG... kommen. Da drunter und vor //}}AFX_MSG sollte es richtig sein.



  • danke, da hatte ich es ja drinne, aber dann kommt folgende Fehlermeldung:
    *
    Starfenster.cpp: Überladene Member Funktion ´struct HBRUSH__(class CDC,class CWnd*, unsigned int) nicht in CStartfenster gefunden
    Siehe Deklaration von ´CStartfenster´*

    was bedeutet denn das?



  • Wenn du das im Header drin hast, brauchst du auch eine entsprechende Funktion in der dazugehörigen *.cpp
    Wenn deine Anwendung CStartfenster heisst, sollte das in CStartfenster.cpp etwa so aussehen:

    HBRUSH CStartfenster::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
    {
    	HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
    
    	// TODO: Attribute des Gerätekontexts hier ändern
    
    	switch(nCtlColor)
    	{
    		case CTLCOLOR_STATIC:	// für statische Textfelder
    			pDC->SetTextColor(RGB(255,0, 255));
    			pDC->SetBkColor(RGB(0, 125, 0));
    
    		case CTLCOLOR_DLG:		// für Dialog
    			return (HBRUSH) m_brush;
    
    		case CTLCOLOR_BTN:				// funktioniert NICHT ! (sollte eigentlich Buttons färben...)
    			return (HBRUSH) m_brush;
    
    		default:
    			return CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
    	}
    
    	// TODO: Anderen Pinsel zurückgeben, falls Standard nicht verwendet werden soll
    	return hbr;
    }
    


  • Öhm,... und damit es noch vollständiger wird 😃 such mal in der cpp nach

    BEGIN_MESSAGE_MAP(CStartfenster, CDialog)
    	//{{AFX_MSG_MAP(CStartfenster)
    	//}}AFX_MSG_MAP
    END_MESSAGE_MAP()
    

    Zwischen den Kommentaren muss noch

    ON_WM_CTLCOLOR()
    

    ergänzt werden.



  • wenn ich meines

    HBRUSH CStartfenster::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
    { 
        HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor); 
        pDC->SetTextColor(RGB(255,255,255)); 
        pDC->SetBkColor(RGB(255,0,0)); 
    
    return hbr; 
    }
    

    in Deinen Code umändere, kommt immer noch die Fehlermeldung:
    Starfenster.cpp: Überladene Member Funktion ´struct HBRUSH__(class CDC*,class CWnd*, unsigned int) nicht in CStartfenster gefunden
    Siehe Deklaration von ´CStartfenster´
    *

    das ON_WM_CTLCOLOR() ist auch drinne



  • Die Hintergrundfarben habe ich ja schon geändert, das ging im OnInitDialog. Und das klappte ja auch 😃
    Aber das jetzt, will einfach nicht



  • Mmmmhhhh,... blöd...

    Letzte Idee meinerseits:
    probier mal im Menü
    Erstellen -> Bereinigen
    und dann
    Erstellen -> Alles neu erstellen



  • keine Änderung, das hatte ich auch schon paarmal gemacht 😞



  • Mist, das Leben ist hart. Also überleg dir lieber genau, ob du später nicht einen vernünftigen Beruf erlernen willst. 😃



  • habe es jetzt in einem anderen Dialog probiert...

    und was ist da passiert 😕 😕 😕

    CParameter.cpp: Überladene Member Funktion ´struct HBRUSH__(class CDC,class CWnd*, unsigned int) nicht in CParameter gefunden

    Siehe Deklaration von ´CParameter´
    *

    😡 😡 😡

    wieso will das nicht, bitte hilfe, sonst verzweifel ich noch 😞



  • Beruf ist das nicht, nur Hobby, aber ich glaube so langsam gehe ich wieder zurück zur Sandburg 🕶 🤡 😋



  • Allerallerletzte Möglichkeit:
    hast du aus Versehen mehrere ähnliche Klassen und bist zufällig in der falschen ?
    Bei deiner Fehlermeldung fehlt z.B. das t in Startfenster:
    Starfenster.cpp: Überladene...
    (der eben genannte Punkt fällt nach deinen letzten Postings wohl aus...)
    Weiter oben hattest du mal eine Deklaration gepostet, wo * pWnd nach CWnd gefehlt hat:
    afx_msg HBRUSH OnCtlColor(CDC* pDC,CWnd, UINT nCtlColor);
    Soetwas könnte es natürlich auch sein -> Schreibfehler

    [edit]
    Überladene Member Funktion ...
    deutet oft darauf hin, das die Parameter in *.h und *.cpp nicht genau überein stimmen.
    [/edit]



  • danke isabeau,
    war wahrscheinlich schon müde 😃

    hatte wirklich rechtschreibfehler drinne...

    Aber meine Button Farbe ändert sich nicht. Static und Edit und Textfarbe und Dialog alles ok, aber Buttons no way 😕


Anmelden zum Antworten