|
JLI Spieleprogrammierung
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
v1vec Mini JLI'ler
Anmeldedatum: 18.11.2004 Beiträge: 19
Medaillen: Keine
|
Verfasst am: 18.11.2004, 17:23 Titel: GDI und Hintergrundfarbe |
|
|
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 |
|
|
AFE-GmdG JLI MVP
Alter: 45 Anmeldedatum: 19.07.2002 Beiträge: 1374 Wohnort: Irgendwo im Universum... Medaillen: Keine
|
Verfasst am: 19.11.2004, 12:02 Titel: |
|
|
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 |
|
|
v1vec Mini JLI'ler
Anmeldedatum: 18.11.2004 Beiträge: 19
Medaillen: Keine
|
Verfasst am: 19.11.2004, 15:11 Titel: |
|
|
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 |
|
|
The Lord of Programming Living Legend
Alter: 37 Anmeldedatum: 14.03.2003 Beiträge: 3122
Medaillen: Keine
|
Verfasst am: 19.11.2004, 15:37 Titel: |
|
|
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 _________________ 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 |
|
|
AFE-GmdG JLI MVP
Alter: 45 Anmeldedatum: 19.07.2002 Beiträge: 1374 Wohnort: Irgendwo im Universum... Medaillen: Keine
|
Verfasst am: 20.11.2004, 23:27 Titel: |
|
|
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 |
|
|
v1vec Mini JLI'ler
Anmeldedatum: 18.11.2004 Beiträge: 19
Medaillen: Keine
|
Verfasst am: 21.11.2004, 19:35 Titel: |
|
|
Danke werde das gleich ma ausprobieren.
mfg v1vec |
|
Nach oben |
|
|
v1vec Mini JLI'ler
Anmeldedatum: 18.11.2004 Beiträge: 19
Medaillen: Keine
|
Verfasst am: 21.11.2004, 20:05 Titel: |
|
|
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 |
|
|
|
|
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
|