|
|
//+--------------------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 1994 - 1996.
//
// File: dlg.cxx
//
// Contents: Implementation of modeless dialog base class
//
// Classes: CDlg
//
// History: 4-22-1997 DavidMun Created
//
//---------------------------------------------------------------------------
#include "headers.hxx"
#pragma hdrstop
//+--------------------------------------------------------------------------
//
// Member: CDlg::CDlg
//
// Synopsis: ctor
//
// History: 4-22-1997 DavidMun Created
//
//---------------------------------------------------------------------------
CDlg::CDlg(): m_hwnd(NULL) { }
//+--------------------------------------------------------------------------
//
// Member: CDlg::~CDlg
//
// Synopsis: dtor
//
// History: 4-22-1997 DavidMun Created
//
//---------------------------------------------------------------------------
CDlg::~CDlg() { }
//+--------------------------------------------------------------------------
//
// Member: CDlg::_DoModalDlg
//
// Synopsis: Create the dialog and return its window handle
//
// Arguments: [hwndParent] - handle to owner window of dialog to create
// [idd] - resource id of dialog template
//
// Returns: Dialog's return code
//
// History: 04-22-1997 DavidMun Created
//
//---------------------------------------------------------------------------
INT_PTR CDlg::_DoModalDlg( HWND hwndParent, INT idd) const { INT_PTR iResult = DialogBoxParam(GetModuleHandle(NULL), MAKEINTRESOURCE(idd), hwndParent, CDlg::_DlgProc, (LPARAM) this);
return iResult; }
//+--------------------------------------------------------------------------
//
// Member: CDlg::_DoModelessDlg
//
// Synopsis: Create the dialog and return its window handle
//
// Arguments: [hwndParent] - handle to owner window of dialog to create
// [idd] - resource id of dialog template
//
// Returns: Dialog window handle, or NULL on failure
//
// History: 4-22-1997 DavidMun Created
//
//---------------------------------------------------------------------------
HWND CDlg::_DoModelessDlg( HWND hwndParent, INT idd) {
HWND hwnd;
hwnd = CreateDialogParam(GetModuleHandle(NULL), MAKEINTRESOURCE(idd), hwndParent, CDlg::_DlgProc, (LPARAM) this); return hwnd; }
//+--------------------------------------------------------------------------
//
// Member: CDlg::_DlgProc
//
// Synopsis: Dispatch selected messages to derived class
//
// Arguments: standard windows dialog
//
// Returns: standard windows dialog
//
// History: 4-22-1997 DavidMun Created
//
//---------------------------------------------------------------------------
INT_PTR CALLBACK CDlg::_DlgProc( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { BOOL fReturn = TRUE; CDlg *pThis = (CDlg *)GetWindowLongPtr(hwnd, DWLP_USER);
switch (message) { case WM_INITDIALOG: { HRESULT hr = S_OK;
//
// pThis isn't valid because we haven't set DWLP_USER yet. Make
// it valid.
//
pThis = (CDlg*) lParam;
SetWindowLongPtr(hwnd, DWLP_USER, (LONG_PTR) pThis); pThis->m_hwnd = hwnd; BOOL fInitResult = TRUE; hr = pThis->_OnInit(&fInitResult); fReturn = fInitResult;
//
// If the initialization failed do not allow the dialog to start.
//
if (FAILED(hr)) { DestroyWindow(hwnd); } break; }
case WM_COMMAND: fReturn = pThis->_OnCommand(wParam, lParam); break;
case WM_SIZE: fReturn = pThis->_OnSize(wParam, lParam); break;
case WM_GETMINMAXINFO: fReturn = pThis->_OnMinMaxInfo((LPMINMAXINFO) lParam); break;
case WM_NOTIFY: fReturn = pThis->_OnNotify(wParam, lParam); break;
case WM_DRAWITEM: fReturn = pThis->_OnDrawItem(wParam, lParam); break;
case WM_CTLCOLORSTATIC: fReturn = static_cast<ULONG>(pThis->_OnStaticCtlColor((HDC) wParam, (HWND) lParam)); break;
case WM_SYSCOLORCHANGE: pThis->_OnSysColorChange(); break; /*
case WM_SETFOCUS: pThis->_OnSetFocus((HWND)wParam); break; */
case WM_DESTROY: //
// It's possible to get a WM_DESTROY message without having gotten
// a WM_INITDIALOG if loading a dll that the dialog needs (e.g.
// comctl32.dll) fails, so guard pThis access here.
//
if (pThis) { pThis->_OnDestroy(); pThis->m_hwnd = NULL; } break;
case WM_HELP: case WM_CONTEXTMENU: pThis->_OnHelp(message, wParam, lParam); break;
default: fReturn = FALSE; break; } return fReturn; }
#define VERIFY(x) x
//+--------------------------------------------------------------------------
//
// Member: CDlg::_GetChildWindowRect
//
// Synopsis: Init *[prc] with the window rect, in client coordinates, of
// child window [hwndChild].
//
// Arguments: [hwndChild] - child window for which to retrieve rect
// [prc] - pointer to rect struct to receive info
//
// Modifies: *[prc]
//
// History: 07-21-1998 DavidMun Created
//
//---------------------------------------------------------------------------
void CDlg::_GetChildWindowRect( HWND hwndChild, RECT *prc) {
VERIFY(GetWindowRect(hwndChild, prc)); VERIFY(MapWindowPoints(NULL, m_hwnd, (LPPOINT) prc, 2)); }
|