This commit was manufactured by cvs2svn to create branch 'captive'.
[reactos.git] / apps / tests / multiwin / multiwin.c
diff --git a/apps/tests/multiwin/multiwin.c b/apps/tests/multiwin/multiwin.c
new file mode 100644 (file)
index 0000000..389b80e
--- /dev/null
@@ -0,0 +1,147 @@
+#include <windows.h>
+#include <stdio.h>
+
+static UINT WindowCount;
+LRESULT WINAPI MultiWndProc(HWND, UINT, WPARAM, LPARAM);
+
+int WINAPI 
+WinMain(HINSTANCE hInstance,
+       HINSTANCE hPrevInstance,
+       LPSTR lpszCmdLine,
+       int nCmdShow)
+{
+  WNDCLASS wc;
+  MSG msg;
+  HWND hWnd1;
+  HWND hWnd2;
+  HWND hWndChild;
+
+  wc.lpszClassName = "MultiClass";
+  wc.lpfnWndProc = MultiWndProc;
+  wc.style = CS_VREDRAW | CS_HREDRAW;
+  wc.hInstance = hInstance;
+  wc.hIcon = LoadIcon(NULL, (LPCTSTR) IDI_APPLICATION);
+  wc.hCursor = LoadCursor(NULL, (LPCTSTR) IDC_ARROW);
+  wc.hbrBackground = (HBRUSH) (COLOR_WINDOW + 1);
+  wc.lpszMenuName = NULL;
+  wc.cbClsExtra = 0;
+  wc.cbWndExtra = 0;
+  if (RegisterClass(&wc) == 0)
+    {
+      fprintf(stderr, "RegisterClass failed (last error 0x%X)\n",
+             GetLastError());
+      return(1);
+    }
+
+  hWnd1 = CreateWindow("MultiClass",
+                     "TopLevel1",
+                     WS_OVERLAPPEDWINDOW,
+                     0,
+                     0,
+                     320,
+                     240,
+                     NULL,
+                     NULL,
+                     hInstance,
+                     NULL);
+
+  hWndChild = CreateWindow("MultiClass",
+                     "Child1 of TopLevel1",
+                     WS_CHILD | WS_BORDER | WS_CAPTION | WS_VISIBLE | WS_SYSMENU,
+                     20,
+                     120,
+                     200,
+                     200,
+                     hWnd1,
+                     NULL,
+                     hInstance,
+                     NULL);
+
+  hWnd2 = CreateWindow("MultiClass",
+                     "TopLevel2",
+                     WS_OVERLAPPEDWINDOW,
+                     400,
+                     0,
+                     160,
+                     490,
+                     NULL,
+                     NULL,
+                     hInstance,
+                     NULL);
+
+  if (! hWnd1 || ! hWnd2 || ! hWndChild)
+    {
+      fprintf(stderr, "CreateWindow failed (last error 0x%X)\n",
+             GetLastError());
+      return(1);
+    }
+  WindowCount = 2;
+
+  ShowWindow(hWnd1, SW_NORMAL);
+  ShowWindow(hWnd2, SW_NORMAL);
+
+  while(GetMessage(&msg, NULL, 0, 0))
+  {
+    TranslateMessage(&msg);
+    DispatchMessage(&msg);
+  }
+  return msg.wParam;
+}
+
+LRESULT CALLBACK MultiWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
+{
+  PAINTSTRUCT ps;
+  HDC hDC;
+  LONG Style;
+  RECT Client;
+  HBRUSH Brush;
+  static COLORREF Colors[] =
+    {
+      RGB(0x00, 0x00, 0x00),
+      RGB(0x80, 0x00, 0x00),
+      RGB(0x00, 0x80, 0x00),
+      RGB(0x00, 0x00, 0x80),
+      RGB(0x80, 0x80, 0x00),
+      RGB(0x80, 0x00, 0x80),
+      RGB(0x00, 0x80, 0x80),
+      RGB(0x80, 0x80, 0x80),
+      RGB(0xff, 0x00, 0x00),
+      RGB(0x00, 0xff, 0x00),
+      RGB(0x00, 0x00, 0xff),
+      RGB(0xff, 0xff, 0x00),
+      RGB(0xff, 0x00, 0xff),
+      RGB(0x00, 0xff, 0xff),
+      RGB(0xff, 0xff, 0xff)
+    };
+  static unsigned CurrentColor = 0;
+
+  switch(msg)
+    {
+      case WM_PAINT:
+       hDC = BeginPaint(hWnd, &ps);
+       GetClientRect(hWnd, &Client);
+       Brush = CreateSolidBrush(Colors[CurrentColor]);
+       FillRect(hDC, &Client, Brush);
+       DeleteObject(Brush);
+       CurrentColor++;
+       if (sizeof(Colors) / sizeof(Colors[0]) <= CurrentColor)
+         {
+           CurrentColor = 0;
+         }
+       EndPaint(hWnd, &ps);
+       break;
+
+      case WM_DESTROY:
+       Style = GetWindowLong(hWnd, GWL_STYLE);
+       if (0 == (Style & WS_CHILD) && 0 == --WindowCount)
+         {
+           PostQuitMessage(0);
+         }
+       break;
+
+      default:
+       return DefWindowProc(hWnd, msg, wParam, lParam);
+    }
+
+  return 0;
+}