JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=d06a14394a7075fa7c08f308f58e9d71Medaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

GDI und Hintergrundfarbe

 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Grafik und Sound
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
v1vec
Mini JLI'ler



Anmeldedatum: 18.11.2004
Beiträge: 19

Medaillen: Keine

BeitragVerfasst am: 18.11.2004, 17:23    Titel: GDI und Hintergrundfarbe Antworten mit Zitat

Also, ich will ein GDI Programm schreiben, bei dem der Hintergrund schwarz ist, und in dem ich z. B. weiße Kreise malen kann(mit Ellipse() oder so). Wenn ich aber die Fensterhintergrundfarbe auf schwarz stelle und einen Kreis male wird auch das innere des Kreises weiß( auch bei anderer Kreisfarbe).

Wie lässt sich das ändern?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
AFE-GmdG
JLI MVP
JLI MVP


Alter: 45
Anmeldedatum: 19.07.2002
Beiträge: 1374
Wohnort: Irgendwo im Universum...
Medaillen: Keine

BeitragVerfasst am: 19.11.2004, 12:02    Titel: Antworten mit Zitat

In der Fensterklasse wird die Hintergrundfarbe festgelegt.
Das ist die Zeile mit (HBRUSH)GetStockObject(WHITE_BRUSH);...
_________________
CPP:
float o=0.075,h=1.5,T,r,O,l,I;int _,L=80,s=3200;main(){for(;s%L||
(h-=o,T= -2),s;4 -(r=O*O)<(l=I*I)|++ _==L&&write(1,(--s%L?_<(L)?--_
%6:6:7)+\"World! \\n\",1)&&(O=I=l=_=r=0,T+=o /2))O=I*2*O+h,I=l+T-r;}
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
v1vec
Mini JLI'ler



Anmeldedatum: 18.11.2004
Beiträge: 19

Medaillen: Keine

BeitragVerfasst am: 19.11.2004, 15:11    Titel: Antworten mit Zitat

Vieleicht war die Frage etwas unklar gestellt.
Aber wenn ich die Hintergrundfarbe auf schwarz festlege(BLACK_BRUSH)
und einen roten Kreis male(Ellipse()) wird das innere des Kreises weiß,
statt schwarz zu bleiben.

Danke trozdem MFG v1vec
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
The Lord of Programming
Living Legend


Alter: 37
Anmeldedatum: 14.03.2003
Beiträge: 3122

Medaillen: Keine

BeitragVerfasst am: 19.11.2004, 15:37    Titel: Antworten mit Zitat

Ellipse() zeichnet AFAIK eben nur einen ausgefüllten Kreis(wie bei einem Rechteck). Wenn da auch nur der Umriss möglich ist, dann steht das vielleicht in der MSDN Wink
_________________
www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console


Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
AFE-GmdG
JLI MVP
JLI MVP


Alter: 45
Anmeldedatum: 19.07.2002
Beiträge: 1374
Wohnort: Irgendwo im Universum...
Medaillen: Keine

BeitragVerfasst am: 20.11.2004, 23:27    Titel: Antworten mit Zitat

Du musst dem DC einen Brush mitgeben, mit dem er zeichnen soll. Dieser Brush ist standardmässig Weiss - willst du einen Schwarzen (oder in deinem Fall vielleicht besser einen Transparenten) Brush, musst du diesen vorher anlegen und per SelectObject an das DeviceContext binden.
Vergesse aber nicht, den "alten" Brush zwischenzuspeichern und deinen neu erstellten wieder rauszunehmen, bevor du das DC wieder freigibst.
Im Klartext:
Code:

HBRUSH AlterBrush;
HBRUSH TransparenterBrush=CreateBrush(...);
AlterBrush=SelectObject(hDC, TransparenterBrush);
Male'NKreisfunktion(); // Bin nur zu Faul in der MSDN nach den genauen Parametern zu suchen
SelectObject(hDC, AlterBrush);
ReleaseDC(hDC); // oder EndPaint - je nachdem, wo du die Zeichenroutine hast...

HTH
_________________
CPP:
float o=0.075,h=1.5,T,r,O,l,I;int _,L=80,s=3200;main(){for(;s%L||
(h-=o,T= -2),s;4 -(r=O*O)<(l=I*I)|++ _==L&&write(1,(--s%L?_<(L)?--_
%6:6:7)+\"World! \\n\",1)&&(O=I=l=_=r=0,T+=o /2))O=I*2*O+h,I=l+T-r;}
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
v1vec
Mini JLI'ler



Anmeldedatum: 18.11.2004
Beiträge: 19

Medaillen: Keine

BeitragVerfasst am: 21.11.2004, 19:35    Titel: Antworten mit Zitat

Danke werde das gleich ma ausprobieren.
mfg v1vec
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
v1vec
Mini JLI'ler



Anmeldedatum: 18.11.2004
Beiträge: 19

Medaillen: Keine

BeitragVerfasst am: 21.11.2004, 20:05    Titel: Antworten mit Zitat

Nach einigen MSDN Suchen hab ich es hingekriegt.

Dnke nochmals.

Für andere Intressierte hab ich den Quellcode angehengt.
Code:
#include <windows.h>

HWND CreateMainWindow(HINSTANCE hInstance);

LRESULT CALLBACK MessageHandler(HWND hwnd,
                        UINT msg,
                        WPARAM wParam,
                        LPARAM lParam);

HWND hWnd = 0;

int WINAPI WinMain(HINSTANCE hInstance,
               HINSTANCE hPrevInstance,
               LPSTR lpCmdLine,
               int nCmdShow)
{
   hWnd = CreateMainWindow(hInstance);

   if(0 == hWnd)
   {
      MessageBox(0,"Fenster konnte nicht erzeugt werden.",
         "Fehler",MB_OK);
      return 0;
   }

   MSG msg;

   while(GetMessage(&msg,NULL,0,0))
   {
      TranslateMessage(&msg);
      DispatchMessage(&msg);
   }

   return 0;
}

HWND CreateMainWindow(HINSTANCE hInstance)
{
   WNDCLASSEX wndClass = {
         sizeof(WNDCLASSEX),
         CS_DBLCLKS | CS_OWNDC |
         CS_HREDRAW | CS_VREDRAW,
         MessageHandler,
         0,
         0,
         hInstance,
         LoadIcon(NULL,IDI_WINLOGO),
         LoadCursor(NULL,IDC_ARROW),
         (HBRUSH)GetStockObject(BLACK_BRUSH),
         NULL,
         "WindowClass",
         LoadIcon(NULL, IDI_WINLOGO)
   };

   RegisterClassEx(&wndClass);

   return CreateWindowEx(
      NULL,
      "WindowClass",
      "b00n 2 n00b",
      WS_OVERLAPPEDWINDOW |
      WS_VISIBLE,
      300, 300,
      246, 228,
      NULL,
      NULL,
      hInstance,
      NULL);
}

LRESULT CALLBACK MessageHandler(HWND hWnd, UINT msg,
                        WPARAM wParam, LPARAM lParam)
{
   switch(msg)
   {
      case WM_DESTROY:
            PostQuitMessage(0);
            return 0;
         break;
      case WM_PAINT:
            PAINTSTRUCT ps;
            HDC hDC;

            hDC = BeginPaint(hWnd ,&ps);

            SetBkMode(hDC,RGB(0,0,0));

            HPEN PenWhite = CreatePen(PS_SOLID,3,RGB(222,111,111));

            SelectObject(hDC,PenWhite);

            const tagLOGBRUSH LogBrush = {BS_NULL};

            HBRUSH BLACK = CreateBrushIndirect(&LogBrush);

            SelectObject(hDC,BLACK);

            SetTextColor(hDC,RGB(111,222,111));

            Ellipse(hDC,20,20,216,178);

            for(int i=0;i<200;i+=20)
            {
               TextOut(hDC,i,i,"Hallo PG",8);
            }
            
            
            DeleteObject(PenWhite);

            EndPaint(hWnd,&ps);
            return 0;
         break;
   }

   return (DefWindowProc(hWnd, msg, wParam, lParam));
}
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Grafik und Sound Alle Zeiten sind GMT
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de

Impressum