Code:
#include <windows.h>
HWND MainWindow = NULL;
HWND ChildWindow = NULL;
HWND ChildChildWindow = NULL;
//+-----------------------------------------------------------------------------
LRESULT CALLBACK MainMessageHandler(HWND Window, UINT Message, WPARAM wParam, LPARAM lParam)
{
switch(Message)
{
case WM_CLOSE:
{
PostQuitMessage(0);
return 0;
}
case WM_DESTROY:
{
return 0;
}
}
return DefWindowProc(Window, Message, wParam, lParam);
}
//+-----------------------------------------------------------------------------
BOOL Setup()
{
DWORD Style;
WNDCLASSEX ClassInfo;
ClassInfo.cbSize = sizeof(WNDCLASSEX);
ClassInfo.style = CS_HREDRAW | CS_VREDRAW;
ClassInfo.cbClsExtra = 0;
ClassInfo.cbWndExtra = 0;
ClassInfo.hInstance = GetModuleHandle(NULL);
ClassInfo.hCursor = LoadCursor(NULL, IDC_ARROW);
ClassInfo.hIconSm = NULL;
ClassInfo.lpfnWndProc = MainMessageHandler;
ClassInfo.hIcon = LoadIcon(NULL, IDI_APPLICATION);
ClassInfo.hbrBackground = reinterpret_cast<HBRUSH>(COLOR_APPWORKSPACE + 1);
ClassInfo.lpszMenuName = NULL;
ClassInfo.lpszClassName = "MainClass";
if(!RegisterClassEx(&ClassInfo)) return FALSE;
//+---------------------------------------------
Style = WS_BORDER | WS_CAPTION | WS_SIZEBOX | WS_SYSMENU | WS_VISIBLE;
Style |= WS_MINIMIZEBOX | WS_MAXIMIZEBOX;
Style |= WS_CLIPCHILDREN;
MainWindow = CreateWindowEx(0, "MainClass", "Main Window", Style,
100, 100, 500, 400,
NULL, NULL, GetModuleHandle(NULL), NULL);
if(MainWindow == NULL) return FALSE;
//+---------------------------------------------
Style = WS_BORDER | WS_CAPTION | WS_SIZEBOX | WS_SYSMENU | 0;
Style |= WS_MINIMIZEBOX | WS_MAXIMIZEBOX;
Style |= 0 | WS_CLIPSIBLINGS | WS_SYSMENU;
ChildWindow = CreateWindowEx(0, "MainClass", "Child Window", Style,
50, 50, 200, 200,
MainWindow, NULL, GetModuleHandle(NULL), NULL);
SetParent(ChildWindow, MainWindow);
ShowWindow(ChildWindow, SW_SHOW);
if(ChildWindow == NULL) return FALSE;
//+---------------------------------------------
Style = ES_MULTILINE | ES_WANTRETURN | ES_LEFT | WS_VISIBLE;
Style |= WS_CHILD | WS_HSCROLL | WS_VSCROLL | ES_AUTOHSCROLL | ES_AUTOVSCROLL;
ChildChildWindow = CreateWindowEx(0, "EDIT", "Child Child Window", Style,
0, 0, 192, 166,
ChildWindow, reinterpret_cast<HMENU>(1337),
GetModuleHandle(NULL), NULL);
if(ChildChildWindow == NULL) return FALSE;
return TRUE;
}
//+-----------------------------------------------------------------------------
VOID Shutdown()
{
if(ChildChildWindow != NULL) DestroyWindow(ChildChildWindow);
if(ChildWindow != NULL) DestroyWindow(ChildWindow);
if(MainWindow != NULL) DestroyWindow(MainWindow);
}
//+-----------------------------------------------------------------------------
INT WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, INT)
{
MSG Message;
if(!Setup())
{
Shutdown();
return 0;
}
while(GetMessage(&Message, NULL, 0, 0))
{
TranslateMessage(&Message);
DispatchMessage(&Message);
}
Shutdown();
return 0;
}