158 lines
2.6 KiB
C++
158 lines
2.6 KiB
C++
|
/*++
|
||
|
|
||
|
Copyright (c) 2000 Microsoft Corporation
|
||
|
|
||
|
Module Name:
|
||
|
|
||
|
Modal Dialog
|
||
|
|
||
|
Abstract:
|
||
|
|
||
|
This contains the abstract class CModalDialog and the trivial sub class
|
||
|
CModalOkDialog which does a simple ok dialog.
|
||
|
|
||
|
Author:
|
||
|
|
||
|
Marc Reyhner 8/28/2000
|
||
|
|
||
|
--*/
|
||
|
|
||
|
#include "stdafx.h"
|
||
|
#include "ModalDialog.h"
|
||
|
#include "eZippy.h"
|
||
|
|
||
|
INT_PTR
|
||
|
CModalDialog::DoModal(
|
||
|
IN LPCTSTR lpTemplate,
|
||
|
IN HWND hWndParent
|
||
|
)
|
||
|
|
||
|
/*++
|
||
|
|
||
|
Routine Description:
|
||
|
|
||
|
This does a modal dialog from the given template.
|
||
|
|
||
|
Arguments:
|
||
|
|
||
|
lpTemplate - Template to use see docs on DialogBoxParam
|
||
|
|
||
|
hWndParent - Parent window for the dialog
|
||
|
|
||
|
Return value:
|
||
|
|
||
|
Dialog return code see docs on DialogBoxParam
|
||
|
|
||
|
--*/
|
||
|
{
|
||
|
return DialogBoxParam(g_hInstance,lpTemplate,hWndParent,_DialogProc,(LPARAM)this);
|
||
|
}
|
||
|
|
||
|
INT_PTR CALLBACK
|
||
|
CModalDialog::_DialogProc(
|
||
|
IN HWND hwndDlg,
|
||
|
IN UINT uMsg,
|
||
|
IN WPARAM wParam,
|
||
|
IN LPARAM lParam
|
||
|
)
|
||
|
|
||
|
/*++
|
||
|
|
||
|
Routine Description:
|
||
|
|
||
|
If this is a WM_INITDIALOG OnCreate is called. Otherwise the non-static
|
||
|
DialogProc function is called.
|
||
|
|
||
|
Arguments:
|
||
|
|
||
|
See win32 DialogProc docs
|
||
|
|
||
|
Return value:
|
||
|
|
||
|
TRUE - Message was handles
|
||
|
|
||
|
FALSE - We did not handle the message
|
||
|
|
||
|
--*/
|
||
|
{
|
||
|
CModalDialog *rDialog;
|
||
|
|
||
|
if (uMsg == WM_INITDIALOG) {
|
||
|
rDialog = (CModalDialog*)lParam;
|
||
|
SetWindowLongPtr(hwndDlg,DWLP_USER,lParam);
|
||
|
return rDialog->OnCreate(hwndDlg);
|
||
|
}
|
||
|
rDialog = (CModalDialog*)GetWindowLongPtr(hwndDlg,DWLP_USER);
|
||
|
if (!rDialog) {
|
||
|
return FALSE;
|
||
|
}
|
||
|
return rDialog->DialogProc(hwndDlg,uMsg,wParam,lParam);
|
||
|
}
|
||
|
|
||
|
INT_PTR
|
||
|
CModalDialog::OnCreate(
|
||
|
IN HWND hWnd
|
||
|
)
|
||
|
|
||
|
/*++
|
||
|
|
||
|
Routine Description:
|
||
|
|
||
|
Empty OnCreate handler for subclasses which don't want to overide this.
|
||
|
There is no need for a subclass to call this function if it does something
|
||
|
in OnCreate
|
||
|
|
||
|
Arguments:
|
||
|
|
||
|
hWnd - the dialog window.
|
||
|
|
||
|
Return value:
|
||
|
|
||
|
TRUE - Always return success (sets keyboard focus).
|
||
|
|
||
|
--*/
|
||
|
{
|
||
|
return TRUE;
|
||
|
}
|
||
|
|
||
|
INT_PTR CALLBACK
|
||
|
CModalOkDialog::DialogProc(
|
||
|
HWND hwndDlg,
|
||
|
UINT uMsg,
|
||
|
WPARAM wParam,
|
||
|
LPARAM lParam
|
||
|
)
|
||
|
|
||
|
/*++
|
||
|
|
||
|
Routine Description:
|
||
|
|
||
|
The one override for CModalOkDialog simply terminates
|
||
|
the dialog when an IDOK or IDCANCEL command is received
|
||
|
|
||
|
Arguments:
|
||
|
|
||
|
See win32 DialogProc docs
|
||
|
|
||
|
Return value:
|
||
|
|
||
|
TRUE - We handled the message
|
||
|
|
||
|
FALSE - We didn't handle the message
|
||
|
|
||
|
--*/
|
||
|
{
|
||
|
WORD command;
|
||
|
|
||
|
if (uMsg == WM_COMMAND) {
|
||
|
command = LOWORD(wParam);
|
||
|
if (command == IDOK||command==IDCANCEL) {
|
||
|
EndDialog(hwndDlg,command);
|
||
|
return TRUE;
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
return FALSE;
|
||
|
}
|