HDC + Farben
-
Hi @ all !
Ich habe folgendes Problem: Hab mir ein HDC erstellt und mit AngleArc() ein paar Kreise zeichnen lassen. Jetzt würde ich aber gerne die Kreise in unterschiedlichen Farben zeichnen. Habe es mit SetDCColorBrush() versucht, jedoch wirft mir der Compiler immer die Meldung aus: "Nicht deklarieter Bezeichner", obwohl die gdi32.lib eingebunden ist. Gibt es vielleicht noch andere Mittel und Wege mit einem anderen Brush oder Pen zu zeichnen ?THX for help !
HomeyHome
-
CreatePen / CreateSolidBrush -> SelectObject
-
Also der Code sieht wie folgt aus:
case WM_PAINT: HDC hDC; PAINTSTRUCT ps; hDC = BeginPaint(hWnd, &ps); { brush= CreateSolidBrush(RGB(0, 255, 0)); SelectObject(hDC, brush); MoveToEx(hDC, 0, 200, NULL); LineTo(hDC,410,200); } EndPaint(hWnd, &ps); break;Also brush hab ich erstmal Global Deklariert(als HBRUSH).
Nur irgendwie bleibt die Linie immer noch schwarz
Habe auch zum Test den Hintergrund schwarz gemacht, um zu gucken ob ich nicht was an den Augen habe 
-
Brush ist ja für die Füllfläche - wenn du die Linienfarbe ändern willst brauchst du CreatePen. Außerdem solltest du nach Möglichkeit nich jedesmal einen neuen Brush erzeugen - und wichtig: auch wieder freigeben

-
Also so etwa:
static HPEN hPen; HPEN hTempPen; HDC hDC; PAINTSTRUCT ps; switch(...) { case WM_CREATE: hPen = CreatePen(PS_SOLID,0,RGB(0, 255, 0)); break; case WM_PAINT: hDC = BeginPaint(hWnd, &ps); hTempPen = SelectObject(hDC, hPen); MoveToEx(hDC, 0, 200, NULL); LineTo(hDC,410,200); SelectObject(hDC, hTempPen); EndPaint(hWnd, &ps); break; case WM_DESTROY: DeleteObject(hPen); break; [...] }Wo und wie du deine Variablen verwalten willst, das bleibt natürlich dir überlassen

-
THX
Es funktioniert und mal wieder was dazu gelernt. Dann noch einen guten Vatertag
-
Jetzt hab ich auch noch selbst vergessen, dass DeleteObject aufzurufen - habe den Code jetzt nochmal korrigiert!
-
Wie sieht das den mit dem Texthinterground aus ? Also ich lasse in einem Rechteck (Rect) mit TextOut() einen Textausgeben. Der Hintergrund des Textes ist dann weiß, würde den gerne aber in der Hintergrundfabre des Rechteckes haben. Geht das dann auch mit SelectObject() ?
-
Nein, das geht mit SetBkMode(hDC,TRANSPARENT); - du kannst natürlich auch mit SetBkColor eine bestimmte Farbe setzen.