Möchte mit Rectangle() nur Umrisse zeichnen - Aber BS_HOLLOW = Schwarz?
-
Äh.. ich bekomm es grad nicht hin, per GDI mit Rectangle() ein transparentes Rechteck zu zeichnen. Nur der Rand soll sichtbar sein.
Wie mache ich das? BS_HOLLOW funktioniert nicht, dann wird das Innere Schwarz!

-
Du musst einen NULL_BRUSH/HOLLOW_BRUSH verwenden.
-
Funktioniert leider auch nicht. Der Hintergrund ist dann weiterhin Schwarz!
-
Hast Du den Hintergrund denn auch wirklich vorhergezeichnet?
Zeig uns Code.Bei mir klappt das prima...
-
Wie, vorher gezeichnet?
Ich möchte einfach nur ein "leeres" Rechteck, also nur den Rahmen ohne Hintergrund, in einen Dialog zeichnen.
So als würde ich es manuell mit MoveToEx() und LineTo() machen.
-
Der Dialoghintergrund wird durch WM_ERASEBKGND vorher gezeichnet, aber evtl. werden danach ja dir Controls wieder drüber gezeichent.
Ein Dialoghintergrund ist nicht der "normale" Ort, dern man zum Zeichnen seiner aten auswählt

-
Also soll man auf den Dialoghintergrund nichts zeichnen? Wieso? Wo denn sonst hin?
Ich dachte, einfach in WM_PAINT GetDC(dialogHandle) und loszeichnen?!Ich möchte einfach nur einen Rahmen um einen Button herum zeichnen.
-
Ich würde immer eigene Controls bauen.
Wenn Du einen Rahmen willst gibt es genug Varianten:
GroupBox, Static Control mit allen möglichen Optionen...WM_PAINT & GetDC ist natürlich Quatsch, Ohne beginPaint & EndPaint kann man kein Fenster validieren und korrekt zeichnen.
Wie wäre es mit einem Tutorial...
-
BeginPaint & EndPaint rufe ich natürlich auch auf.
Eh, ich möchte nur einen Roten Rahmen um ein Control herum zeichnen, um es zu markieren.
Geht das jetzt nur mit LineTo() oder wie?
-
Das geht theoretischmit jeder Funktion die in dem DC des Dialoges zeichnet.
Nochmal: Zeig uns Code!
-
Das ergibt ein Rechteck mit rotem Rahmen und schwarzem Hintergrund, in einem Dialog mit standard WinXP Hintergrund (Grau, RGB 224 223 227):
case WM_PAINT: { HPEN penHandle = CreatePen(PS_SOLID, 1, RGB(255, 0, 0)); HBRUSH brushHandle = CreateSolidBrush(HOLLOW_BRUSH); PAINTSTRUCT paintStruct; HDC deviceContextHandle = BeginPaint(dialogHandle, &paintStruct); SelectObject(deviceContextHandle, penHandle); SelectObject(deviceContextHandle, brushHandle); Rectangle(deviceContextHandle, 10, 10, 30, 30); EndPaint(dialogHandle, &paintStruct); DeleteObject(penHandle); DeleteObject(brushHandle); break; }