// main_cpp //
#include <Windows.h>
#include <iostream>
int width = 640;
int height = 420;
LRESULT CALLBACK WndProc (HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
bool InitWndClassEx ( WNDCLASSEX *WndClassEx, HINSTANCE hInstance, const char szClassName[] = "Hallo");
const char szClassName[] = "Hallo";
char szTitle[] = "1.Programm Grafic3 Silent1297 2011 ©";
HWND hWndChild; //Handle to 1.ChildWindow
HWND hWndChild2; //Handle to 2. ChildWindow
HWND hWndParent; //legt die Eigenschaften des ParentWindows fest.
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR szCmdLine, int iCmdShow)
{
WNDCLASSEX WndClassEx; // legt die Grundeigenschaften für das Fenster fest.
WNDCLASSEX WndClassExChild; //Grundeigenschaften für ChildWindow
WNDCLASSEX WndClassExChild2; //Grundeigenschaften für ChildWindow2
MSG msg; //darin werden die Daten gespeichert.
HINSTANCE hChildInst = NULL;
// Registrierung //
InitWndClassEx ( &WndClassEx, hInstance, szClassName);
InitWndClassEx ( &WndClassExChild, hInstance, "WndClassExChild");
InitWndClassEx ( &WndClassExChild2, hInstance, "WndClassExChild2");
// Fenster Erstellen //
hWndParent = CreateWindowEx (NULL, // beeinhaltet die Folgenden Eigenschaften und die Eigenschaften aus WndClassEx
szClassName, //hierüber werden die Eigenschaften aus WndClassEx. eingebunden
szTitle,
WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX | WS_MAXIMIZEBOX, //Fenster (Minimierungsbutton.....
300, //Abstand-Oben
600, //Abstand-Links
width, // Breite
height, // Höhe
NULL,
NULL,
hInstance,
NULL);
if ( hWndParent == NULL )
{MessageBox ( NULL, "Create Window failed", "Error", MB_OK);
return false;
}
{
int cx = GetSystemMetrics(SM_CXSCREEN); //cx = desktopbreite ermitteln
int cy = GetSystemMetrics(SM_CYSCREEN);//cx = desktophöhe ermitteln
int px = (cx - width) / 2; //AbstanddesFensters von links errechnen
int py = (cy - height) / 2; //AbstanddesFensters von oben errechnen
MoveWindow( hWndParent, px, py, width, height, true);
}
ShowWindow( hWndParent, iCmdShow);
hWndChild = CreateWindowEx (WS_EX_CLIENTEDGE, "WndClassExChild",
"Child Window silent1297", WS_SYSMENU| WS_CAPTION | WS_CHILD| WS_VISIBLE | WS_CLIPSIBLINGS, //WS_CLIPSIBLINGS damit Fenster beim Verziehen nicht "verwischt"
70, 30, 250, 300, // LinksAbstand, Obenabstand, Breite, Höhe
hWndParent, NULL, hChildInst, NULL );
hWndChild2 = CreateWindowEx (WS_EX_CLIENTEDGE, "WndClassExChild2",
"Child Window - 2 silent1297",WS_SYSMENU | WS_CAPTION | WS_CHILD| WS_VISIBLE | WS_CLIPSIBLINGS, //WS_CLIPSIBLINGS damit Fenster beim Verziehen nicht "verwischt"
320, 30, 250, 300, // LinksAbstand, Obenabstand, Breite, Höhe
hWndParent, NULL, hChildInst, NULL );
SetClassLong ( hWndChild2, GCL_HBRBACKGROUND, (LONG) GetStockObject (BLACK_BRUSH)); //ändert die Hintergrundfarbe des Fensters dessen HWND (Handle to Window) angegeben ist
while( GetMessage ( &msg, hWndParent, NULL, NULL) > NULL) // -1 = Fehler | 0 // > 0
{
TranslateMessage( &msg ); // wird in Character-Message übersetzt
DispatchMessage ( &msg ); // wird verschickt an die Callback Funktion
};
// WINDOW-PROCEDUR(Einleitungsteil) -> WNDCLASSEX(Registrierung) -> HWND(Fenstereinstellungenfestlegen) -> MESSAGELOOP(Messages übersetzen und an die CALLBACK-Funktion weiterverschicken)
return 0;
}
//Variablen zur Textausgabe des ParentWindow
HDC hDCParent; // Handle to a Device Context für das ParentWindow
PAINTSTRUCT psParent; //Paintstruktur für das ParentWindow
char szTextParent[] = ("Hallo Welt"); // Text der ausgegeben werden soll für das ParentWindow
//Variablen zur Textausgabe des 1.ChildWindow
HDC hDCChild; // Handle to a Device Context für das ChildWindow
PAINTSTRUCT psChild; //Paintstruktur für das ChildWindow
char szTextChild[] = ("Hallo 1.ChildFenster"); // Text der ausgegeben werden soll für das ChildWindow
//Variablen zur Textausgabe des 2.ChildWindow
HDC hDCChild2; // Handle to a Device Context für das ChildWindow
PAINTSTRUCT psChild2; //Paintstruktur für das ChildWindow
char szTextChild2[] = ("Hallo 2.ChildFenster"); // Text der ausgegeben werden soll für das ChildWindow
LRESULT CALLBACK WndProc (HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) //Gehirn des eigentlichen Windows, Verarbeitung von Messages...
{
//Jede Message hat 2 Informationen ( wParam und lParam)
switch (msg)
{
case WM_PAINT: //Text ausgeben
hDCParent = BeginPaint (hWnd,&psParent); //ParentWindow neu gestalten :D
hDCChild = BeginPaint (hWndChild,&psChild); //ChildWindow neu gestalten :D
hDCChild2 = BeginPaint (hWndChild2, &psChild2);
//Settings 2.ChildWindow
SetBkMode (hDCChild2, TRANSPARENT); //setzt die Hintergrundfarbe des Textes auf Transparent
SetBkColor( hDCChild2, RGB(255, 0, 0) ); // funktioniert wenn die SetbkMode(hDC, TRANSPARENT); nich vorhanden ist, ändert Hintergrundfarbe des Textes 1. Wert rot-wert, 2. Wert grün-wert, 3.Wert blau-wert
SetTextColor (hDCChild2, RGB(255, 255, 255) );//ändert Textfarbe des Textes 1. Wert rot-wert, 2. Wert grün-wert, 3.Wert blau-wert
TextOut ( hDCChild2, 50, 100, szTextChild2, strlen(szTextChild2) ); //2Zahlen am Anfang sind Koordinaten wo Text anfangen soll, 3. Ziffer ist die Anzahl der Zeichen des c-stirngs
EndPaint ( hWndChild2, &psChild2); //beendet das neu gestalten des ChildWindows2
//Settings 1.ChildWindow
SetBkMode (hDCChild, TRANSPARENT); //setzt die Hintergrundfarbe des Textes auf Transparent
SetBkColor( hDCChild, RGB(255, 0, 0) ); // funktioniert wenn die SetbkMode(hDC, TRANSPARENT); nich vorhanden ist, ändert Hintergrundfarbe des Textes 1. Wert rot-wert, 2. Wert grün-wert, 3.Wert blau-wert
SetTextColor (hDCChild, RGB(0, 0, 0) );//ändert Textfarbe des Textes 1. Wert rot-wert, 2. Wert grün-wert, 3.Wert blau-wert
TextOut ( hDCChild, 50, 100, szTextChild, strlen(szTextChild) ); //2Zahlen am Anfang sind Koordinaten wo Text anfangen soll, 3. Ziffer ist die Anzahl der Zeichen des c-stirngs
EndPaint ( hWndChild, &psChild); //beendet das neu gestalten des ChildWindows
//Settings Parent Window
SetBkMode (hDCParent, TRANSPARENT); //setzt die Hintergrundfarbe des Textes auf Transparent
SetBkColor( hDCParent, RGB(255, 0, 0) ); // funktioniert wenn die SetbkMode(hDC, TRANSPARENT); nich vorhanden ist, ändert Hintergrundfarbe des Textes 1. Wert rot-wert, 2. Wert grün-wert, 3.Wert blau-wert
SetTextColor (hDCParent, RGB(0, 0, 0) );//ändert Textfarbe des Textes 1. Wert rot-wert, 2. Wert grün-wert, 3.Wert blau-wert
TextOut ( hDCParent, 10, 10, szTextParent, strlen(szTextParent) ); //2Zahlen am Anfang sind Koordinaten wo Text anfangen soll, 3. Ziffer ist die Anzahl der Zeichen des c-stirngs
EndPaint ( hWnd, &psParent); //beendet das neu gestalten des ParentWindows
break;
case WM_DESTROY: //Fenster Ende (Wenn auf das X-geklickt wird
if(hWnd == hWndParent)
{
PostQuitMessage(0);
}
break;
default:
return DefWindowProc ( hWnd, msg, wParam, lParam);
}
return 0;
}
bool InitWndClassEx ( WNDCLASSEX *WndClassEx , HINSTANCE hInstance, const char *szClassName) //Funktion mit Defaultwerten für zB ChildWindows
{
WndClassEx->cbSize = sizeof( *WndClassEx);
WndClassEx->style = NULL;
WndClassEx->lpfnWndProc = (WNDPROC)WndProc; // hWnd -> CreateWindow (szClassName ) -> WndClass.
WndClassEx->cbClsExtra = NULL;
WndClassEx->cbWndExtra = NULL;
WndClassEx->hInstance = hInstance;
WndClassEx->hIcon = LoadIcon( NULL, IDI_WARNING); //Icon
WndClassEx->hCursor = LoadCursor( NULL,IDC_ARROW); //Cursor
WndClassEx->hbrBackground = (HBRUSH) GetStockObject ( WHITE_BRUSH) ; //Fensterfarbe
WndClassEx->lpszMenuName = NULL;
WndClassEx->lpszClassName = szClassName; // C-String
WndClassEx->hIconSm = LoadIcon (NULL, IDI_APPLICATION);
if ( !RegisterClassEx ( WndClassEx ))
{MessageBox ( NULL, "Register Class failed", "Error", MB_OK);
return false;
}
}