Statischen Text färben?



  • FERNman schrieb:

    Ja, danke, aber das hilft mir nicht weiter, Codeverschönerung kann ich wenns funzt auch noch machen...

    Wenn du den Müll wegräumst, siehst du die Fehler besser.

    Und noch eins:
    = ist eine Zuweisung
    == ist ein Vergleich



  • MFK schrieb:

    = ist eine Zuweisung
    == ist ein Vergleich

    Ist mir durchaus bewusst, aber du beziehst das sicher auf einen Fehler, wo liegt er ? 😃

    MFG
    FERNman



  • Hallo,

    ich beziehe mich auf folgenden Code:

    //PopupProc
    if (HIWORD(wParam) == CBN_SELCHANGE)
                           {
                               int ItemIndex = SendMessage((HWND)lParam, (UINT)CB_GETCURSEL,
                                   (WPARAM)0, (LPARAM)0);
    
                               (TCHAR)SendMessage((HWND)lParam, (UINT)CB_GETLBTEXT,
                                   (WPARAM)ItemIndex, (LPARAM)ListItem);
    
                               if (h = ListCheck(wParam, lParam, ListItem, hPopup, ID, h)) return h;
    
                           }
    

    Hier übergibst du den falschen Wert als HDC, denn in wParam befindet sich doch jetzt nicht der HDC sondern (wie man an der if-Abfrage sieht) als HIWORD CBN_SELCHANGE. Du mußt das HDC von deinem Control übergeben!
    Jede WinAPI-Message hat unterschiedliche Werte in de Parametern 'wParam' und 'lParam' stehen (darum sind diese eben auch so allgemein gehalten). Im einzelnen mußt du dann in der MSDN Doku zu der Message nachschauen!



  • Ja, danke, klingt recht logisch... Aber wie soll ich das denn sonst machen, ich kann den Code ja schlecht in WM_CTLCOLORSTATIC oder ähnliches hineinfetzen 😃

    MFG
    FERNman



  • FERNman schrieb:

    Ist mir durchaus bewusst, aber du beziehst das sicher auf einen Fehler, wo liegt er ? 😃

    Beispielsweise hier:

    FERNman schrieb:

    if (hCtl = Stunde[ID])

    Das sollte vermutlich ein Vergleich sein, keine Zuweisung.



  • Nope, muss eine Zuweisung sein, da ein Vergleich hier komplett unsinnig wäre. Ich weiß dass man das auch einfach nacheinander Zeile für Zeile machen kann, aber so sieht der Code übersichtlicher aus.

    MFG
    FERNman



  • Dann erkläre doch mal in Worten, was die Funktion machen soll.

    Oder gehe einfach mal mit dem Debugger Zeile für Zeile durch deinen Code...



  • Also, ich habe einen Stundenplan mit 45 Stunden. Wenn man dann bei einer dieser Stunden auf bearbeiten klickt, dann bemerkt der Computer die ID und ein Popup öffnet sich. In diesem kann man dann Stunde, Lehrer und Raum bearbeiten und, in einer Combobox, die Farbe auswählen. ListCheck ist dafür verantwortlich, herauszufinden, welche Auswahl getroffen wurde, und je nachdem welche, die Richtig Farbe auszuwählen. Die Funktion Färben färbt dann die Drei Labels Fach, Lehrer und Raum mit der Ausgewählten Farbe.

    Hoffe ihr kennt euch nun aus,

    MFG
    FERNman



  • Th69 schrieb:

    Oder gehe einfach mal mit dem Debugger Zeile für Zeile durch deinen Code...

    Habe ich schon oft gemacht, ich weiß aber nicht was das bringen soll (In meinem Fall)

    MFG
    FERNman



  • Dann schau dir noch mal diese Funktion an:

    LRESULT Blau(HDC hdc, HWND hCtl, int ID)
    {
        if (hCtl = Stunde[ID])
        {
            SetBkColor(hdc, fBlau);
        }
        if (hCtl = Raum[ID])
        {
            SetBkColor(hdc, fBlau);
        }
        if (hCtl = Lehrer[ID])
        {
            SetBkColor(hdc, fBlau);
        }
        return (LRESULT)GetStockObject(HOLLOW_BRUSH);
    }
    

    Frage: Wie oft wird die BackgroundColor gesetzt? Und welchen Sinn soll das jetzt machen???

    Ich bleibe dabei, daß dir die Grundlagen von C fehlen, d.h. insbesondere der Umgang mit Funktionen (und Parametern etc.)...

    Und daher ist die WinAPI noch etwas zu früh für dich.



  • Ok, wenn du meinst, ich glaube es kann gut sein!

    Aber ich möchte dass trotzdem noch schaffen, und diese Funktion:

    LRESULT Standartfarben(HDC hdc, HWND hCtl) 
    { 
        if (hCtl = hText) 
        { 
            SetBkColor(hdc, fWeiß); 
            return (LRESULT)GetStockObject(HOLLOW_BRUSH); 
        } 
        return 0; 
    }
    

    Funktioniert ja! Wie würdest du dass lösen? Bitte hilf mir nur mit einer Funktion, dann bist du mich los

    MFG
    FERNman



  • Hallo nochmals,

    "Funktioniert ja!" ist eine sehr subjektive Wahrnehmung 😉
    Denn in deinem Fall bedeutet es nicht, daß der Code auch so sinnvoll ist. Denn schon dort macht die if-Abfrage (bzw. sollte ich besser if-Zuweisung schreiben) keinen wirklichen Sinn:
    Du übergibst dort einen Parameter 'hCtl', den du dann als erstes gleich wieder überschreibst mit der globalen Variablen 'hText' und wenn dieser Wert ungleich null ist, dann führst du den Block aus (in der du wiederum gar nicht die Variable 'hCtl' benutzt 😕 ).


Anmelden zum Antworten