Windows2003-3790/termsrv/newclient/clshell/mallocdbgdlg.cpp
2020-09-30 16:53:55 +02:00

196 lines
6.4 KiB
C++

//
// mallocdbgdlg.cpp: mallocdbg dialog box
//
#include "stdafx.h"
#define TRC_GROUP TRC_GROUP_UI
#define TRC_FILE "mallocdbgdlg"
#include <atrcapi.h>
#include "mallocdbgdlg.h"
#include "sh.h"
#ifdef DC_DEBUG
CMallocDbgDlg* CMallocDbgDlg::_pMallocDbgDlgInstance = NULL;
CMallocDbgDlg::CMallocDbgDlg( HWND hwndOwner, HINSTANCE hInst, DCINT failPercent, DCBOOL mallocHuge) :
CDlgBase( hwndOwner, hInst, mallocHuge ? UI_IDD_MALLOCHUGEFAILURE : UI_IDD_MALLOCFAILURE)
{
DC_BEGIN_FN("CMallocDbgDlg");
TRC_ASSERT((NULL == CMallocDbgDlg::_pMallocDbgDlgInstance),
(TB,_T("Clobbering existing dlg instance pointer\n")));
_failPercent = failPercent;
CMallocDbgDlg::_pMallocDbgDlgInstance = this;
DC_END_FN();
}
CMallocDbgDlg::~CMallocDbgDlg()
{
CMallocDbgDlg::_pMallocDbgDlgInstance = NULL;
}
DCINT CMallocDbgDlg::DoModal()
{
DCINT retVal = 0;
DC_BEGIN_FN("DoModal");
retVal = DialogBox(_hInstance, MAKEINTRESOURCE(_dlgResId),
_hwndOwner, StaticDialogBoxProc);
TRC_ASSERT((retVal != 0 && retVal != -1), (TB, _T("DialogBoxParam failed\n")));
DC_END_FN();
return retVal;
}
INT_PTR CALLBACK CMallocDbgDlg::StaticDialogBoxProc (HWND hwndDlg, UINT uMsg,WPARAM wParam, LPARAM lParam)
{
//
// Delegate to appropriate instance (only works for single instance dialogs)
//
DC_BEGIN_FN("StaticDialogBoxProc");
DCINT retVal = 0;
TRC_ASSERT(_pMallocDbgDlgInstance, (TB, _T("MallocDbg dialog has NULL static instance ptr\n")));
if(_pMallocDbgDlgInstance)
{
retVal = _pMallocDbgDlgInstance->DialogBoxProc( hwndDlg, uMsg, wParam, lParam);
}
DC_END_FN();
return retVal;
}
/****************************************************************************/
/* Name: DialogBoxProc */
/* */
/* Purpose: Handles MallocDbg Box dialog (Random Failure dialog) */
/* */
/* Returns: TRUE if message dealt with */
/* FALSE otherwise */
/* */
/* Params: See window documentation */
/* */
/****************************************************************************/
INT_PTR CALLBACK CMallocDbgDlg::DialogBoxProc (HWND hwndDlg, UINT uMsg,WPARAM wParam, LPARAM lParam)
{
INT_PTR rc = FALSE;
DCTCHAR numberString[SH_NUMBER_STRING_MAX_LENGTH];
DCINT percent = 0;
DCINT lenchar = 0;
DC_BEGIN_FN("UIRandomFailureDialogProc");
TRC_DBG((TB, _T("Random failure dialog")));
switch (uMsg)
{
case WM_INITDIALOG:
{
_hwndDlg = hwndDlg;
/****************************************************************/
/* Center the dialog */
/****************************************************************/
if(hwndDlg)
{
CenterWindow(NULL);
SetDialogAppIcon(hwndDlg);
SetFocus(GetDlgItem(hwndDlg, UI_IDC_RANDOMFAILURE_EDIT));
/************************************************************/
/* Set edit text with current percentage */
/************************************************************/
TRC_ASSERT((HIWORD(_failPercent) == 0), (TB,_T("_UI.randomFailureItem")));
SetDlgItemText(hwndDlg,
UI_IDC_RANDOMFAILURE_EDIT,
DC_ITOT(LOWORD(_failPercent), numberString, 10));
}
rc = TRUE;
}
break;
case WM_COMMAND:
{
switch (wParam)
{
case UI_IDB_MALLOCFAILURE_OK:
{
rc = TRUE;
lenchar = GetWindowText(GetDlgItem(hwndDlg, UI_IDC_RANDOMFAILURE_EDIT),
numberString,
SH_NUMBER_STRING_MAX_LENGTH);
if(lenchar)
{
percent = DC_TTOI(numberString);
}
if ((percent <= 100) && (percent >= 0))
{
_failPercent = percent;
if(hwndDlg)
{
EndDialog(hwndDlg, IDOK);
}
}
}
break;
case UI_IDB_MALLOCHUGEFAILURE_OK:
{
rc = TRUE;
lenchar = GetWindowText(GetDlgItem(hwndDlg, UI_IDC_RANDOMFAILURE_EDIT),
numberString,
SH_NUMBER_STRING_MAX_LENGTH);
if(lenchar)
{
percent = DC_TTOI(numberString);
}
if ((percent <= 100) && (percent >= 0))
{
_failPercent = percent;
if(hwndDlg)
{
EndDialog(hwndDlg, IDOK);
}
}
}
break;
default:
{
if(hwndDlg)
{
rc = CDlgBase::DialogBoxProc(hwndDlg,
uMsg,
wParam,
lParam);
}
}
break;
}
}
break;
default:
{
rc = CDlgBase::DialogBoxProc(hwndDlg,
uMsg,
wParam,
lParam);
}
break;
}
DC_END_FN();
return(rc);
}
#endif //DC_DEBUG