Kontrolliert pinseln



  • case WM_CTLCOLORSTATIC:
    {
       SetBkMode((HDC)wParam,TRANSPARENT); // Texthintergrund auf transparent setzen 
       SetTextColor((HDC)wParam,RGB(255,0,0)); // Textfarbe auf Weiss setzen 
       return (long)CreateSolidBrush(TRANSPARENT); // Hintergrundfarbe auf schwarz setzen
    }
    break;
    

    keine ahnung, wo ich diesen code gefunden habe, aber er funktioniert (leider...). problem dabei is, dass er jedes static vollpinselt und nicht nur ein gewolltes. wie kann ich nun nur das eine färben?

    mit ner if-then-else hab ichs versucht, aber ich bekomme nicht das DC des zu färbenden objekts...

    *narv*



  • das hab ich inzwischen soweit gelöst:

    case WM_CTLCOLORSTATIC:
    {
      if(GetDlgItem(hwnd, IDC_SEATS) == (HWND)lParam)
      {
        SetBkMode((HDC)wParam,TRANSPARENT); // Texthintergrund auf transparent setzen 
        SetTextColor((HDC)wParam,RGB(255,0,0)); // Textfarbe auf Weiss setzen 
        return (long)CreateSolidBrush(RGB(0,0,0)); // Hintergrundfarbe auf schwarz setzen
      }else
        return false;
    }
    

    aber mich nervt noch, dass das objekt IDC_SEATS immernoch nen schwarzen hintergrund hat. wie kann ich den wegbekommen?



  • Versuch's mal mit folgendem Code:

    if(GetDlgCtrlID((HWND)lParam) == IDC_SEATS) { ... }
    

    kommt er denn in den if-Block?



  • // Beides funktioniert:
    if(GetDlgItem(hwnd, IDC_SEATS) == (HWND)lParam){ ... ]
    if(GetDlgCtrlID((HWND)lParam) == IDC_SEATS) { ... }
    

    beides funktioniert einwandfrei, aber ich bekomme dabei immernoch einen schwarzen hintergrund, der eigentlich transparent sein sollte. sprich, ich will nur die vordergrundfarbe ändern.

    bin mir sicher, dass es mit diesem teil zusammenhängt:

    return (long)CreateSolidBrush(RGB(0,0,0));
    

    aber ich weiß nicht, was ich anstatt dessen benutzen soll.



  • Wenn der erste Code funktioniert hatte - warum machst du es dann nicht so wie dort?



  • also was ich in meiner sdk lesen konnte, dass der eine hintergrundfarbe setzt. Ob damit auch transparent geht? Vielleicht gibts einen bestimmten rgb-wert der dann transparent implementiert wird ... so war das früher bei den cs-logos 🙂 (alte zeiten noch 😉



  • ja, habs schon mit TRANSPARENT versucht; geht aber nicht... ich nehm mal nen blauton, vielleicht gehts 😉

    @flenders

    eagle2k schrieb:

    das hab ich inzwischen soweit gelöst:

    [cpp]
    case WM_CTLCOLORSTATIC:
    {
    if(GetDlgItem(hwnd, IDC_SEATS) == (HWND)lParam)
    {

    SetBkMode((HDC)wParam,TRANSPARENT); // Texthintergrund auf transparent setzen
    SetTextColor((HDC)wParam,RGB(255,0,0)); // Textfarbe auf Weiss setzen
    return (long)CreateSolidBrush(RGB(0,0,0)); // Hintergrundfarbe auf schwarz setzen
    }else
    return false;

    }[/cpp]

    der unterschied zu dem anfänglichen code ist die if-then anweisung. das problem hab ich ja schon gelöst. fehlt nur noch das mitm hinergrund...



  • Ich hatte "CreateSolidBrush(TRANSPARENT);" gemeint - oder hatte das auch schon nicht funktioniert?
    Vielleicht hilft das: http://www.c-plusplus.net/forum/viewtopic.php?t=39366 (ist aber offiziell für Statics)



  • aha, das hat geholfen 🙂 hier der funktionierende code für das problem:

    [cpp]
    case WM_CTLCOLORSTATIC:
    {
    if(GetDlgCtrlID((HWND)lParam) == IDC_SEATS)
    {
    SetBkMode((HDC)wParam,TRANSPARENT); // Texthintergrund auf transparent setzen
    SetTextColor((HDC)wParam,RGB(255,0,0)); // Textfarbe auf Weiss setzen
    return (LRESULT)GetStockObject(NULL_BRUSH); //kein HBRUSH zurückgeben
    }else
    return false;
    }
    break;[/cpp]


Anmelden zum Antworten