|
|
/////////////////////////////////////////////////////////////////////////////
//
// 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()
|