1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
|
// include windows.h first to have all definitions available
#include <windows.h>
#include <WNT_Window.hxx>
//***//
//*** This window procedure provides management of the window background. ***//
//*** Background belongs to the window class but we need that windows which ***//
//*** are based on the same class have different backgrounds. So, we are ***//
//*** using window subclassing technique to provide this ability. ***//
//***//
LRESULT CALLBACK WNT_WndProc (
HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam
) {
HDC hDC;
HPALETTE hOldPal = NULL;
WNDPROC lpfnWndProc;
WINDOW_DATA* wd;
WNT_Window* win;
RECT invRect;
wd = (WINDOW_DATA* )GetWindowLongPtr (hwnd, GWLP_USERDATA);
win = (WNT_Window* )wd->WNT_Window_Ptr;
lpfnWndProc = (WNDPROC )win->WndProc();
if ( msg == WM_ERASEBKGND && !( wd -> dwFlags & WDF_NOERASEBKGRND ) ) {
hDC = ( HDC )wParam;
if ( wd -> hPal ) {
hOldPal = SelectPalette ( hDC, wd -> hPal, FALSE );
if ( RealizePalette ( hDC ) )
UpdateColors ( hDC );
} // end if
GetClipBox ( hDC, &invRect );
FillRect ( hDC, &invRect, ( HBRUSH )( win -> HBackground () ) );
if ( wd -> hPal )
SelectPalette ( hDC, hOldPal, FALSE );
return TRUE;
} else if ( msg == WM_MOVE ) {
WINDOWPLACEMENT wp;
wp.length = sizeof ( WINDOWPLACEMENT );
GetWindowPlacement ( hwnd, &wp );
win -> SetPos (
wp.rcNormalPosition.left, wp.rcNormalPosition.top,
wp.rcNormalPosition.right, wp.rcNormalPosition.bottom
);
} // end else
return CallWindowProc ( lpfnWndProc, hwnd, msg, wParam, lParam );
} // end WNT_WndProc
//***//
|