changeset 3060:4cf533f434d8

Implemented Win32 version of the native window test
author Sam Lantinga <slouken@libsdl.org>
date Mon, 09 Feb 2009 06:41:49 +0000
parents 79b061c4f316
children 94dd49f6b005
files test/testnative.c test/testnativew32.c
diffstat 2 files changed, 50 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/test/testnative.c	Mon Feb 09 06:28:45 2009 +0000
+++ b/test/testnative.c	Mon Feb 09 06:41:49 2009 +0000
@@ -29,7 +29,7 @@
 {
     SDL_VideoQuit();
     if (native_window) {
-        factory->DestroyWindow(native_window);
+        factory->DestroyNativeWindow(native_window);
     }
     exit(rc);
 }
@@ -137,7 +137,7 @@
         quit(2);
     }
     printf("Creating native window for %s driver\n", driver);
-    native_window = factory->CreateWindow(WINDOW_W, WINDOW_H);
+    native_window = factory->CreateNativeWindow(WINDOW_W, WINDOW_H);
     if (!native_window) {
         fprintf(stderr, "Couldn't create native window\n");
         quit(3);
--- a/test/testnativew32.c	Mon Feb 09 06:28:45 2009 +0000
+++ b/test/testnativew32.c	Mon Feb 09 06:41:49 2009 +0000
@@ -12,17 +12,63 @@
     DestroyWindowWin32
 };
 
-static Display *dpy;
+LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
+{
+    switch(msg)
+    {
+        case WM_CLOSE:
+            DestroyWindow(hwnd);
+        break;
+        case WM_DESTROY:
+            PostQuitMessage(0);
+        break;
+        default:
+            return DefWindowProc(hwnd, msg, wParam, lParam);
+    }
+    return 0;
+}
 
 static void *
 CreateWindowWin32(int w, int h)
 {
-    return NULL;
+    HWND hwnd;
+    WNDCLASS wc;
+
+    wc.style         = 0;
+    wc.lpfnWndProc   = WndProc;
+    wc.cbClsExtra    = 0;
+    wc.cbWndExtra    = 0;
+    wc.hInstance     = GetModuleHandle(NULL);
+    wc.hIcon         = LoadIcon(NULL, IDI_APPLICATION);
+    wc.hCursor       = LoadCursor(NULL, IDC_ARROW);
+    wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
+    wc.lpszMenuName  = NULL;
+    wc.lpszClassName = "SDL Test";
+
+    if(!RegisterClass(&wc))
+    {
+        MessageBox(NULL, "Window Registration Failed!", "Error!",
+            MB_ICONEXCLAMATION | MB_OK);
+        return 0;
+    }
+
+    hwnd = CreateWindow("SDL Test", "", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, w, h, NULL, NULL, GetModuleHandle(NULL), NULL);
+    if(hwnd == NULL)
+    {
+        MessageBox(NULL, "Window Creation Failed!", "Error!",
+            MB_ICONEXCLAMATION | MB_OK);
+        return 0;
+    }
+
+    ShowWindow(hwnd, SW_SHOW);
+
+    return hwnd;
 }
 
 static void
 DestroyWindowWin32(void *window)
 {
+    DestroyWindow((HWND)window);
 }
 
 #endif