source: trunk/src/ddraw/wndproc.c@ 9459

Last change on this file since 9459 was 9459, checked in by sandervl, 23 years ago

cleanup + don't change the window size/status in SetCooperativeLevel

File size: 3.2 KB
Line 
1/* User-based primary surface driver
2 *
3 * Copyright 2000 TransGaming Technologies Inc.
4 *
5 * This library is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU Lesser General Public
7 * License as published by the Free Software Foundation; either
8 * version 2.1 of the License, or (at your option) any later version.
9 *
10 * This library is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * Lesser General Public License for more details.
14 *
15 * You should have received a copy of the GNU Lesser General Public
16 * License along with this library; if not, write to the Free Software
17 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 */
19
20#include <windows.h>
21
22#include <assert.h>
23#include <stdlib.h>
24#include <string.h>
25
26#include "winerror.h"
27
28#include "wine/debug.h"
29
30WINE_DEFAULT_DEBUG_CHANNEL(ddraw);
31
32static LRESULT WINAPI DirectDrawSurface_WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam);
33
34void DirectDrawSurface_RegisterClass(void)
35{
36 WNDCLASSA wc;
37 memset(&wc, 0, sizeof(wc));
38 wc.lpfnWndProc = DirectDrawSurface_WndProc;
39 wc.cbWndExtra = sizeof(DWORD);
40 wc.hCursor = (HCURSOR)IDC_ARROWA;
41 wc.lpszClassName = "WINE_DDRAW";
42 RegisterClassA(&wc);
43}
44
45void DirectDrawSurface_UnregisterClass(void)
46{
47 UnregisterClassA("WINE_DDRAW", 0);
48}
49
50static LRESULT WINAPI DirectDrawSurface_WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
51{
52 LRESULT ret;
53
54 HWND window = (HWND)GetWindowLongA(hwnd, 0);
55
56 if(window) {
57 switch (msg) {
58 case WM_DESTROY:
59 case WM_NCDESTROY:
60 case WM_SHOWWINDOW:
61 case WM_WINDOWPOSCHANGING:
62 case WM_WINDOWPOSCHANGED:
63 case WM_SIZE:
64 case WM_MOVE:
65 case WM_ERASEBKGND:
66 case WM_SYNCPAINT:
67 /* since we're pretending fullscreen,
68 * let's not pass these on to the app */
69 ret = DefWindowProcA(hwnd, msg, wParam, lParam);
70 break;
71 case WM_NCHITTEST:
72 ret = HTCLIENT;
73 break;
74 case WM_MOUSEACTIVATE:
75 ret = MA_NOACTIVATE;
76 break;
77 case WM_PAINT:
78 {
79 PAINTSTRUCT ps;
80 HDC dc;
81 dc = BeginPaint(hwnd, &ps);
82 /* call User_copy_to_screen? */
83 EndPaint(hwnd, &ps);
84 ret = 0;
85 }
86 break;
87 default:
88 ret = window ? SendMessageA(window, msg, wParam, lParam)
89 : DefWindowProcA(hwnd, msg, wParam, lParam);
90 }
91 } else {
92 if (msg == WM_CREATE) {
93 CREATESTRUCTA *cs = (CREATESTRUCTA *)lParam;
94 HWND hwndOwner = (HWND)cs->lpCreateParams;
95 SetWindowLongA(hwnd, 0, (LONG)hwndOwner);
96 }
97 ret = DefWindowProcA(hwnd, msg, wParam, lParam);
98 }
99 return ret;
100}
101
102HWND DirectDrawSurface_CreateWindow(DWORD dwWidth, DWORD dwHeight, HWND hwndOwner)
103{
104 HWND hwnd;
105
106 hwnd = CreateWindowExA(WS_EX_TOPMOST | WS_EX_LAYERED | WS_EX_TRANSPARENT,
107 "WINE_DDRAW", "DirectDraw",
108 WS_POPUP, 0, 0, dwWidth, dwHeight,
109 GetDesktopWindow(), 0, 0, hwndOwner);
110
111 SetWindowPos(hwnd, HWND_TOP, 0, 0, 0, 0,
112 SWP_DEFERERASE|SWP_NOACTIVATE|SWP_NOCOPYBITS|SWP_NOMOVE|
113 SWP_NOREDRAW|SWP_NOSENDCHANGING|SWP_NOSIZE|SWP_SHOWWINDOW);
114 UpdateWindow(hwnd);
115
116 return hwnd;
117}
Note: See TracBrowser for help on using the repository browser.