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
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;
|
|
}
|