1 /*
2 Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
3
4 This software is provided 'as-is', without any express or implied
5 warranty. In no event will the authors be held liable for any damages
6 arising from the use of this software.
7
8 Permission is granted to anyone to use this software for any purpose,
9 including commercial applications, and to alter it and redistribute it
10 freely.
11 */
12
13 #include "testnative.h"
14
15 #ifdef TEST_NATIVE_WINDOWS
16
17 static void *CreateWindowNative(int w, int h);
18 static void DestroyWindowNative(void *window);
19
20 NativeWindowFactory WindowsWindowFactory = {
21 "windows",
22 CreateWindowNative,
23 DestroyWindowNative
24 };
25
26 LRESULT CALLBACK
WndProc(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam)27 WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
28 {
29 switch (msg) {
30 case WM_CLOSE:
31 DestroyWindow(hwnd);
32 break;
33 case WM_DESTROY:
34 PostQuitMessage(0);
35 break;
36 default:
37 return DefWindowProc(hwnd, msg, wParam, lParam);
38 }
39 return 0;
40 }
41
42 static void *
CreateWindowNative(int w,int h)43 CreateWindowNative(int w, int h)
44 {
45 HWND hwnd;
46 WNDCLASS wc;
47
48 wc.style = 0;
49 wc.lpfnWndProc = WndProc;
50 wc.cbClsExtra = 0;
51 wc.cbWndExtra = 0;
52 wc.hInstance = GetModuleHandle(NULL);
53 wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
54 wc.hCursor = LoadCursor(NULL, IDC_ARROW);
55 wc.hbrBackground = (HBRUSH) (COLOR_WINDOW + 1);
56 wc.lpszMenuName = NULL;
57 wc.lpszClassName = "SDL Test";
58
59 if (!RegisterClass(&wc)) {
60 MessageBox(NULL, "Window Registration Failed!", "Error!",
61 MB_ICONEXCLAMATION | MB_OK);
62 return 0;
63 }
64
65 hwnd =
66 CreateWindow("SDL Test", "", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT,
67 CW_USEDEFAULT, w, h, NULL, NULL, GetModuleHandle(NULL),
68 NULL);
69 if (hwnd == NULL) {
70 MessageBox(NULL, "Window Creation Failed!", "Error!",
71 MB_ICONEXCLAMATION | MB_OK);
72 return 0;
73 }
74
75 ShowWindow(hwnd, SW_SHOW);
76
77 return hwnd;
78 }
79
80 static void
DestroyWindowNative(void * window)81 DestroyWindowNative(void *window)
82 {
83 DestroyWindow((HWND) window);
84 }
85
86 #endif
87