Source code of Windows XP (NT5)
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

//+---------------------------------------------------------------------------
//
// 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);
}
}