2 registered members (Akow, tomaslolo),
1,536
guests, and 12
spiders. |
Key:
Admin,
Global Mod,
Mod
|
|
|
Example how to use GDI Grafix with lite-c Legacy Mode
#277742
07/10/09 12:54
07/10/09 12:54
|
Joined: Jul 2007
Posts: 424 EUROPE
maslone1
OP
Senior Member
|
OP
Senior Member
Joined: Jul 2007
Posts: 424
EUROPE
|
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
#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:
#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:
#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:
#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
A8c, Blender, FlStudio, Unity3d
|
|
|
Re: Example how to use GDI Grafix with lite-c Legacy Mode
[Re: MMike]
#277863
07/11/09 06:05
07/11/09 06:05
|
Joined: Jul 2007
Posts: 424 EUROPE
maslone1
OP
Senior Member
|
OP
Senior Member
Joined: Jul 2007
Posts: 424
EUROPE
|
Hey Mike! also nice to see u! GDI stands for "Graphics Device Interface". The GDI is for all cinds of "window-outputs". So it is for a text, for 2d grafix,.... for the visual things.... also for the printer (is also a visual output ). So, yes its also for drawing windows button. cheers Marcel
A8c, Blender, FlStudio, Unity3d
|
|
|
|