From 58718a770133da0fe27a931289196b64ef145151 Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Mon, 9 Feb 2009 06:41:49 +0000 Subject: [PATCH] Implemented Win32 version of the native window test --- test/testnative.c | 4 ++-- test/testnativew32.c | 50 ++++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 50 insertions(+), 4 deletions(-) diff --git a/test/testnative.c b/test/testnative.c index 96c469d7c..7f531547e 100644 --- a/test/testnative.c +++ b/test/testnative.c @@ -29,7 +29,7 @@ quit(int rc) { SDL_VideoQuit(); if (native_window) { - factory->DestroyWindow(native_window); + factory->DestroyNativeWindow(native_window); } exit(rc); } @@ -137,7 +137,7 @@ main(int argc, char *argv[]) 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); diff --git a/test/testnativew32.c b/test/testnativew32.c index 9bcaa6b84..e64cf5103 100644 --- a/test/testnativew32.c +++ b/test/testnativew32.c @@ -12,17 +12,63 @@ NativeWindowFactory Win32WindowFactory = { 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