Farbe hinter Text neben Checkbox
-
Also es sieht so aus: Ich hab ein Windows-Fenster mit weißem Hintergrund erstellt und nun möchte ich eine Checkbox auf diesem Fenster anzeigen. Ich krieg das auch schon so hin mit der Checkbox und man kann den Haken auch wegmachen und so nur ist hinter dem Text, der neben der Checkbox steht, immer noch eine gräuliche Farbe. Das sieht schon etwas komisch aus weil ja sonst das ganze Fenster weiß ist. Also ist jetzt meine Frage, wie ich die Farbe hinter dem Text auch weiß mache?
-
Such mal nach WM_CTLCOLORBTN
und setzt den Zeichenmodus vorm Return auf TRANSPARENT
MfG CodeFinder
-
danke aber es klappt irgendwie einfach nicht. ich hab des WM_CTLCOLORBTN und dann SetBkMode() verwendet aber es geht halt net. ich muss auch noch sagen dass ich erst seit kurzem WinApi mach und mich deshalb noch nicht so gut auskenn. hier also der code:
... static HBRUSH hBrush; ... case WM_CTLCOLORBTN: { hBrush = (HBRUSH)TRANSPARENT; SetBkMode ((HDC)wParam, TRANSPARENT); return (LONG) hBrush; }
... aber die hintergrundfarbe bleibt trotzdem grau. übrigens ist das nicht die einzige variante die ich verwendet hab aber alle anderen haben auch nicht funktioniert...
-
hmm also das was du gepostet hast, kann nicht funktionieren ;), denn:
hBrush = (HBRUSH)TRANSPARENT; /* HBRUSH: typenloser Zeiger (sozusagen void*) siehe Definition: */ #define TRANSPARENT 1 typedef void *HANDLE DECLARE_HANDLE(HBRUSH) /* TRANSPARENT: numerische Konstante (sozusagen int) siehe Definition: */ #define TRANSPARENT 1 */
eher so (nicht getestet):
static HBRUSH hbBkgnd; // ... case WM_CREATE: // ... hbBkgnd = CreateSolidBrush(RGB(0,0,0)); // Hier die Farbe des // Hintergrunds // ... break; // ... case WM_CTLCOLORBTN: if((HWND)lParam == hcbxCheckBox) // hcbxCheckBox ist Handle zu deiner { // Checkbox SetBkMode((HDC)wParam, TRANSPARENT); return ((HRESULT)hbBkgnd); } // ... break; // ... case WM_DESTROY: // ... DeleteObject(hbBkgnd); // GDI-CleanUp // ... break;
Hoffe konnte helfen... ach ja, wenn du die Farbe dynamisch ändern wills, musst du unter WM_CTLCOLORBTN DeleteObject() aufrufen und anschließend n neuen Brush erstellen. Das ist zwar alles nur 'gefakte'-Transparenz, aber anders wüsst ichs auch nicht
MfG CodeFinder
-
Danke für deine Antworten, aber es geht leider einfach nicht. Aber ich habs jetzt mit einer anderen Methode gelöst: Ich hab die Checkbox-Größe auf 12x12 (die Größe von der Box selbst) gesetzt und den Text nicht gleich bei CreateWindow() reingeschrieben sondern erst bei WM_PAINT und dann halt mit den richtigen Koordinaten danebengesetzt. So funktionierts jetzt auch so wies sollte. Aber trotzdem danke für deine Mühen