Posted By: maslone1
Example how to use GDI Grafix with lite-c Legacy Mode - 07/10/09 12:54
Here an Example how to use GDI Grafix with lite-c Legacy Mode.
I tooked this example from an C++ book:
a "smile" with gdi
Draw only a pixel in the window:
ohh and a GDI mouse-message code:
a gdi-text:
Maybe you can use it, maybe it helps you.....
cu
Marcel
I tooked this example from an C++ book:
a "smile" with gdi
Code:
#include <litec.h> //Lite-C legacy Mode #include <stdio.h> //Stanard C #include <windows.h> //Windows API #include <d3d9.h> //direct X 9 // Prototypen // Anwendungsfenster erzeugen HWND CreateMainWindow(HINSTANCE hInstance); //Callback Funktion zur Nachrichtenbehandlung LRESULT CALLBACK WindowFunc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam); // Das Fensterhandle HWND hWnd = 0; // Windows main-Funktion int WINAPI WinMain(HINSTANCE hInstance, // Handle der Programminstanz HINSTANCE hPrevInstance, // Handle der letzten Instanz LPSTR lpCmdLine, // Kommandozeile int nCmdShow) // Art wie das Fenster angezeigt werden soll { // Fenster erzeugen und Handle speichern hWnd = CreateMainWindow(hInstance); // Wenn der Rückgabewert 0 ist, ist ein Fehler aufgetreten if(0 == hWnd) { MessageBox(0,"Fehler","Fehler",MB_OK); return 0; } // Struktur, in der Informationen zur Nachricht gespeichert werden MSG msg; // Diese Schleife läuft bis die Nachricht WM_QUIT empfangen wird while(GetMessage(&msg,NULL,0,0)) { // Nachricht an die Callbackfunktion senden TranslateMessage(&msg); DispatchMessage(&msg); } // Rückgabewert an Windows return 0; } HWND CreateMainWindow(HINSTANCE hInstance) { WNDCLASSEX wndClass; // WNDCLASSEX Struktur // Struktur initialisieren wndClass.cbSize = sizeof(WNDCLASSEX); // Größe angeben (nie vergessen!) wndClass.style = CS_DBLCLKS | CS_OWNDC | CS_HREDRAW | CS_VREDRAW; // Standard Stile wndClass.lpfnWndProc = WindowFunc; // Die Callback Funktion angeben wndClass.cbClsExtra = 0; // Zusätzliche Angaben, wird nicht benötigt wndClass.cbWndExtra = 0; // Zusätzliche Angaben, wird nicht benötigt wndClass.hInstance = hInstance; // Anwendungsinstanz wndClass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); // Weisser Pinsel wndClass.hCursor = LoadCursor(NULL, IDC_ARROW); // Normaler Cursor wndClass.lpszMenuName = NULL; // Das Fenster hat kein Menü wndClass.lpszClassName = "WindowClass"; // Der Name der Klasse //wndClass.hIcon = LoadIcon(NULL, IDI_WINLOGO); // Windows Logo //wndClass.hIconSm = LoadIcon(NULL, IDI_WINLOGO); // Windows Logo RegisterClassEx(&wndClass); return CreateWindowEx(NULL, // Keine erweiterten Stile nutzen "WindowClass", // Klassenname "Ein einfaches Fenster",// Fenstertitel WS_OVERLAPPEDWINDOW | // Fenster WS_VISIBLE, // Eigenschaften 100, 100, 400, 300, // Anfangsposition und Größe NULL, // Handle des Elternfensters NULL, // Handle des Menüs hInstance, // Anwendungsinstanz NULL); // wird nicht benötigt } // Diese Funktion wird von Windows aufgrufen, wenn eine Nachricht // für Ihr Programm vorliegt LRESULT CALLBACK WindowFunc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { // testen, um welche Nachticht es sich handelt switch(msg) { // das Fenster soll geschlossen werden case WM_DESTROY: PostQuitMessage(0); return 0; break; // das Fenster soll neu gezeichnet werden case WM_PAINT: PAINTSTRUCT ps; HDC hDC; // Handle des Device Context anfordern hDC = BeginPaint(hWnd,&ps); // drei neue Stift mit verschiedenen Farben und // Strichstärken erzeugen long PenRed = CreatePen(PS_SOLID,3,RGB(255,0,0)); long PenGreen = CreatePen(PS_SOLID,2,RGB(0,255,0)); long PenBlue = CreatePen(PS_SOLID,1,RGB(0,0,255)); //HPEN ???? // den ersten Stift wählen und zwei Ellipsen zeichnen SelectObject(hDC,PenBlue); Ellipse(hDC,60,5,340,250); Ellipse(hDC,150,190,250,210); // den zweiten Stift wählen und zwei Rechtecke zeichnen SelectObject(hDC,PenGreen); Rectangle(hDC,110,40,160,80); Rectangle(hDC,240,40,290,80); // den dritten Stift wählen und drei Striche zeichnen SelectObject(hDC,PenRed); MoveToEx(hDC,200,120,NULL); LineTo(hDC,180,150); LineTo(hDC,220,150); LineTo(hDC,200,120); // die Stifte müssen wieder gelöscht werden DeleteObject(PenRed); DeleteObject(PenGreen); DeleteObject(PenBlue); SetPixel(ps.hdc, 20, 20, RGB(25,100,100)); //setze Pixel // mitteilen, dass die Zeichenoperationen abgeschlossen sind EndPaint(hWnd,&ps); return 0; break; } // Wenn wir uns nicht um die Nachricht gekümmert haben // wird sie an die Standardnachrichtenverarbeitung von Windows // geschickt return (DefWindowProc(hwnd, msg, wParam, lParam)); }
Draw only a pixel in the window:
Code:
#include <litec.h> //Lite-C legacy Mode #include <stdio.h> //Stanard C #include <windows.h> //Windows API #include <d3d9.h> //direct X 9 // Prototypen // Anwendungsfenster erzeugen HWND CreateMainWindow(HINSTANCE hInstance); //Callback Funktion zur Nachrichtenbehandlung LRESULT CALLBACK WindowFunc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam); // Das Fensterhandle HWND hWnd = 0; // Windows main-Funktion int WINAPI WinMain(HINSTANCE hInstance, // Handle der Programminstanz HINSTANCE hPrevInstance, // Handle der letzten Instanz LPSTR lpCmdLine, // Kommandozeile int nCmdShow) // Art wie das Fenster angezeigt werden soll { // Fenster erzeugen und Handle speichern hWnd = CreateMainWindow(hInstance); // Wenn der Rückgabewert 0 ist, ist ein Fehler aufgetreten if(0 == hWnd) { MessageBox(0,"Fehler","Fehler",MB_OK); return 0; } // Struktur, in der Informationen zur Nachricht gespeichert werden MSG msg; // Diese Schleife läuft bis die Nachricht WM_QUIT empfangen wird while(GetMessage(&msg,NULL,0,0)) { // Nachricht an die Callbackfunktion senden TranslateMessage(&msg); DispatchMessage(&msg); } // Rückgabewert an Windows return 0; } HWND CreateMainWindow(HINSTANCE hInstance) { WNDCLASSEX wndClass; // WNDCLASSEX Struktur // Struktur initialisieren wndClass.cbSize = sizeof(WNDCLASSEX); // Größe angeben (nie vergessen!) wndClass.style = CS_DBLCLKS | CS_OWNDC | CS_HREDRAW | CS_VREDRAW; // Standard Stile wndClass.lpfnWndProc = WindowFunc; // Die Callback Funktion angeben wndClass.cbClsExtra = 0; // Zusätzliche Angaben, wird nicht benötigt wndClass.cbWndExtra = 0; // Zusätzliche Angaben, wird nicht benötigt wndClass.hInstance = hInstance; // Anwendungsinstanz wndClass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); // Weisser Pinsel wndClass.hCursor = LoadCursor(NULL, IDC_ARROW); // Normaler Cursor wndClass.lpszMenuName = NULL; // Das Fenster hat kein Menü wndClass.lpszClassName = "WindowClass"; // Der Name der Klasse //wndClass.hIcon = LoadIcon(NULL, IDI_WINLOGO); // Windows Logo //wndClass.hIconSm = LoadIcon(NULL, IDI_WINLOGO); // Windows Logo RegisterClassEx(&wndClass); return CreateWindowEx(NULL, // Keine erweiterten Stile nutzen "WindowClass", // Klassenname "Ein einfaches Fenster",// Fenstertitel WS_OVERLAPPEDWINDOW | // Fenster WS_VISIBLE, // Eigenschaften 100, 100, 400, 300, // Anfangsposition und Größe NULL, // Handle des Elternfensters NULL, // Handle des Menüs hInstance, // Anwendungsinstanz NULL); // wird nicht benötigt } // Diese Funktion wird von Windows aufgrufen, wenn eine Nachricht // für Ihr Programm vorliegt LRESULT CALLBACK WindowFunc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { // testen, um welche Nachticht es sich handelt switch(msg) { // das Fenster soll geschlossen werden case WM_DESTROY: PostQuitMessage(0); return 0; break; // das Fenster soll neu gezeichnet werden case WM_PAINT: PAINTSTRUCT ps; HDC hDC; // Handle des Device Context anfordern hDC = BeginPaint(hWnd,&ps); // drei neue Stift mit verschiedenen Farben und // Strichstärken erzeugen long PenRed = CreatePen(PS_SOLID,3,RGB(255,0,0)); long PenGreen = CreatePen(PS_SOLID,2,RGB(0,255,0)); long PenBlue = CreatePen(PS_SOLID,1,RGB(0,0,255)); SetPixel(ps.hdc, 20, 20, RGB(25,100,100)); //setze Pixel // mitteilen, dass die Zeichenoperationen abgeschlossen sind EndPaint(hWnd,&ps); return 0; break; } // Wenn wir uns nicht um die Nachricht gekümmert haben // wird sie an die Standardnachrichtenverarbeitung von Windows // geschickt return (DefWindowProc(hwnd, msg, wParam, lParam)); }
ohh and a GDI mouse-message code:
Code:
#include <litec.h> //Lite-C legacy Mode #include <stdio.h> //Stanard C #include <windows.h> //Windows API #include <d3d9.h> //direct X 9 // Prototypen // Anwendungsfenster erzeugen HWND CreateMainWindow(HINSTANCE hInstance); //Callback Funktion zur Nachrichtenbehandlung LRESULT CALLBACK WindowFunc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam); // Das Fensterhandle HWND hWnd = 0; // Windows main-Funktion int WINAPI WinMain(HINSTANCE hInstance, // Handle der Programminstanz HINSTANCE hPrevInstance, // Handle der letzten Instanz LPSTR lpCmdLine, // Kommandozeile int nCmdShow) // Art wie das Fenster angezeigt werden soll { // Fenster erzeugen und Handle speichern hWnd = CreateMainWindow(hInstance); // Wenn der Rückgabewert 0 ist, ist ein Fehler aufgetreten if(0 == hWnd) { MessageBox(0,"Fehler","Fehler",MB_OK); return 0; } // Struktur, in der Informationen zur Nachricht gespeichert werden MSG msg; // Diese Schleife läuft bis die Nachricht WM_QUIT empfangen wird while(GetMessage(&msg,NULL,0,0)) { // Nachricht an die Callbackfunktion senden TranslateMessage(&msg); DispatchMessage(&msg); } // Rückgabewert an Windows return 0; } HWND CreateMainWindow(HINSTANCE hInstance) { WNDCLASSEX wndClass; // WNDCLASSEX Struktur // Struktur initialisieren wndClass.cbSize = sizeof(WNDCLASSEX); // Größe angeben (nie vergessen!) wndClass.style = CS_DBLCLKS | CS_OWNDC | CS_HREDRAW | CS_VREDRAW; // Standard Stile wndClass.lpfnWndProc = WindowFunc; // Die Callback Funktion angeben wndClass.cbClsExtra = 0; // Zusätzliche Angaben, wird nicht benötigt wndClass.cbWndExtra = 0; // Zusätzliche Angaben, wird nicht benötigt wndClass.hInstance = hInstance; // Anwendungsinstanz wndClass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); // Weisser Pinsel wndClass.hCursor = LoadCursor(NULL, IDC_ARROW); // Normaler Cursor wndClass.lpszMenuName = NULL; // Das Fenster hat kein Menü wndClass.lpszClassName = "WindowClass"; // Der Name der Klasse RegisterClassEx(&wndClass); return CreateWindowEx(NULL, // Keine erweiterten Stile nutzen "WindowClass", // Klassenname "Ein einfaches Fenster",// Fenstertitel WS_OVERLAPPEDWINDOW | // Fenster WS_VISIBLE, // Eigenschaften 100, 100, 400, 300, // Anfangsposition und Größe NULL, // Handle des Elternfensters NULL, // Handle des Menüs hInstance, // Anwendungsinstanz NULL); // wird nicht benötigt } // Diese Funktion wird von Windows aufgrufen, wenn eine Nachricht // für Ihr Programm vorliegt LRESULT CALLBACK WindowFunc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { HDC hDC; // Handle für einen Device Context deklarieren // testen, um welche Nachticht es sich handelt switch(msg) { // das Fenster soll geschlossen werden case WM_DESTROY: PostQuitMessage(0); return 0; break; // die linke Maustaste wurde gedrückt case WM_LBUTTONDOWN: int x1,y1,x2,y2; hDC = GetDC(hWnd); // Position berechnen x1 = LOWORD(lParam); y1 = HIWORD(lParam); x2 = x1 + 50; y2 = y1 + 50; // Rechteck ausgeben Rectangle(hDC,x1,y1,x2,y2); ReleaseDC(hWnd,hDC); return 0; break; // die rechte Maustaste wurde gedrückt case WM_RBUTTONDOWN: // Fensterinhalt löschen InvalidateRect(hWnd,0,TRUE); return 0; break; // die Maus wurde bewegt case WM_MOUSEMOVE: int x,y; char String[25]; hDC = GetDC(hWnd); x = LOWORD(lParam); y = HIWORD(lParam); // Koordinaten ausgeben sprintf(String,"%-4d %-4d",x,y); TextOut(hDC,0,0,String,strlen(String)); ReleaseDC(hWnd,hDC); return 0; break; } // Wenn wir uns nicht um die Nachricht gekümmert haben // wird sie an die Standardnachrichtenverarbeitung von Windows // geschickt return DefWindowProc(hwnd, msg, wParam, lParam); }
a gdi-text:
Code:
#include <litec.h> //Lite-C legacy Mode #include <stdio.h> //Stanard C #include <windows.h> //Windows API #include <d3d9.h> //direct X 9 int i; //Lite-C lässt hier folgendes nicht zu: for(int i; i<100; i+=10)..... -> i muss vorher definiert werden // Prototypen // Anwendungsfenster erzeugen HWND CreateMainWindow(HINSTANCE hInstance); //Callback Funktion zur Nachrichtenbehandlung LRESULT CALLBACK WindowFunc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam); // Das Fensterhandle HWND hWnd = 0; // Windows main-Funktion int WINAPI WinMain(HINSTANCE hInstance, // Handle der Programminstanz HINSTANCE hPrevInstance, // Handle der letzten Instanz LPSTR lpCmdLine, // Kommandozeile int nCmdShow) // Art wie das Fenster angezeigt werden soll { // Fenster erzeugen und Handle speichern hWnd = CreateMainWindow(hInstance); // Wenn der Rückgabewert 0 ist, ist ein Fehler aufgetreten if(0 == hWnd) { MessageBox(0,"Fehler","Fehler",MB_OK); return 0; } // Struktur, in der Informationen zur Nachricht gespeichert werden MSG msg; // Diese Schleife läuft bis die Nachricht WM_QUIT empfangen wird while(GetMessage(&msg,NULL,0,0)) { // Nachricht an die Callbackfunktion senden TranslateMessage(&msg); DispatchMessage(&msg); } // Rückgabewert an Windows return 0; } HWND CreateMainWindow(HINSTANCE hInstance) { WNDCLASSEX wndClass; // WNDCLASSEX Struktur // Struktur initialisieren wndClass.cbSize = sizeof(WNDCLASSEX); // Größe angeben (nie vergessen!) wndClass.style = CS_DBLCLKS | CS_OWNDC | CS_HREDRAW | CS_VREDRAW; // Standard Stile wndClass.lpfnWndProc = WindowFunc; // Die Callback Funktion angeben wndClass.cbClsExtra = 0; // Zusätzliche Angaben, wird nicht benötigt wndClass.cbWndExtra = 0; // Zusätzliche Angaben, wird nicht benötigt wndClass.hInstance = hInstance; // Anwendungsinstanz wndClass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); // Weisser Pinsel wndClass.hCursor = LoadCursor(NULL, IDC_ARROW); // Normaler Cursor wndClass.lpszMenuName = NULL; // Das Fenster hat kein Menü wndClass.lpszClassName = "WindowClass"; // Der Name der Klasse //wndClass.hIcon = LoadIcon(NULL, IDI_WINLOGO); // Windows Logo //wndClass.hIconSm = LoadIcon(NULL, IDI_WINLOGO); // Windows Logo RegisterClassEx(&wndClass); return CreateWindowEx(NULL, // Keine erweiterten Stile nutzen "WindowClass", // Klassenname "Ein einfaches Fenster",// Fenstertitel WS_OVERLAPPEDWINDOW | // Fenster WS_VISIBLE, // Eigenschaften 100, 100, 400, 300, // Anfangsposition und Größe NULL, // Handle des Elternfensters NULL, // Handle des Menüs hInstance, // Anwendungsinstanz NULL); // wird nicht benötigt } // Diese Funktion wird von Windows aufgrufen, wenn eine Nachricht // für Ihr Programm vorliegt LRESULT CALLBACK WindowFunc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { // testen, um welche Nachticht es sich handelt switch(msg) { // das Fenster soll geschlossen werden case WM_DESTROY: PostQuitMessage(0); return 0; break; // das Fenster muss neu gezeichnet werden case WM_PAINT: PAINTSTRUCT ps; HDC hDC; // Handle des Device Context anfordern hDC = BeginPaint(hWnd,&ps); // 10 * Hallo in rot ausgeben for(i=0;i<400;i+=20) { // Farbe setzen SetTextColor(hDC,RGB(i,0,0)); TextOut(hDC,i,i,"Hallo",5); } // mitteilen, dass die Zeichenoperationen abgeschlossen sind EndPaint(hWnd,&ps); return 0; break; } // Wenn wir uns nicht um die Nachricht gekümmert haben // wird sie an die Standardnachrichtenverarbeitung von Windows // geschickt return (DefWindowProc(hwnd, msg, wParam, lParam)); }
Maybe you can use it, maybe it helps you.....
cu
Marcel