silent12
Mitglied
Hallo,
ich habe gerade versucht ein Child Window mit einer andern Hintergrundfarbe als ein Parent Window zu erstellen. Nur leider erscheint mein Child Window jetzt gar nicht mehr ?
Würde mich über Hilfen sehr freuen.
LG
silent1297
ich habe gerade versucht ein Child Window mit einer andern Hintergrundfarbe als ein Parent Window zu erstellen. Nur leider erscheint mein Child Window jetzt gar nicht mehr ?
Würde mich über Hilfen sehr freuen.
C++:
// main_cpp //
#include <Windows.h>
#include <iostream>
int width = 640;
int height = 420;
LRESULT CALLBACK WndProc (HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
const char szClassName[] = "Hallo";
char szTitle[] = "1.Programm Grafic3 Silent1297 2011 ©";
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR szCmdLine, int iCmdShow)
{
WNDCLASSEX WndClassEx; // legt die Grundeigenschaften für das Fenster fest.
WNDCLASSEX WndClassExChild;
HWND hWnd; //legt die Eigenschaften des Fensters fest.
MSG msg; //darin werden die Daten gespeichert.
// Registrierung von WndClassEx //
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;
}
RegisterClassEx ( &WndClassEx );
// Fenster Erstellen //
hWnd = 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 ( hWnd == NULL )
{MessageBox ( NULL, "Create Window failed", "Error", MB_OK);
return false;
}
ShowWindow( hWnd, iCmdShow);
{
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( hWnd, px, py, width, height, true);
}
HINSTANCE hChildInst = NULL;
HWND hWndChild;
const char szClassNameChild[] = "ChildWindow";
hWndChild = CreateWindowEx (WS_EX_CLIENTEDGE, szClassNameChild,
"Child Window silent1297", WS_OVERLAPPEDWINDOW | WS_CHILD| WS_VISIBLE,
200, 200, 500, 200,
hWnd, NULL, hChildInst, NULL );
// Registrierung von WndClassExChild //
WndClassExChild.cbSize = sizeof( WndClassExChild);
WndClassExChild.style = NULL;
WndClassExChild.lpfnWndProc = (WNDPROC)WndProc; // hWnd -> CreateWindow (szClassName ) -> WndClass.
WndClassExChild.cbClsExtra = NULL;
WndClassExChild.cbWndExtra = NULL;
WndClassExChild.hInstance = hInstance;
WndClassExChild.hIcon = LoadIcon( NULL, IDI_WARNING); //Icon
WndClassExChild.hCursor = LoadCursor( NULL,IDC_ARROW); //Cursor
WndClassExChild.hbrBackground = (HBRUSH) GetStockObject ( BLACK_BRUSH) ; //Fensterfarbe
WndClassExChild.lpszMenuName = NULL;
WndClassExChild.lpszClassName = szClassNameChild; // C-String
WndClassExChild.hIconSm = LoadIcon (NULL, IDI_APPLICATION);
if ( !RegisterClassEx ( &WndClassExChild ))
{MessageBox ( NULL, "Register Class Child failed", "Error", MB_OK);
return false;
}
while( GetMessage ( &msg, hWnd, 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;
}
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_CLOSE: //Programm Ende
{
DestroyWindow( hWnd);
}
break;
case WM_DESTROY: //Fenster Ende (Wenn auf das X-geklickt wird
PostQuitMessage(0);
break;
default:
return DefWindowProc ( hWnd, msg, wParam, lParam);
}
};
LG
silent1297
Zuletzt bearbeitet von einem Moderator: