3 * Copyright (C) 2001, 2002, 2003 ReactOS Team
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
10 * This program 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
13 * GNU General Public License for more details.
15 * You should have received a copy of the GNU General Public License along
16 * with this program; if not, write to the Free Software Foundation, Inc.,
17 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
21 * COPYRIGHT: See COPYING in the top level directory
22 * PROJECT: ReactOS welcome/autorun application
23 * FILE: subsys/system/welcome/welcome.c
24 * PROGRAMMERS: Eric Kohl
25 * Casper S. Hornstrup (chorns@users.sourceforge.net)
28 * This utility can be customized by modifying the resources.
29 * Please do NOT change the source code in order to customize this
30 * utility but change the resources!
33 #include <reactos/version.h>
43 #define LIGHT_BLUE 0x00F7EFD6
44 #define DARK_BLUE 0x008C7B6B
46 #define TITLE_WIDTH 480
47 #define TITLE_HEIGHT 93
49 #define TOPIC_DESC_LENGTH 1024
51 /* GLOBALS ******************************************************************/
53 TCHAR szFrameClass
[] = TEXT("WelcomeWindowClass");
54 TCHAR szAppTitle
[80];
59 HWND hwndDefaultTopic
= 0;
64 int nDefaultTopic
= -1;
66 ULONG ulInnerWidth
= TITLE_WIDTH
;
67 ULONG ulInnerHeight
= (TITLE_WIDTH
* 3) / 4;
68 ULONG ulTitleHeight
= TITLE_HEIGHT
+ 3;
70 HBITMAP hTitleBitmap
= 0;
71 HBITMAP hDefaultTopicBitmap
= 0;
72 HBITMAP hTopicBitmap
[10];
73 HWND hwndTopicButton
[10];
77 HFONT hfontTopicButton
;
78 HFONT hfontTopicTitle
;
79 HFONT hfontTopicDescription
;
80 HFONT hfontCheckButton
;
94 MainWndProc (HWND hWnd
, UINT uMsg
, WPARAM wParam
, LPARAM lParam
);
97 /* FUNCTIONS ****************************************************************/
100 _tWinMain(HINSTANCE hInst
,
101 HINSTANCE hPrevInstance
,
114 DWORD dwStyle
= WS_OVERLAPPED
| WS_CLIPCHILDREN
| WS_CLIPSIBLINGS
|
115 WS_CAPTION
| WS_SYSMENU
| WS_MINIMIZEBOX
;
118 UNREFERENCED_PARAMETER(hPrevInstance
);
119 UNREFERENCED_PARAMETER(lpszCmdLine
);
124 hMainIcon
= LoadIcon (hInstance
, MAKEINTRESOURCE(IDI_MAIN
));
126 /* Register the window class */
127 wndclass
.style
= CS_HREDRAW
| CS_VREDRAW
;
128 wndclass
.lpfnWndProc
= (WNDPROC
)MainWndProc
;
129 wndclass
.cbClsExtra
= 0;
130 wndclass
.cbWndExtra
= 0;
131 wndclass
.hInstance
= hInstance
;
132 wndclass
.hIcon
= hMainIcon
;
133 wndclass
.hCursor
= LoadCursor (NULL
, IDC_ARROW
);
134 wndclass
.hbrBackground
= 0;
135 wndclass
.lpszMenuName
= NULL
;
136 wndclass
.lpszClassName
= szFrameClass
;
138 wndclass
.cbSize
= sizeof(WNDCLASSEX
);
139 wndclass
.hIconSm
= 0;
141 RegisterClassEx(&wndclass
);
143 hTitleBitmap
= LoadBitmap (hInstance
, MAKEINTRESOURCE(IDB_TITLEBITMAP
));
144 if (hTitleBitmap
!= NULL
)
146 GetObject(hTitleBitmap
, sizeof(BITMAP
), &BitmapInfo
);
147 ulInnerWidth
= BitmapInfo
.bmWidth
;
148 ulInnerHeight
= (ulInnerWidth
* 3) / 4;
149 ulTitleHeight
= BitmapInfo
.bmHeight
+ 3;
150 DeleteObject(hTitleBitmap
);
152 ulInnerHeight
-= GetSystemMetrics(SM_CYCAPTION
);
155 rcWindow
.bottom
= ulInnerHeight
- 1;
157 rcWindow
.right
= ulInnerWidth
- 1;
159 AdjustWindowRect(&rcWindow
,
162 xWidth
= rcWindow
.right
- rcWindow
.left
;
163 yHeight
= rcWindow
.bottom
- rcWindow
.top
;
165 xPos
= (GetSystemMetrics(SM_CXSCREEN
) - xWidth
) / 2;
166 yPos
= (GetSystemMetrics(SM_CYSCREEN
) - yHeight
) / 2;
168 rcTitlePanel
.top
= 0;
169 rcTitlePanel
.bottom
= ulTitleHeight
;
170 rcTitlePanel
.left
= 0;
171 rcTitlePanel
.right
= ulInnerWidth
- 1;
173 rcLeftPanel
.top
= rcTitlePanel
.bottom
;
174 rcLeftPanel
.bottom
= ulInnerHeight
- 1;
175 rcLeftPanel
.left
= 0;
176 rcLeftPanel
.right
= ulInnerWidth
/ 3;
178 rcRightPanel
.top
= rcLeftPanel
.top
;
179 rcRightPanel
.bottom
= rcLeftPanel
.bottom
;
180 rcRightPanel
.left
= rcLeftPanel
.right
;
181 rcRightPanel
.right
= ulInnerWidth
- 1;
183 if (!LoadString(hInstance
, (UINT_PTR
)MAKEINTRESOURCE(IDS_APPTITLE
), szAppTitle
, 80))
184 _tcscpy(szAppTitle
, TEXT("ReactOS Welcome"));
186 /* Create main window */
187 hwndMain
= CreateWindow(szFrameClass
,
199 hSystemMenu
= GetSystemMenu(hwndMain
, FALSE
);
202 RemoveMenu(hSystemMenu
, SC_SIZE
, MF_BYCOMMAND
);
203 RemoveMenu(hSystemMenu
, SC_MAXIMIZE
, MF_BYCOMMAND
);
206 ShowWindow(hwndMain
, nCmdShow
);
207 UpdateWindow(hwndMain
);
209 while (GetMessage(&msg
, NULL
, 0, 0) != FALSE
)
211 TranslateMessage(&msg
);
212 DispatchMessage(&msg
);
220 ButtonSubclassWndProc (HWND hWnd
, UINT uMsg
, WPARAM wParam
, LPARAM lParam
)
224 if (uMsg
== WM_MOUSEMOVE
)
226 i
= GetWindowLongPtr(hWnd
, GWL_ID
);
231 InvalidateRect(hwndMain
, &rcRightPanel
, TRUE
);
235 return(CallWindowProc(fnOldBtn
, hWnd
, uMsg
, wParam
, lParam
));
240 RunApplication(int nTopic
)
246 InvalidateRect(hwndMain
, NULL
, TRUE
);
248 nLength
= LoadString(hInstance
, IDS_TOPICACTION0
+ nTopic
, AppName
, 256);
252 if (!_tcsicmp(AppName
, TEXT("<exit>")))
255 if (!_tcsnicmp(AppName
, TEXT("<msg>"), 5))
257 MessageBox(hwndMain
, AppName
+ 5, TEXT("ReactOS"), MB_OK
| MB_TASKMODAL
);
261 if (_tcsicmp(AppName
, TEXT("explorer.exe")) == 0)
262 _tcscpy(Parameters
, TEXT("\\"));
266 ShellExecute(NULL
, TEXT("open"), AppName
, Parameters
, NULL
, SW_SHOWDEFAULT
);
273 SubclassButton(HWND hWnd
)
275 fnOldBtn
= (WNDPROC
)SetWindowLongPtr(hWnd
, GWL_WNDPROC
, (DWORD_PTR
)ButtonSubclassWndProc
);
280 GetButtonHeight(HDC hDC
,
289 rect
.right
= dwWidth
- 20;
293 hOldFont
= (HFONT
) SelectObject(hDC
, hFont
);
294 DrawText(hDC
, szText
, -1, &rect
, DT_TOP
| DT_CALCRECT
| DT_WORDBREAK
);
295 SelectObject(hDC
, hOldFont
);
297 return(rect
.bottom
-rect
.top
+ 14);
302 OnCreate(HWND hWnd
, WPARAM wParam
, LPARAM lParam
)
310 UNREFERENCED_PARAMETER(wParam
);
311 UNREFERENCED_PARAMETER(lParam
);
313 hbrLightBlue
= CreateSolidBrush(LIGHT_BLUE
);
314 hbrDarkBlue
= CreateSolidBrush(DARK_BLUE
);
315 hbrRightPanel
= CreateSolidBrush(0x00FFFFFF);
317 /* Topic title font */
318 hfontTopicTitle
= CreateFont(-18,0,0,0,FW_NORMAL
,
319 FALSE
,FALSE
,FALSE
,ANSI_CHARSET
,
326 /* Topic description font */
327 hfontTopicDescription
= CreateFont(-11,0,0,0,FW_THIN
,
328 FALSE
,FALSE
,FALSE
,ANSI_CHARSET
,
335 /* Topic button font */
336 hfontTopicButton
= CreateFont(-11,0,0,0,FW_BOLD
,
337 FALSE
,FALSE
,FALSE
,ANSI_CHARSET
,
344 /* Load title bitmap */
345 if (hTitleBitmap
!= 0)
346 hTitleBitmap
= LoadBitmap (hInstance
, MAKEINTRESOURCE(IDB_TITLEBITMAP
));
348 /* Load topic bitmaps */
349 hDefaultTopicBitmap
= LoadBitmap (hInstance
, MAKEINTRESOURCE(IDB_DEFAULTTOPICBITMAP
));
350 for (i
=0;i
< 10; i
++)
352 hTopicBitmap
[i
] = LoadBitmap (hInstance
, MAKEINTRESOURCE(IDB_TOPICBITMAP0
+i
));
355 ScreenDC
= GetWindowDC(hWnd
);
356 hdcMem
= CreateCompatibleDC (ScreenDC
);
357 ReleaseDC(hWnd
, ScreenDC
);
359 /* load and create buttons */
360 dwTop
= rcLeftPanel
.top
;
361 for (i
= 0; i
< 10; i
++)
363 nLength
= LoadString(hInstance
, IDS_TOPICBUTTON0
+ i
, szText
, 80);
366 dwHeight
= GetButtonHeight(hdcMem
,
369 rcLeftPanel
.right
- rcLeftPanel
.left
);
371 hwndTopicButton
[i
] = CreateWindow(TEXT("BUTTON"),
373 WS_CHILDWINDOW
| WS_VISIBLE
| WS_TABSTOP
| BS_MULTILINE
| BS_OWNERDRAW
,
376 rcLeftPanel
.right
- rcLeftPanel
.left
,
382 hwndDefaultTopic
= hwndTopicButton
[i
];
384 SubclassButton(hwndTopicButton
[i
]);
385 SendMessage(hwndTopicButton
[i
], WM_SETFONT
, (WPARAM
)hfontTopicButton
, MAKELPARAM(TRUE
,0));
389 hwndTopicButton
[i
] = 0;
395 /* Create exit button */
396 nLength
= LoadString(hInstance
, IDS_CLOSETEXT
, szText
, 80);
399 hwndCloseButton
= CreateWindow(TEXT("BUTTON"),
401 WS_VISIBLE
| WS_CHILD
| BS_FLAT
,
402 rcRightPanel
.right
- 10 - 57,
403 rcRightPanel
.bottom
- 10 - 21,
407 (HMENU
)IDC_CLOSEBUTTON
,
410 hwndDefaultTopic
= 0;
412 SendMessage(hwndCloseButton
, WM_SETFONT
, (WPARAM
)hfontTopicButton
, MAKELPARAM(TRUE
,0));
419 /* Create checkbox */
420 nLength
= LoadString(hInstance
, IDS_CHECKTEXT
,szText
,80);
423 hfontCheckButton
= CreateFont(-10,0,0,0,FW_THIN
,FALSE
,FALSE
,FALSE
,ANSI_CHARSET
,
430 hwndCheckButton
= CreateWindow(TEXT("BUTTON"),
432 WS_VISIBLE
| WS_CHILD
| BS_AUTOCHECKBOX
,
433 rcLeftPanel
.left
+ 8,
434 rcLeftPanel
.bottom
- 8 - 13,
435 rcLeftPanel
.right
- rcLeftPanel
.left
- 16,
438 (HMENU
)IDC_CHECKBUTTON
,
441 SendMessage(hwndCheckButton
, WM_SETFONT
, (WPARAM
)hfontCheckButton
, MAKELPARAM(TRUE
,0));
446 hfontCheckButton
= 0;
454 OnCommand(HWND hWnd
, WPARAM wParam
, LPARAM lParam
)
456 UNREFERENCED_PARAMETER(lParam
);
458 if (LOWORD(wParam
) == IDC_CLOSEBUTTON
)
462 else if ((LOWORD(wParam
) < 10))
464 if (RunApplication(LOWORD(wParam
)) == FALSE
)
474 PaintBanner(HDC hdc
, LPRECT rcPanel
)
480 hOldBitmap
= (HBITMAP
) SelectObject(hdcMem
, hTitleBitmap
);
484 rcPanel
->right
- rcPanel
->left
,
486 hdcMem
, 0, 0, SRCCOPY
);
487 SelectObject(hdcMem
, hOldBitmap
);
490 hOldBrush
= (HBRUSH
) SelectObject(hdc
, hbrDarkBlue
);
494 rcPanel
->right
- rcPanel
->left
,
498 SelectObject(hdc
, hOldBrush
);
503 OnPaint(HWND hWnd
, WPARAM wParam
, LPARAM lParam
)
509 HBITMAP hOldBitmap
= 0;
512 RECT rcTitle
, rcDescription
;
513 TCHAR szTopicTitle
[80];
514 TCHAR szTopicDesc
[TOPIC_DESC_LENGTH
];
519 UNREFERENCED_PARAMETER(wParam
);
520 UNREFERENCED_PARAMETER(lParam
);
522 hdc
= BeginPaint(hWnd
, &ps
);
525 PaintBanner(hdc
, &rcTitlePanel
);
528 hOldBrush
= (HBRUSH
) SelectObject (hdc
, hbrLightBlue
);
532 rcLeftPanel
.right
- rcLeftPanel
.left
,
533 rcLeftPanel
.bottom
- rcLeftPanel
.top
,
535 SelectObject(hdc
, hOldBrush
);
538 hOldBrush
= (HBRUSH
) SelectObject (hdc
, WHITE_BRUSH
);
542 rcRightPanel
.right
- rcRightPanel
.left
,
543 rcRightPanel
.bottom
- rcRightPanel
.top
,
545 SelectObject(hdc
, hOldBrush
);
547 /* Draw dark verical line */
548 hPen
= CreatePen(PS_SOLID
, 0, DARK_BLUE
);
549 hOldPen
= (HPEN
) SelectObject(hdc
, hPen
);
550 MoveToEx(hdc
, rcRightPanel
.left
, rcRightPanel
.top
, NULL
);
551 LineTo(hdc
, rcRightPanel
.left
, rcRightPanel
.bottom
);
552 SelectObject(hdc
, hOldPen
);
555 /* Draw topic bitmap */
556 if ((nTopic
== -1) && (hDefaultTopicBitmap
!= 0))
558 GetObject(hDefaultTopicBitmap
, sizeof(BITMAP
), &bmpInfo
);
559 hOldBitmap
= (HBITMAP
) SelectObject (hdcMem
, hDefaultTopicBitmap
);
561 rcRightPanel
.right
- bmpInfo
.bmWidth
,
562 rcRightPanel
.bottom
- bmpInfo
.bmHeight
,
570 else if ((nTopic
!= -1) && (hTopicBitmap
[nTopic
] != 0))
572 GetObject(hTopicBitmap
[nTopic
], sizeof(BITMAP
), &bmpInfo
);
573 hOldBitmap
= (HBITMAP
) SelectObject (hdcMem
, hTopicBitmap
[nTopic
]);
575 rcRightPanel
.right
- bmpInfo
.bmWidth
,
576 rcRightPanel
.bottom
- bmpInfo
.bmHeight
,
587 nLength
= LoadString(hInstance
, IDS_DEFAULTTOPICTITLE
, szTopicTitle
, 80);
591 nLength
= LoadString(hInstance
, IDS_TOPICTITLE0
+ nTopic
, szTopicTitle
, 80);
593 nLength
= LoadString(hInstance
, IDS_DEFAULTTOPICTITLE
, szTopicTitle
, 80);
598 nLength
= LoadString(hInstance
, IDS_DEFAULTTOPICDESC
, szTopicDesc
, TOPIC_DESC_LENGTH
);
602 nLength
= LoadString(hInstance
, IDS_TOPICDESC0
+ nTopic
, szTopicDesc
, TOPIC_DESC_LENGTH
);
604 nLength
= LoadString(hInstance
, IDS_DEFAULTTOPICDESC
, szTopicDesc
, TOPIC_DESC_LENGTH
);
607 SetBkMode(hdc
, TRANSPARENT
);
609 /* Draw version information */
610 wsprintf(version
, TEXT("ReactOS %d.%d.%d"),
611 KERNEL_VERSION_MAJOR
,
612 KERNEL_VERSION_MINOR
,
613 KERNEL_VERSION_PATCH_LEVEL
);
615 rcTitle
.left
= rcLeftPanel
.left
+ 8;
616 rcTitle
.right
= rcLeftPanel
.right
- 5;
617 rcTitle
.top
= rcLeftPanel
.bottom
- 40;
618 rcTitle
.bottom
= rcLeftPanel
.bottom
- 5;
619 hOldFont
= (HFONT
) SelectObject(hdc
, hfontTopicDescription
);
620 DrawText(hdc
, version
, -1, &rcTitle
, DT_BOTTOM
| DT_CALCRECT
| DT_SINGLELINE
);
621 DrawText(hdc
, version
, -1, &rcTitle
, DT_BOTTOM
| DT_SINGLELINE
);
622 SelectObject(hdc
, hOldFont
);
624 /* Draw topic title */
625 rcTitle
.left
= rcRightPanel
.left
+ 12;
626 rcTitle
.right
= rcRightPanel
.right
- 8;
627 rcTitle
.top
= rcRightPanel
.top
+ 8;
628 rcTitle
.bottom
= rcTitle
.top
+ 57;
629 hOldFont
= (HFONT
) SelectObject(hdc
, hfontTopicTitle
);
630 DrawText(hdc
, szTopicTitle
, -1, &rcTitle
, DT_TOP
| DT_CALCRECT
);
632 SetTextColor(hdc
, DARK_BLUE
);
633 DrawText(hdc
, szTopicTitle
, -1, &rcTitle
, DT_TOP
);
635 /* Draw topic description */
636 rcDescription
.left
= rcRightPanel
.left
+ 12;
637 rcDescription
.right
= rcRightPanel
.right
- 8;
638 rcDescription
.top
= rcTitle
.bottom
+ 8;
639 rcDescription
.bottom
= rcRightPanel
.bottom
- 20;
641 SelectObject(hdc
, hfontTopicDescription
);
642 SetTextColor(hdc
, 0x00000000);
643 DrawText(hdc
, szTopicDesc
, -1, &rcDescription
, DT_TOP
| DT_WORDBREAK
);
645 SetBkMode(hdc
, OPAQUE
);
646 SelectObject(hdc
, hOldFont
);
648 SelectObject (hdcMem
, hOldBrush
);
649 SelectObject (hdcMem
, hOldBitmap
);
658 OnDrawItem(HWND hWnd
, WPARAM wParam
, LPARAM lParam
)
660 LPDRAWITEMSTRUCT lpDis
= (LPDRAWITEMSTRUCT
)lParam
;
666 UNREFERENCED_PARAMETER(hWnd
);
667 UNREFERENCED_PARAMETER(wParam
);
669 if (lpDis
->hwndItem
== hwndCloseButton
)
671 DrawFrameControl(lpDis
->hDC
,
674 DFCS_BUTTONPUSH
| DFCS_FLAT
);
678 if (lpDis
->CtlID
== (ULONG
)nTopic
)
679 hOldBrush
= (HBRUSH
) SelectObject(lpDis
->hDC
, hbrRightPanel
);
681 hOldBrush
= (HBRUSH
) SelectObject(lpDis
->hDC
, hbrLightBlue
);
687 lpDis
->rcItem
.bottom
,
689 SelectObject(lpDis
->hDC
, hOldBrush
);
691 hPen
= CreatePen(PS_SOLID
, 0, DARK_BLUE
);
692 hOldPen
= (HPEN
) SelectObject(lpDis
->hDC
, hPen
);
693 MoveToEx(lpDis
->hDC
, lpDis
->rcItem
.left
, lpDis
->rcItem
.bottom
-1, NULL
);
694 LineTo(lpDis
->hDC
, lpDis
->rcItem
.right
, lpDis
->rcItem
.bottom
-1);
695 SelectObject(lpDis
->hDC
, hOldPen
);
698 InflateRect(&lpDis
->rcItem
, -10, -4);
699 OffsetRect(&lpDis
->rcItem
, 0, 1);
700 GetWindowText(lpDis
->hwndItem
, szText
, 80);
701 SetTextColor(lpDis
->hDC
, 0x00000000);
702 iBkMode
= SetBkMode(lpDis
->hDC
, TRANSPARENT
);
703 DrawText(lpDis
->hDC
, szText
, -1, &lpDis
->rcItem
, DT_TOP
| DT_LEFT
| DT_WORDBREAK
);
704 SetBkMode(lpDis
->hDC
, iBkMode
);
712 OnMouseMove(HWND hWnd
, WPARAM wParam
, LPARAM lParam
)
714 UNREFERENCED_PARAMETER(wParam
);
715 UNREFERENCED_PARAMETER(lParam
);
721 InvalidateRect(hwndMain
, &rcRightPanel
, TRUE
);
729 OnCtlColorStatic(HWND hWnd
, WPARAM wParam
, LPARAM lParam
)
731 UNREFERENCED_PARAMETER(hWnd
);
733 if ((HWND
)lParam
== hwndCheckButton
)
735 SetBkColor((HDC
)wParam
, LIGHT_BLUE
);
736 return((LRESULT
)hbrLightBlue
);
744 OnActivate(HWND hWnd
, WPARAM wParam
, LPARAM lParam
)
746 UNREFERENCED_PARAMETER(hWnd
);
747 UNREFERENCED_PARAMETER(wParam
);
748 UNREFERENCED_PARAMETER(lParam
);
750 InvalidateRect(hwndMain
, &rcRightPanel
, TRUE
);
757 OnDestroy(HWND hWnd
, WPARAM wParam
, LPARAM lParam
)
761 UNREFERENCED_PARAMETER(hWnd
);
762 UNREFERENCED_PARAMETER(wParam
);
763 UNREFERENCED_PARAMETER(lParam
);
767 if (hwndTopicButton
[i
] != 0)
768 DestroyWindow(hwndTopicButton
[i
]);
771 if (hwndCloseButton
!= 0)
772 DestroyWindow(hwndCloseButton
);
774 if (hwndCheckButton
!= 0)
775 DestroyWindow(hwndCheckButton
);
780 DeleteObject(hDefaultTopicBitmap
);
781 DeleteObject(hTitleBitmap
);
784 if (hTopicBitmap
[i
] != 0)
785 DeleteObject(hTopicBitmap
[i
]);
788 DeleteObject(hfontTopicTitle
);
789 DeleteObject(hfontTopicDescription
);
790 DeleteObject(hfontTopicButton
);
792 if (hfontCheckButton
!= 0)
793 DeleteObject(hfontCheckButton
);
795 DeleteObject(hbrLightBlue
);
796 DeleteObject(hbrDarkBlue
);
797 DeleteObject(hbrRightPanel
);
804 MainWndProc(HWND hWnd
,
812 return(OnCreate(hWnd
, wParam
, lParam
));
815 return(OnCommand(hWnd
, wParam
, lParam
));
818 return(OnActivate(hWnd
, wParam
, lParam
));
821 return(OnPaint(hWnd
, wParam
, lParam
));
824 return(OnDrawItem(hWnd
, wParam
, lParam
));
826 case WM_CTLCOLORSTATIC
:
827 return(OnCtlColorStatic(hWnd
, wParam
, lParam
));
830 return(OnMouseMove(hWnd
, wParam
, lParam
));
833 OnDestroy(hWnd
, wParam
, lParam
);
838 return(DefWindowProc(hWnd
, uMsg
, wParam
, lParam
));