Einfachste Grafik
-
-
Hi,ich bin noch blutiger Anfänger,und kann noch nicht sehr gut mit C++ umgehen,da wollte ich fragen,wie ich am einfachsten eine Linie auf den Bildschirm zeichnen kann. Am besten wäre es,das ganze nicht auf einem Fenster (also so einem Teil mit Knöpfen ,ich weiß nicht wie das bei C++ heißt,bei VB heißt es Form),sondern in sowas wie einer DOS-Box.Ist das sehr kompliziert?
Kann mir jemand ein Code-Beispiel dafür geben?Jan
-
MFC: MoveTo(...), LineTo(...)
-
Ok,soweit war ich auch schon,aber in welchen Headern sind die Funktionen drin?Muss man dazu irgendwelche Klassen initialisieren? Mir hat irgendjemand mal was mit CDC oder so gesagt.
Jan
-
Na, also wird doch! Benutze doch den Assistenten, der kümmert sich um Header.
Du mußt einen Device context schaffen:CClientDC dc(this);
dc.MoveTo(...);
dc.LineTo(...);am besten in OnDraw. Dort hast Du einen Pointer auf dc:
pdc->MoveTo(...);
pdc->LineTo(...);Probiers doch mal.
siehe auch www.henkessoft3000.de
-
Wie bei OnDraw?
Dann mus doch erst was da sein,um gezeichnet zu werden?
Ich habe bis jetzt ein Programm (Win32 -Anwendung),so erstelt,dass
bereits "WinAPIEntry" oder so ähnlich da steht und dann ein Komentar
"zu erledigen..." kommt.
Wie kommt man an das OnDraw ran?
pdc soll bedeutet dann wohl Pointer (wegen dem p) auf dc,oder?
-
Hallo mein Freund,
Du erstellst offenbar ein Programm mittels WinAPI, also ohne MFC. Dann sieht das mit der GDI-Programmierung z.B. wie folgt aus:#include <windows.h> LRESULT CALLBACK WndProc( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam ) { HDC hdc; PAINTSTRUCT ps; static HPEN MyPen0, MyPen1, MyPen2, MyPen3, MyPen4; int xStart = 200; int yStart = 100; int xEnd = 100; int yEnd = 300; switch( message ) { case WM_CREATE: MyPen0 = CreatePen( PS_DASHDOTDOT,0,RGB(255,127,0) ); // orangebraun MyPen1 = CreatePen( PS_SOLID,3,RGB(255,0,0) ); // rot MyPen2 = CreatePen( PS_DASHDOT,0,RGB(0,255,0) ); // grün MyPen3 = CreatePen( PS_DOT,0,RGB(0,0,255) ); // blau MyPen4 = CreatePen( PS_DASHDOT,0,RGB(0,255,255) ); // blau-grün return 0; case WM_PAINT: hdc = BeginPaint(hwnd, &ps); // Gerätekontext SelectObject( hdc,MyPen0 ); Rectangle( hdc,100,100,600,400 ); /* xLeft, yTop, xRight, yBottom */ SelectObject( hdc,MyPen3 ); Ellipse( hdc,100,100,600,400 ); /* wie Rectangle */ SelectObject(hdc,MyPen2); MoveToEx( hdc,((600-100)/2)+100,((400-100)/2)+100,NULL ); // Mitte LineTo( hdc,xStart,yStart ); SelectObject( hdc,MyPen4 ); MoveToEx( hdc,((600-100)/2)+100,((400-100)/2)+100,NULL ); // Mitte LineTo( hdc,xEnd,yEnd ); SelectObject( hdc,MyPen1 ); Arc( hdc,100,100,600,400,xStart,yStart,xEnd,yEnd ); EndPaint (hwnd, &ps); return 0; case WM_DESTROY: DeleteObject( MyPen0 ); DeleteObject( MyPen1 ); DeleteObject( MyPen2 ); DeleteObject( MyPen3 ); DeleteObject( MyPen4 ); PostQuitMessage(0); return 0; } return DefWindowProc( hwnd, message, wParam, lParam ); } int WINAPI WinMain( HINSTANCE hI, HINSTANCE hPrI, PSTR szCmdLine, int iCmdShow ) { static TCHAR szAppName[] = TEXT("Fensterklasse"); HWND hwnd; WNDCLASS wc; wc.style = CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS; wc.lpfnWndProc = WndProc; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance = hI; wc.hIcon = LoadIcon (NULL, IDI_WINLOGO); wc.hCursor = LoadCursor (NULL, IDC_ARROW); wc.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH); wc.lpszMenuName = NULL; wc.lpszClassName = szAppName; RegisterClass (&wc); hwnd = CreateWindow (szAppName, TEXT("Arc verstehen"), WS_OVERLAPPEDWINDOW, 0, 0, 700, 500, NULL, NULL, hI, NULL); ShowWindow ( hwnd, iCmdShow ); UpdateWindow( hwnd); MSG msg; while( GetMessage( &msg, NULL, 0, 0) ) { TranslateMessage( &msg ); DispatchMessage ( &msg ); } return msg.wParam; }Hiermit kannst Du die Parameter der Funktion Arc(...) grafisch verstehen. Zum Bewegen/Linienziehen verwendet man hier die Funktionen MoveToEx und LineTo.
[ Dieser Beitrag wurde am 01.11.2002 um 08:31 Uhr von Erhard Henkes editiert. ]
-
Zum Verständnis der WinAPI-Programmierung würde ich hier beginnen:
Denn man sollte zunächst die Grundstrukturen verstehen. Es ist aber sehr löblich, sich mit WinAPI zu beschäftigen, denn selbst unter .NET und C# verwendet man WinAPI selbstverständlich weiter.

-
Wow,danke!