Edit Controls in Schleife färben



  • hm also das hilft auch nichts ich hab den debug den release die ncb die opt und die clw gelöscht, aber nichts desto trotz es geht immer noch nicht, dann hab ich ein neues Projekt angelegt und einen Dialog eingefügt der Klassenassi erstellt mir sogar die WM_CTLCOLOR Funktion automatisch (was er daheim nicht macht) und dann wieder Linker Fehler bei nem neu angelegten Projekt! Ich hab exakt das gleiche Spiel mal zuhause durchgezogen und es hat einwandfrei funktioniert, aber ich muss hier damit arbeiten, drum kann mir einer von euch sagen, wo da was fehlt? Kann ich ein ServicePack ziehen (ich habs 6er) oder liegt es vielleicht gar daran, oder sonst was keine Ahnung irgendwas. Oder woran könnte das denn liegen, da fehlt doch was oder???



  • ich hab mich da mal umgeschaut wo der Fehler liegen könnte. Ich bin in die DLGCORE.CPP in meinem Source Verzeichnis von meinem VC++. Da steht zumindest mal oben drin:

    // CDialog - Modeless and Modal
    
    BEGIN_MESSAGE_MAP(CDialog, CWnd)
    #ifndef _AFX_NO_GRAYDLG_SUPPORT
    	ON_WM_CTLCOLOR()
    #endif
    

    😮
    und weiter unten steht dann

    /////////////////////////////////////////////////////////////////////////////
    // Gray background support
    
    #ifndef _AFX_NO_GRAYDLG_SUPPORT
    HBRUSH CDialog::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
    {
    	// use helper in CWnd
    	return OnGrayCtlColor(pDC, pWnd, nCtlColor);
    }
    #endif //!_AFX_NO_GRAYDLG_SUPPORT
    

    Aber das passt do dann gar nicht zu der Fehlermeldung:

    DatumDlg.obj : 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
    Error executing link.exe.

    Kann mir denn wirklich keiner weiterhelfen? Es ist echt wichtig!



  • Hast du das schon mal in einen anderen Dialog eingebaut? Nur so zum Test? 🙂



  • was hab ich in nen anderen Dialog eingebaut? mein WM_CTLColor?

    s.o. ich habe schon ein neues Projekt angelegt und bekomm bei einer einfachen vom Assi erstellten ONWM_CTLCOLOR Linker Fehler s.o.

    😞



  • Okay, dann kann ich ja gleich mal gucken, ob mir das auch passiert.
    Hier erstellen nur gerade zwei VC das komplette Projekt... dauert etwas. 😉

    Houston? Wir haben ein Problem...
    Es kompiliert. 🙄

    BEGIN_MESSAGE_MAP(FehlerDlg, CDialog)
    	//{{AFX_MSG_MAP(FehlerDlg)
    	ON_WM_CTLCOLOR()
    	//}}AFX_MSG_MAP
    END_MESSAGE_MAP()
    
    HBRUSH FehlerDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
    {
    	HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
    
    	// TODO: Attribute des Gerätekontexts hier ändern
    
    	// TODO: Anderen Pinsel zurückgeben, falls Standard nicht verwendet werden soll
    	return hbr;
    }
    

    Und jetzt? 😕



  • da ist wohl irgendwas in irgend ner Datei von mir kaputt oder fehlt, denn er sagt ja er kann die struct HBRUSH nicht finden. Ich hab mal Spaßeshalber

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

    gemacht, da kann er zumindest mal Linken aber er kann halt nicht weil protected member function. Ich will auch nicht in de MFC rumpfuschen!
    Kannst du mal schauen welche Datei bei WM_CTLColor aufgerufen wird und mir die dann schicken? vermutlich sowas wie DLGCORE.cpp oder so. Denn es muss ja daran liegen. Darf ich mal ein Miniprojekt schicken das einfach nur einen Dialog öffnet, der dann CTL_COLOR macht? 😞



  • Klar, ich muss mich jetzt allerdings um die Besprechungsvorbereitungen kümmern - könnte etwas dauern.
    Aber ich vergesse das schon nicht. 🙂



  • Dankeschön, vielen Dank!
    Ist auch nur 27KB Danke Danke Danke!



  • Hat sich das verlaufen? 🤡



  • hab grad nochmal nachgeschaut ist erst 10:01 vom Server Raus hatten mal wieder Serverprobleme!
    Aber macht ja nichts, wir sind ja nur ein kleines Unternehmen! (*ironisch*)

    Dankeschön



  • Tja, jetzt gehts leider gleich los... ich melde mich, sobald ich dazu komme. 🙂



  • JO Danke!
    Hab jetzt noch was was ich statt der doofen Linker Fehler machen kann, hab ne Lösung für das Schichtenproblem (siehe COleDateTime allgemeines Problem)



  • --------------------Konfiguration: colortest - Win32 Debug--------------------
    Ressourcen werden kompiliert...
    Kompilierung läuft...
    StdAfx.cpp
    Kompilierung läuft...
    colortest.cpp
    colortestDoc.cpp
    colortestView.cpp
    MainFrm.cpp
    testcolDlg.cpp
    Generieren von Code...
    Linker-Vorgang läuft...

    colortest.exe - 0 Fehler, 0 Warnung(en)

    Ich habs nur ausgepackt und F7 gedrückt... 😕



  • oh man das hab ich vermutet! Bei mir kommen die Linkerfehler. Ich werd mal übers WE schauen wo mir meine WM_CTLCOLOR reinspringt und dann mal diese Datei von zuhause mitbringen und hoffen dass es dann weider geht, ich wünsche dir ein wunderschönes WE.

    UND VIELEN LIEBEN DNAK!



  • Du hast doch auch VC6 mit SP6? (Nur, dass es nicht daran liegt.)

    Du kannst die Datei nicht von zu Hause mitbringen. Jedenfalls nicht so ohne weiteres. 😞
    Du kannst ja nicht mal eben die MFC neu kompilieren. 🤡

    Da muss ne andere Lösung her. ⚠



  • VC6 SP6 JO!

    ja OK nur woher kommt die? (Die andere Lösung!?)
    aber vielleicht ist ja irgendwann ein File irgendwo verschwunden oder so kA wenn ich es dann unauffällig wieder rein schiebe, dann sollte es doch wieder tun, er findet dann plötzlich da wo er sucht wieder das was er will! (oder nciht?



  • Wenn dir das Cpp zu CDialog fehlen würde, dann hättest du das Problem nicht nur an der Stelle. 😉

    Einfachste Version ist, VC runter und wieder rauf (und wieder patchen). 😞

    Wenn das nicht fruchtet, dann schrei bei deinem Admin oder Projektleiter mal um Hilfe.

    Lass dich nicht irre machen, der Code ist ja okay - ist ja nicht dein Fehler. 🙂



  • OK ich denk ich werd das mal versuchen. Auch wenn es mir absolut nicht gefällt das VC++ runter zu werfen und danach wieder drauf zu hauen. So ist es doch zumindest mal ne Lösung 😞
    Werd mich dann nochmal melden wenn ich das gemacht habe.
    Vielen Dank



  • JUHU ich hba ne bessere Lösung! 😃

    Warum eigentlich nicht einfach so:

    HBRUSH CDetailsDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
    {
    //	HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);//kann ich ja einfach raus schmeißen, will ja eh weiß als BK	
    	HBRUSH hbr = CreateSolidBrush(RGB(255,255,255));
    

    Oder ist das nicht so schön? So geht es jedenfalls. Ich leg mir einfach mein eigenes HBRUSH an!



  • Es geht so? 😕

    Naja, achte trotzdem auf komische Effekte, denn wenn du die Basisklasse nicht aufrufst, könnte es sein, dass die Farben nicht mehr stimmen.


Anmelden zum Antworten