mirror of https://github.com/tongzx/nt5src
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.
105 lines
3.5 KiB
105 lines
3.5 KiB
//+---------------------------------------------------------------------------
|
|
//
|
|
// Microsoft Windows
|
|
// Copyright (C) Microsoft Corporation, 1992 - 1994.
|
|
//
|
|
// File: dialog.cxx
|
|
//
|
|
// Contents:
|
|
//
|
|
// Classes: CHlprDialog
|
|
//
|
|
// Functions: DialogProc
|
|
//
|
|
// History: 4-12-94 stevebl Created
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
#include <windows.h>
|
|
#include "cdialog.h"
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// Member: CHlprDialog::ShowDialog
|
|
//
|
|
// Synopsis: Creates the dialog so that it's DialogProc member function can
|
|
// be invoked.
|
|
//
|
|
// Arguments: [hinst] - handle of the application instance
|
|
// [lpszTemplate] - identifies the dialog box template
|
|
// [hwndOwner] - handle of the owner window
|
|
//
|
|
// Returns: return value from the dialog box
|
|
//
|
|
// History: 4-12-94 stevebl Created
|
|
//
|
|
// Notes: The dialog box object exists until deleted by the caller.
|
|
// It can be shown any number of times.
|
|
//
|
|
// This function is analgous to Windows' DialogBox function. The
|
|
// main difference being that you don't specify a DialogProc;
|
|
// you override the pure virtal function CHlprDialog::DialogProc.
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
int CHlprDialog::ShowDialog(HINSTANCE hinst, LPCTSTR lpszTemplate, HWND hwndOwner)
|
|
{
|
|
_hInstance = hinst;
|
|
return(DialogBoxParam(hinst, lpszTemplate, hwndOwner, (DLGPROC)::DialogProc, (long)this));
|
|
}
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// Function: DialogProc
|
|
//
|
|
// Synopsis: Common DialogProc used by all CHlprDialog class objects.
|
|
//
|
|
// Arguments: [hwndDlg] - handle of dialog box
|
|
// [uMsg] - message
|
|
// [wParam] - first message parameter
|
|
// [lParam] - second message parameter
|
|
//
|
|
// Returns: response from the CHlprDialog::DialogProc method
|
|
//
|
|
// History: 4-12-94 stevebl Created
|
|
//
|
|
// Notes: This procedure is the DialogProc registered for all dialogs
|
|
// created with the CHlprDialog class. It uses the parameter
|
|
// passed with the WM_INITDIALOG message to identify the dialog
|
|
// classes' "this" pointer which it then stores in the window
|
|
// structure's GWL_USERDATA field. All subsequent messages
|
|
// can then be forwarded on to the correct dialog class's
|
|
// DialogProc method by using the pointer stored in the
|
|
// GWL_USERDATA field.
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
BOOL CALLBACK DialogProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
|
{
|
|
CHlprDialog * pdlg;
|
|
switch (uMsg)
|
|
{
|
|
case WM_INITDIALOG:
|
|
// This message is how we identify the dialog object.
|
|
|
|
// get a pointer to the window class object
|
|
pdlg = (CHlprDialog *) lParam;
|
|
// set its USERDATA word to point to the class object
|
|
SetWindowLong(hwndDlg, GWL_USERDATA, (long) pdlg);
|
|
break;
|
|
default:
|
|
// get a pointer to the window class object
|
|
pdlg = (CHlprDialog *) GetWindowLong(hwndDlg, GWL_USERDATA);
|
|
break;
|
|
}
|
|
// and call its message proc method
|
|
if (pdlg != (CHlprDialog *) 0)
|
|
{
|
|
return(pdlg->DialogProc(hwndDlg, uMsg, wParam, lParam));
|
|
}
|
|
else
|
|
{
|
|
return(FALSE);
|
|
}
|
|
}
|
|
|