1 /*
2 * PROJECT: ReactOS Tests
3 * LICENSE: GPL - See COPYING in the top level directory
4 * FILE: rostests/win32/user32/paintdesktop/PaintDesktop.c
5 *
6 * PURPOSE: Demonstrates how the user32!PaintDesktop() API visually works.
7 * This API paints the desktop inside the given HDC with its
8 * origin always fixed to the origin of the monitor on which
9 * the window is present.
10 *
11 * PROGRAMMER: Hermes Belusca-Maito
12 */
13
14 #define WIN32_LEAN_AND_MEAN
15 #include <windows.h>
16
17 static HINSTANCE hInst;
18 static PWSTR szTitle = L"PaintDesktop";
19 static PWSTR szWindowClass = L"PAINTDESKTOP";
20
21 ATOM MyRegisterClass(HINSTANCE hInstance);
22 BOOL InitInstance(HINSTANCE, int);
23 LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
24
wWinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPWSTR lpCmdLine,int nCmdShow)25 int APIENTRY wWinMain(HINSTANCE hInstance,
26 HINSTANCE hPrevInstance,
27 LPWSTR lpCmdLine,
28 int nCmdShow)
29 {
30 MSG msg;
31
32 UNREFERENCED_PARAMETER(hPrevInstance);
33 UNREFERENCED_PARAMETER(lpCmdLine);
34
35 MyRegisterClass(hInstance);
36
37 if (!InitInstance (hInstance, nCmdShow))
38 return FALSE;
39
40 while (GetMessage(&msg, NULL, 0, 0))
41 {
42 TranslateMessage(&msg);
43 DispatchMessage(&msg);
44 }
45
46 return (int) msg.wParam;
47 }
48
MyRegisterClass(HINSTANCE hInstance)49 ATOM MyRegisterClass(HINSTANCE hInstance)
50 {
51 WNDCLASS wc;
52
53 wc.style = 0;
54 wc.lpfnWndProc = WndProc;
55 wc.cbClsExtra = 0;
56 wc.cbWndExtra = 0;
57 wc.hInstance = hInstance;
58 wc.hIcon = LoadIconW(NULL, IDI_WINLOGO);
59 wc.hCursor = LoadCursorW(NULL, IDC_ARROW);
60 wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
61 wc.lpszMenuName = NULL;
62 wc.lpszClassName = szWindowClass;
63
64 return RegisterClass(&wc);
65 }
66
InitInstance(HINSTANCE hInstance,int nCmdShow)67 BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
68 {
69 HWND hWnd;
70
71 hInst = hInstance;
72
73 hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
74 CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);
75 if (!hWnd)
76 return FALSE;
77
78 ShowWindow(hWnd, nCmdShow);
79 UpdateWindow(hWnd);
80
81 return TRUE;
82 }
83
WndProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam)84 LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
85 {
86 switch (message)
87 {
88 case WM_MOVE:
89 InvalidateRect(hWnd, NULL, TRUE);
90 UpdateWindow(hWnd);
91 break;
92
93 case WM_ERASEBKGND:
94 return (LRESULT)PaintDesktop((HDC)wParam);
95
96 case WM_DESTROY:
97 PostQuitMessage(0);
98 break;
99
100 default:
101 return DefWindowProc(hWnd, message, wParam, lParam);
102 }
103
104 return 0;
105 }
106