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.
 
 
 
 
 
 

184 lines
4.2 KiB

/////////////////////////////////////////////////////////////////////////////
//
// Copyright (c) 1996 Microsoft Corporation
//
// Module Name:
// DDxDDv.cpp
//
// Abstract:
// Implementation of custom dialog data exchange/dialog data validation
// routines.
//
// Author:
// David Potter (davidp) September 5, 1996
//
// Revision History:
//
// Notes:
//
/////////////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "DDxDDv.h"
#include "resource.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
//++
//
// DDX_Number
//
// Routine Description:
// Do data exchange between the dialog and the class.
//
// Arguments:
// pDX [IN OUT] Data exchange object
// nIDC [IN] Control ID.
// dwValue [IN OUT] Value to set or get.
// dwMin [IN] Minimum value.
// dwMax [IN] Maximum value.
// bSigned [IN] TRUE = value is signed, FALSE = value is unsigned
//
// Return Value:
// None.
//
//--
/////////////////////////////////////////////////////////////////////////////
void AFXAPI DDX_Number(
IN OUT CDataExchange * pDX,
IN int nIDC,
IN OUT DWORD & rdwValue,
IN DWORD dwMin,
IN DWORD dwMax,
IN BOOL bSigned
)
{
HWND hwndCtrl;
DWORD dwValue;
ASSERT(pDX != NULL);
ASSERT(dwMin < dwMax);
AFX_MANAGE_STATE(AfxGetStaticModuleState());
// Get the control window handle.
hwndCtrl = pDX->PrepareEditCtrl(nIDC);
if (pDX->m_bSaveAndValidate)
{
BOOL bTranslated;
dwValue = GetDlgItemInt(pDX->m_pDlgWnd->m_hWnd, nIDC, &bTranslated, bSigned);
if (!bTranslated
|| (dwValue < dwMin)
|| (dwValue > dwMax)
)
{
TCHAR szMin[32];
TCHAR szMax[32];
CString strPrompt;
wsprintf(szMin, _T("%lu%"), dwMin);
wsprintf(szMax, _T("%lu%"), dwMax);
AfxFormatString2(strPrompt, AFX_IDP_PARSE_INT_RANGE, szMin, szMax);
AfxMessageBox(strPrompt, MB_ICONEXCLAMATION, AFX_IDP_PARSE_INT_RANGE);
strPrompt.Empty(); // exception prep
pDX->Fail();
} // if: invalid string
else
rdwValue = dwValue;
} // if: saving data
else
{
CString strMaxValue;
// Set the maximum number of characters that can be entered.
if (bSigned)
strMaxValue.Format(_T("%ld"), dwMax);
else
strMaxValue.Format(_T("%lu"), dwMax);
SendMessage(hwndCtrl, EM_LIMITTEXT, strMaxValue.GetLength(), 0);
// Set the value into the control.
DDX_Text(pDX, nIDC, rdwValue);
} // else: setting data onto the dialog
} //*** DDX_Number()
/////////////////////////////////////////////////////////////////////////////
//++
//
// DDV_RequiredText
//
// Routine Description:
// Validate that the dialog string is present.
//
// Arguments:
// pDX [IN OUT] Data exchange object
// nIDC [IN] Control ID.
// nIDCLabel [IN] Label control ID.
// rstrValue [IN] Value to set or get.
//
// Return Value:
// None.
//
//--
/////////////////////////////////////////////////////////////////////////////
void AFXAPI DDV_RequiredText(
IN OUT CDataExchange * pDX,
IN int nIDC,
IN int nIDCLabel,
IN const CString & rstrValue
)
{
ASSERT(pDX != NULL);
AFX_MANAGE_STATE(AfxGetStaticModuleState());
if (pDX->m_bSaveAndValidate)
{
if (rstrValue.GetLength() == 0)
{
HWND hwndLabel;
TCHAR szLabel[1024];
TCHAR szStrippedLabel[1024];
int iSrc;
int iDst;
TCHAR ch;
CString strPrompt;
// Get the label window handle
hwndLabel = pDX->PrepareEditCtrl(nIDCLabel);
// Get the text of the label.
GetWindowText(hwndLabel, szLabel, sizeof(szLabel) / sizeof(TCHAR));
// Remove ampersands (&) and colons (:).
for (iSrc = 0, iDst = 0 ; szLabel[iSrc] != _T('\0') ; iSrc++)
{
ch = szLabel[iSrc];
if ((ch != _T('&')) && (ch != _T(':')))
szStrippedLabel[iDst++] = ch;
} // for: each character in the label
szStrippedLabel[iDst] = _T('\0');
// Format and display a message.
strPrompt.FormatMessage(IDS_REQUIRED_FIELD_EMPTY, szStrippedLabel);
AfxMessageBox(strPrompt, MB_ICONEXCLAMATION);
// Do this so that the control receives focus.
(void) pDX->PrepareEditCtrl(nIDC);
// Fail the call.
strPrompt.Empty(); // exception prep
pDX->Fail();
} // if: field not specified
} // if: saving data
} //*** DDV_RequiredText()