Added mappings for a few messages.
[wine] / dlls / ddraw / dsurface / wndproc.c
1 /*      User-based primary surface driver
2  *
3  * Copyright 2000 TransGaming Technologies Inc.
4  */
5
6 #include "config.h"
7
8 #include <assert.h>
9 #include <stdlib.h>
10 #include <string.h>
11
12 #include "winerror.h"
13
14 #include "ddraw_private.h"
15 #include "dsurface/wndproc.h"
16
17 #include "debugtools.h"
18
19 DEFAULT_DEBUG_CHANNEL(ddraw);
20
21 static LRESULT WINAPI DirectDrawSurface_WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam);
22
23 void DirectDrawSurface_RegisterClass(void)
24 {
25     WNDCLASSA wc;
26     memset(&wc, 0, sizeof(wc));
27     wc.lpfnWndProc = DirectDrawSurface_WndProc;
28     wc.cbWndExtra  = sizeof(IDirectDrawSurfaceImpl*);
29     wc.hCursor     = (HCURSOR)IDC_ARROWA;
30     wc.lpszClassName = "WINE_DDRAW";
31     RegisterClassA(&wc);
32 }
33
34 void DirectDrawSurface_UnregisterClass(void)
35 {
36     UnregisterClassA("WINE_DDRAW", 0);
37 }
38
39 static LRESULT WINAPI DirectDrawSurface_WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
40 {
41     IDirectDrawSurfaceImpl *This;
42     LRESULT ret;
43
44     This = (IDirectDrawSurfaceImpl *)GetWindowLongA(hwnd, 0);
45     if (This) {
46         HWND window = This->ddraw_owner->window;
47
48         switch (msg) {
49         case WM_DESTROY:
50         case WM_NCDESTROY:
51         case WM_SHOWWINDOW:
52         case WM_WINDOWPOSCHANGING:
53         case WM_WINDOWPOSCHANGED:
54         case WM_SIZE:
55         case WM_MOVE:
56         case WM_ERASEBKGND:
57             /* since we're pretending fullscreen,
58              * let's not pass these on to the app */
59             ret = DefWindowProcA(hwnd, msg, wParam, lParam);
60             break;
61         case WM_NCHITTEST:
62             ret = HTCLIENT;
63             break;
64         case WM_MOUSEACTIVATE:
65             ret = MA_NOACTIVATE;
66             break;
67         case WM_PAINT:
68             {
69                 PAINTSTRUCT ps;
70                 HDC dc;
71                 dc = BeginPaint(hwnd, &ps);
72                 /* call User_copy_to_screen? */
73                 EndPaint(hwnd, &ps);
74                 ret = 0;
75             }
76             break;
77         default:
78             ret = window ? SendMessageA(window, msg, wParam, lParam)
79                          : DefWindowProcA(hwnd, msg, wParam, lParam);
80         }
81     } else {
82         if (msg == WM_CREATE) {
83             CREATESTRUCTA *cs = (CREATESTRUCTA *)lParam;
84             This = (IDirectDrawSurfaceImpl *)cs->lpCreateParams;
85             SetWindowLongA(hwnd, 0, (LONG)This);
86         }
87         ret = DefWindowProcA(hwnd, msg, wParam, lParam);
88     }
89     return ret;
90 }