WM_CTLCOLOR



  • Hi zusammen ich hab bisher immer WM_CTLCOLOR überschrieben um Hintergrund und Editfelder zu färben, so wie um die Schriftfarbe zu ändern. Jetzt habe ich einen Dialog erstellt, den ich aus meinem Recordview aufrufe. Will ich jetzt hier oben beschriebenes machen, klappt das nicht! Ich geh auf den Klassenassi wähl in den Messagemaps den Dialog und WM_CTLCOLOR aus (wie ich es immer gemacht habe!) Doch ich bekomm hier immer folgenden Fehler!:

    error LNK2001: unresolved external symbol "public: struct HBRUSH__ * __thiscall CDialog::OnCtlColor(class CDC *,class CWnd *,unsigned int)" (?OnCtlColor@CDialog@@QAEPAUHBRUSH__@@PAVCDC@@PAVCWnd@@I@Z)
    Debug/ACRSQL.exe : fatal error LNK1120: 1 unresolved externals

    Das kann doch gar nicht sein! Geht das in Dialogen anders wie in Views?



  • Der Fehlermeldung nach fehlt der Funktionsrumpf. Ist der da? 🙂



  • Funktionen sehen wie folgt aus:

    //die Create um meine Variable m_brush mit den RGB zu zu weisen
    BOOL CDetailsDlg::Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext) 
    {
    	m_brush.CreateSolidBrush(RGB(255,255,255));
    
    	return CDialog::Create(IDD, pParentWnd);
    }
    
    // Und hier sollte eigentlich die Funktion ablaufen um meinen Hintergrund zu färben
    HBRUSH CDetailsDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
    {
    	HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
    
    	switch (nCtlColor) 
    	{ 
    		case CTLCOLOR_STATIC:  // Für alle Statics           
    			pDC->SetTextColor(RGB(0,0,0)); 
    			pDC->SetBkColor(RGB(255,255,255)); 
    
    		case CTLCOLOR_DLG:     // Für den Dialog             
    			return (HBRUSH)m_brush;
    	}
    	return hbr;
    }
    

    Was ist hier falsch?? 😕



  • Puh, so auf Anhieb sieht das gut aus.

    Ich habe sowas leider gar nicht in meinem Projekt, aber wenn du das per Assistent erstellt hast, dann sollte das gehen...
    Hast du schon ein RebuildAll gemacht? 🙂



  • jo hab ich schon des öfteren gemacht, ich hab das echt schon öfter gemacht, und wie gesagt in meinen Views hat das alles bisher genau so immer geklappt! Nur jetzt im Dialog nicht, aber warum es ist vom Typ CDialog abgeleitet. Jemand anders ne Idee?? 😕

    @Estartu_de P.S.:dass ich das noch erlebe, dass du keine Lösung weißt 😃



  • Tja, an dem Datumsproblem in Sql knobel ich immernoch. 😞



  • oh nein!
    An meinem Probelm??
    An was genau knobelst denn momentan? Was bekommst denn und was nicht? Vielleicht gibt es ja doch was, wo ich dir helfen kann 😉



  • Du hattest mich mit der Nase mitten in einen mehr oder minder selbstproduzierten "Misthaufen" gestoßen. Eine der vielgerühmten "Zeitbomben". Aber mehr "drüben". 🙂



  • @Polofreak
    Du solltest deine Signaturen nochmal prüfen. Die passen irgendwie nicht zusammen (CDialog <-> CDetailsDlg 😕 )

    struct HBRUSH__ * __thiscall CDialog::OnCtlColor(class CDC *,class CWnd *,unsigned int)
    
    HBRUSH CDetailsDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
    


  • öhm entweder ich versteh das nicht richtig oder ich kann nciht ganz zustimmen, also ich war eigentlich der Meinung dass ich in meiner OnCtlColor dieselbige meiner Baseclass aufrufen muss! und da meine DetailsDlg von CDialog abgeleitet ist müsste das hier doch passen, oder?

    HBRUSH CDetailsDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
    {
        HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
    

    Vielleicht hab ich dich aber auch falsch verstanden ich kann die bei Signaturen nicht folgen.

    P.S.: die hier genannten Zeilen sind Klassenassi-generierte Zeilen, was natürlich dennoch nicht heißen muss dass sie richtig sind!



  • hey groovemaster was ist los? Will doch nur ne kleine Antwort 😉


Anmelden zum Antworten