Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

728 lines
15 KiB

/*++
Copyright (c) Microsoft Corporation. All rights reserved.
Module Name:
Dialog.cpp
Abstract:
Implements the dialog procedures for the
application.
Notes:
ANSI only - must run on Win9x.
History:
01/30/01 rparsons Created
01/10/02 rparsons Revised
--*/
#include "demoapp.h"
extern APPINFO g_ai;
DWORD g_nCount = 0;
//
// Progress bar objects.
//
CProgress cprog;
CProgress cprg;
/*++
Routine Description:
Creates the extraction dialog box. This is the simple little progress
dialog.
Arguments:
hInstance - Applicaiton instance handle.
Return Value:
On success, handle to the dialog.
--*/
HWND
CreateExtractionDialog(
IN HINSTANCE hInstance
)
{
WNDCLASS wndclass;
RECT rcDesktop;
RECT rcDialog;
RECT rcTaskbar;
HWND hWndTaskbar;
int nWidth = 0;
int nHeight = 0;
int nTaskbarHeight = 0;
wndclass.style = CS_HREDRAW | CS_VREDRAW;
wndclass.lpfnWndProc = (WNDPROC)ExtractionDialogProc;
wndclass.cbClsExtra = 0;
wndclass.cbWndExtra = DLGWINDOWEXTRA;
wndclass.hInstance = hInstance;
wndclass.hIcon = NULL;
wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);
wndclass.hbrBackground = (HBRUSH)(COLOR_BTNFACE + 1);
wndclass.lpszMenuName = NULL;
wndclass.lpszClassName = DLGEXTRACT_CLASS;
if (!RegisterClass(&wndclass)) {
return NULL;
}
g_ai.hWndExtractDlg = CreateDialog(hInstance,
MAKEINTRESOURCE(IDD_EXTRACT),
NULL,
ExtractionDialogProc);
if (!g_ai.hWndExtractDlg) {
return NULL;
}
//
// Get the coords of the desktop window and place the dialog.
// Take into account the size of the taskbar.
//
hWndTaskbar = FindWindow("Shell_TrayWnd", NULL);
ZeroMemory(&rcTaskbar, sizeof(RECT));
if (hWndTaskbar) {
GetWindowRect(hWndTaskbar, &rcTaskbar);
}
GetWindowRect(GetDesktopWindow(), &rcDesktop);
GetWindowRect(g_ai.hWndExtractDlg, &rcDialog);
nWidth = rcDialog.right - rcDialog.left;
nHeight = rcDialog.bottom - rcDialog.top;
if (rcTaskbar.top != 0) {
nTaskbarHeight = rcTaskbar.bottom - rcTaskbar.top;
}
InflateRect(&rcDesktop, -5, -5);
SetWindowPos(g_ai.hWndExtractDlg,
HWND_TOPMOST,
rcDesktop.right - nWidth,
rcDesktop.bottom - nHeight - nTaskbarHeight,
0,
0,
SWP_NOSIZE | SWP_SHOWWINDOW);
return g_ai.hWndExtractDlg;
}
/*++
Routine Description:
Runs the message loop for extraction dialog.
Arguments:
hWnd - Handle to the window.
uMsg - Windows message.
wParam - Additional message info.
lParam - Additional message info.
Return Value:
TRUE if handled, FALSE otherwise.
--*/
INT_PTR
CALLBACK
ExtractionDialogProc(
IN HWND hWnd,
IN UINT uMsg,
IN WPARAM wParam,
IN LPARAM lParam
)
{
switch (uMsg) {
case WM_INITDIALOG:
//
// Create the progress bar and enable the timer
//
cprog.Create(hWnd, g_ai.hInstance, "PROGBAR", 58, 73, 270, 20);
cprog.SetMin(g_nCount);
cprog.SetMax(100);
cprog.SetPos(g_nCount);
SetTimer(hWnd, IDC_TIMER, 35, NULL);
break;
case WM_TIMER:
cprog.SetPos(++g_nCount);
if (cprog.GetPos() == 100) {
KillTimer(hWnd, IDC_TIMER);
DestroyWindow(hWnd);
}
break;
default:
break;
}
return FALSE;
}
/*++
Routine Description:
Runs the message loop for welcome dialog.
Arguments:
hWnd - Handle to the window.
uMsg - Windows message.
wParam - Additional message info.
lParam - Additional message info.
Return Value:
TRUE if handled, FALSE otherwise.
--*/
INT_PTR
CALLBACK
WelcomeDialogProc(
IN HWND hWnd,
IN UINT uMsg,
IN WPARAM wParam,
IN LPARAM lParam
)
{
switch (uMsg) {
case WM_INITDIALOG:
SetWindowPos(hWnd, HWND_TOP, 0,0,0,0, SWP_NOMOVE | SWP_NOSIZE);
SetForegroundWindow(hWnd);
SetFocus(GetDlgItem(hWnd, IDOK));
return FALSE;
case WM_CLOSE:
//
// Pop up the 'do you want to exit' dialog.
//
DialogBox(g_ai.hInstance,
MAKEINTRESOURCE(IDD_EXIT),
hWnd,
ExitSetupDialogProc);
break;
case WM_COMMAND:
switch (LOWORD(wParam)) {
case IDOK:
//
// See if the left Ctrl key is down.
//
if (GetKeyState(VK_LCONTROL) & 0x80000000) {
TestIncludeExclude(hWnd);
} else {
EndDialog(hWnd, 0);
}
break;
case IDCANCEL:
//
// Pop up the 'do you want to exit' dialog.
//
DialogBox(g_ai.hInstance,
MAKEINTRESOURCE(IDD_EXIT),
hWnd,
ExitSetupDialogProc);
break;
default:
break;
}
default:
break;
}
return FALSE;
}
/*++
Routine Description:
Runs the message loop for exit setup dialog.
Arguments:
hWnd - Handle to the window.
uMsg - Windows message.
wParam - Additional message info.
lParam - Additional message info.
Return Value:
TRUE if handled, FALSE otherwise.
--*/
INT_PTR
CALLBACK
ExitSetupDialogProc(
IN HWND hWnd,
IN UINT uMsg,
IN WPARAM wParam,
IN LPARAM lParam
)
{
switch (uMsg) {
case WM_CLOSE:
EndDialog(hWnd, 0);
break;
case WM_COMMAND:
switch (LOWORD(wParam)) {
case IDC_EXIT_RESUME:
EndDialog(hWnd, 0);
break;
case IDC_EXIT_EXIT:
g_ai.fClosing = TRUE;
EndDialog(hWnd, 0);
PostQuitMessage(0);
break;
default:
break;
}
default:
break;
}
return FALSE;
}
/*++
Routine Description:
Runs the message loop for the installed components dialog.
Arguments:
hWnd - Handle to the window.
uMsg - Windows message.
wParam - Additional message info.
lParam - Additional message info.
Return Value:
TRUE if handled, FALSE otherwise.
--*/
INT_PTR
CALLBACK
CheckComponentDialogProc(
IN HWND hWnd,
IN UINT uMsg,
IN WPARAM wParam,
IN LPARAM lParam
)
{
switch (uMsg) {
case WM_INITDIALOG:
ShowWindow(hWnd, SW_SHOWNORMAL);
UpdateWindow(hWnd);
SetTimer(hWnd, IDC_TIMER, 3000, NULL);
break;
case WM_TIMER:
KillTimer(hWnd, IDC_TIMER);
if (g_ai.fEnableBadFunc) {
BadLoadBogusDll();
}
EndDialog(hWnd, 0);
break;
default:
break;
}
return FALSE;
}
/*++
Routine Description:
Runs the message loop for the free disk space dialog.
Arguments:
hWnd - Handle to the window.
uMsg - Windows message.
wParam - Additional message info.
lParam - Additional message info.
Return Value:
TRUE if handled, FALSE otherwise.
--*/
INT_PTR
CALLBACK
CheckFreeDiskSpaceDialogProc(
IN HWND hWnd,
IN UINT uMsg,
IN WPARAM wParam,
IN LPARAM lParam
)
{
switch (uMsg) {
case WM_INITDIALOG:
ShowWindow(hWnd, SW_SHOWNORMAL);
UpdateWindow(hWnd);
SetTimer(hWnd, IDC_TIMER, 3000, NULL);
break;
case WM_TIMER:
{
BOOL bReturn = FALSE;
char szError[MAX_PATH];
KillTimer(hWnd, IDC_TIMER);
if (g_ai.fEnableBadFunc) {
bReturn = BadGetFreeDiskSpace();
if (!bReturn) {
LoadString(g_ai.hInstance, IDS_NO_DISK_SPACE, szError, sizeof(szError));
MessageBox(hWnd, szError, 0, MB_ICONERROR);
}
EndDialog(hWnd, 0);
}
break;
}
default:
break;
}
return FALSE;
}
/*++
Routine Description:
Runs the message loop for the ready to copy dialog box.
Arguments:
hWnd - Handle to the window.
uMsg - Windows message.
wParam - Additional message info.
lParam - Additional message info.
Return Value:
TRUE if handled, FALSE otherwise.
--*/
INT_PTR
CALLBACK
ReadyToCopyDialogProc(
IN HWND hWnd,
IN UINT uMsg,
IN WPARAM wParam,
IN LPARAM lParam
)
{
switch (uMsg) {
case WM_INITDIALOG:
SetFocus(GetDlgItem(hWnd, IDOK));
return FALSE;
case WM_CLOSE:
//
// Pop up the 'do you want to exit' dialog
//
DialogBox(g_ai.hInstance,
MAKEINTRESOURCE(IDD_EXIT),
hWnd,
ExitSetupDialogProc);
break;
case WM_COMMAND:
switch (LOWORD(wParam)) {
case IDOK:
EndDialog(hWnd, 0);
break;
case IDCANCEL:
//
// Pop up the 'do you want to exit' dialog
//
DialogBox(g_ai.hInstance,
MAKEINTRESOURCE(IDD_EXIT),
hWnd,
ExitSetupDialogProc);
break;
default:
break;
}
default:
break;
}
return FALSE;
}
/*++
Routine Description:
Runs the message loop for the copy files dialog.
Arguments:
hWnd - Handle to the window.
uMsg - Windows message.
wParam - Additional message info.
lParam - Additional message info.
Return Value:
TRUE if handled, FALSE otherwise.
--*/
INT_PTR
CALLBACK
CopyFilesDialogProc(
IN HWND hWnd,
IN UINT uMsg,
IN WPARAM wParam,
IN LPARAM lParam
)
{
switch (uMsg) {
case WM_INITDIALOG:
//
// Create the progress bar and enable the timer
//
g_nCount = 0;
cprg.Create(hWnd, g_ai.hInstance, "PROGBAR2", 10, 49, 415, 30);
cprg.SetMin(g_nCount);
cprg.SetMax(100);
cprg.SetPos(g_nCount);
SetTimer(hWnd, IDC_TIMER, 35, NULL);
SetDlgItemText(hWnd, IDT_COPY_LABEL, "Copying files...");
//
// The progress bar is for demonstration sake.
// Copy the files to \Program Files\Compatibility Demo
//
CopyAppFiles(hWnd);
break;
case WM_TIMER:
cprg.SetPos(++g_nCount);
if (cprg.GetPos() == 100) {
KillTimer(hWnd, IDC_TIMER);
EndDialog(hWnd, 0);
}
break;
default:
break;
}
return FALSE;
}
/*++
Routine Description:
Runs the message loop for the view readme dialog.
Arguments:
hWnd - Handle to the window.
uMsg - Windows message.
wParam - Additional message info.
lParam - Additional message info.
Return Value:
TRUE if handled, FALSE otherwise.
--*/
INT_PTR
CALLBACK
ViewReadmeDialogProc(
IN HWND hWnd,
IN UINT uMsg,
IN WPARAM wParam,
IN LPARAM lParam
)
{
switch (uMsg) {
case WM_INITDIALOG:
//
// Make the dialog "flash" -
// ForceApplicationFocus will fix this.
//
SetForegroundWindow(hWnd);
SetFocus(GetDlgItem(hWnd, IDOK));
break;
case WM_CLOSE:
//
// Pop up the 'do you want to exit' dialog.
//
DialogBox(g_ai.hInstance,
MAKEINTRESOURCE(IDD_EXIT),
hWnd,
ExitSetupDialogProc);
break;
case WM_COMMAND:
switch (LOWORD(wParam)) {
case IDOK:
//
// If the user has requested that the readme be displayed,
// show it.
//
if (IsDlgButtonChecked(hWnd, IDR_VIEW_README)) {
if (g_ai.fEnableBadFunc) {
BadDisplayReadme(FALSE);
} else {
BadDisplayReadme(TRUE);
}
}
EndDialog(hWnd, 0);
break;
default:
break;
}
default:
break;
}
return FALSE;
}
/*++
Routine Description:
Runs the message loop for the reboot dialog.
Arguments:
hWnd - Handle to the window.
uMsg - Windows message.
wParam - Additional message info.
lParam - Additional message info.
Return Value:
TRUE if handled, FALSE otherwise.
--*/
INT_PTR
CALLBACK
RebootDialogProc(
IN HWND hWnd,
IN UINT uMsg,
IN WPARAM wParam,
IN LPARAM lParam
)
{
switch (uMsg) {
case WM_INITDIALOG:
//
// Default to restart the computer.
//
CheckDlgButton(hWnd, IDR_RESTART_NOW, BST_CHECKED);
SetFocus(GetDlgItem(hWnd, IDOK));
return FALSE;
case WM_COMMAND:
switch (LOWORD(wParam)) {
case IDOK:
//
// If the user requested a reboot, do it.
//
if (IsDlgButtonChecked(hWnd, IDR_RESTART_NOW)) {
if (g_ai.fEnableBadFunc) {
BadRebootComputer(FALSE);
} else {
BadRebootComputer(TRUE);
}
}
EndDialog(hWnd, 0);
PostQuitMessage(0);
break;
default:
break;
}
default:
break;
}
return FALSE;
}