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

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]