Ich erstelle eine grundlegende GUI mit der Windows-API, und ich bin auf ein Problem gestoßen. Es beginnt mit einem Hauptfenster, das mit einer benutzerdefinierten Hintergrundfarbe geöffnet wird, die ich (RGB(230,230,230))
einstelle. Es zeigt dann Text in der oberen linken Ecke mit dem statischen Steuerelement an.Statische Steuerelementhintergrundfarbe mit C++
settingstext = CreateWindow("STATIC",
"SETTINGS",
SS_LEFT | WS_CHILD,
12,
20,
100,
20,
hwnd,
NULL,
proginstance,
NULL);
ShowWindow(settingstext, 1);
Dies funktioniert, aber wenn der Text angezeigt wird brauche ich einen Weg, um den Hintergrund der es zu ändern, um das Hauptfenster passen oder aber es sieht aus wie es nicht in sich mischen.
Meine Frage ist, wie mache ich das? Ich benutze derzeit die Methode unten und es funktioniert, aber ich wollte wissen, gibt es eine Möglichkeit, die Hintergrundfarbe irgendwie gleich nach der CreateWindow
-Funktion für die statische Steuerung fest, ohne Systemfarben zu ändern, und es nur für diesen gelten Kontrolle und nicht alles, was die 10 Nachricht sendet. Ich habe experimentiert mit der Verwendung der GetDC
Funktion und SetBkColor
Funktion außerhalb der Nachrichtenschleife, aber nichts funktioniert.
case WM_CTLCOLORSTATIC:
{
HDC hdcStatic = (HDC) wParam;
SetTextColor(hdcStatic, RGB(0,0,0));
SetBkColor(hdcStatic, RGB(230,230,230));
return (INT_PTR)CreateSolidBrush(RGB(230,230,230));
}
Ich möchte, dies zu tun, weil ...
- Ich will nicht meine Nachrichtenschleife mit Funktionen füllen, dass jedes Mal, wenn die Fenster repaints genannt werden müssen.
- Lassen Sie die Änderungen nur für diese statische Steuerung gelten.
Ich wäre sehr dankbar für jede Hilfe, die zur Verfügung gestellt werden könnte, zumindest wies mich in die richtige Richtung, danke.
Sie können den Effekt des 'WM_CTLCOLORSTATIC'-Codes auf nur Ihr statisches Steuerelement beschränken, indem Sie Folgendes überprüfen:' (HWND) lParam == settingstext'. Es gibt ein Problem mit Ihrem Beispiel, dass alle von Ihnen erstellten Pinsel niemals gelöscht werden. –