www.pudn.com > ValidatingEdit.rar > amsEdit.h
#if !defined(AFX_AMS_EDIT_H__AC5ACB94_4363_11D3_9123_00105A6E5DE4__INCLUDED_) #define AFX_AMS_EDIT_H__AC5ACB94_4363_11D3_9123_00105A6E5DE4__INCLUDED_ #if _MSC_VER >= 1000 #pragma once #endif // _MSC_VER >= 1000 // Edit.h : header file // Created by: Alvaro Mendez - 07/17/2000 // #include#include // To export this code from an MFC Extension DLL uncomment the following line and then define _AMSEDIT_EXPORT inside the DLL's Project Settings. // #define AMSEDIT_IN_DLL // Import/Export macro for the classes below #if defined(AMSEDIT_IN_DLL) #if defined(_AMSEDIT_EXPORT) #define AMSEDIT_EXPORT _declspec(dllexport) #else #define AMSEDIT_EXPORT _declspec(dllimport) #endif #else #define AMSEDIT_EXPORT #endif // The following IDs are assigned for each class below to allow us to set which ones we need compiled #define AMSEDIT_ALPHANUMERIC_CLASS 0x01 #define AMSEDIT_MASKED_CLASS 0x02 #define AMSEDIT_NUMERIC_CLASS 0x04 #define AMSEDIT_INTEGER_CLASS (AMSEDIT_NUMERIC_CLASS | 0x08) #define AMSEDIT_CURRENCY_CLASS (AMSEDIT_NUMERIC_CLASS | 0x10) #define AMSEDIT_DATE_CLASS 0x20 #define AMSEDIT_TIME_CLASS 0x40 #define AMSEDIT_DATETIME_CLASS (AMSEDIT_DATE_CLASS | AMSEDIT_TIME_CLASS) #define AMSEDIT_ALL_CLASSES (AMSEDIT_ALPHANUMERIC_CLASS | AMSEDIT_MASKED_CLASS | AMSEDIT_INTEGER_CLASS | AMSEDIT_CURRENCY_CLASS | AMSEDIT_DATETIME_CLASS) // If your program does not need all the CAMSEdit classes below, you can reduce // the size of your executable by selecting just the classes you want to be compiled // via the following macro. Use the IDs defined above and "OR" together the classes you need. #define AMSEDIT_COMPILED_CLASSES AMSEDIT_ALL_CLASSES ///////////////////////////////////////////////////////////////////////////// // CAMSEdit window // Class CAMSEdit is the base class for all the other AMS CEdit classes. // It provides some base functionality to set and get the text and change // its text and background color. // class AMSEDIT_EXPORT CAMSEdit : public CEdit { public: // Construction/destruction CAMSEdit(); virtual ~CAMSEdit(); // Operations void SetText(const CString& strText); CString GetText() const; CString GetTrimmedText() const; void SetBackgroundColor(COLORREF rgb); COLORREF GetBackgroundColor() const; void SetTextColor(COLORREF rgb); COLORREF GetTextColor() const; bool IsReadOnly() const; protected: virtual void Redraw(); virtual CString GetValidText() const; virtual BOOL OnChildNotify(UINT message, WPARAM wParam, LPARAM lParam, LRESULT* pLResult); virtual bool ShouldEnter(TCHAR c) const; protected: CBrush m_brushBackground; COLORREF m_rgbText; private: enum InternalFlags { None = 0x0000, TextColorHasBeenSet = 0x0001 }; UINT m_uInternalFlags; public: // Class SelectionSaver is used to save an edit box's current // selection and then restore it on destruction. class AMSEDIT_EXPORT SelectionSaver { public: SelectionSaver(CEdit* pEdit); SelectionSaver(CEdit* pEdit, int nStart, int nEnd); ~SelectionSaver(); void MoveTo(int nStart, int nEnd); void MoveBy(int nStart, int nEnd); void MoveBy(int nPos); void operator+=(int nPos); int GetStart() const; int GetEnd() const; void Update(); void Disable(); protected: CEdit* m_pEdit; int m_nStart, m_nEnd; }; // Class Behavior is an abstract base class used to define how an edit // box will behave when it is used. Note that its virtual member functions start // with an underscore; this avoids naming conflicts when multiply inheriting. class AMSEDIT_EXPORT Behavior { protected: Behavior(CAMSEdit* pEdit); virtual ~Behavior(); public: bool ModifyFlags(UINT uAdd, UINT uRemove); UINT GetFlags() const; public: virtual CString _GetValidText() const = 0; virtual void _OnChar(UINT uChar, UINT nRepCnt, UINT nFlags) = 0; virtual void _OnKeyDown(UINT uChar, UINT nRepCnt, UINT nFlags); virtual void _OnKillFocus(CWnd* pNewWnd); virtual LONG _OnPaste(UINT wParam, LONG lParam); protected: // Wrappers to allow access to protected members of CAMSEdit virtual LRESULT _Default(); virtual void _Redraw(); virtual bool _ShouldEnter(TCHAR c) const; protected: CAMSEdit* m_pEdit; UINT m_uFlags; }; friend class Behavior; #if (AMSEDIT_COMPILED_CLASSES & AMSEDIT_ALPHANUMERIC_CLASS) // The AlphanumericBehavior class is used to allow entry of alphanumeric // characters. It can be restricted in terms of what characters cannot // be inputed as well as how many are allowed altogether. class AMSEDIT_EXPORT AlphanumericBehavior : public Behavior { public: AlphanumericBehavior(CAMSEdit* pEdit, int nMaxChars = 0, const CString& strInvalidChars = _T("%'*\"+?><:\\")); // Operations void SetInvalidCharacters(const CString& strInvalidChars); const CString& GetInvalidCharacters() const; void SetMaxCharacters(int nMaxChars); int GetMaxCharacters() const; protected: virtual CString _GetValidText() const; virtual void _OnChar(UINT uChar, UINT nRepCnt, UINT nFlags); protected: int m_nMaxChars; CString m_strInvalidChars; }; #endif // (AMSEDIT_COMPILED_CLASSES & AMSEDIT_ALPHANUMERIC_CLASS) #if (AMSEDIT_COMPILED_CLASSES & AMSEDIT_MASKED_CLASS) // The MaskedBehavior class is used to allow entry of numeric characters // based on a given mask containing '#' characters to hold digits. class AMSEDIT_EXPORT MaskedBehavior : public Behavior { public: // Construction MaskedBehavior(CAMSEdit* pEdit, const CString& strMask = _T("")); public: // Operations void SetMask(const CString& strMask); const CString& GetMask() const; CString GetNumericText() const; // The Symbol class represents a character which may be added to the mask and then interpreted by the // MaskedBehavior class to validate the input from the user and possibly convert it to something else. class AMSEDIT_EXPORT Symbol { public: #ifndef _UNICODE typedef int (*ValidationFunction)(UINT); // designed for functions such as _istdigit, _istalpha typedef UINT (*ConversionFunction)(UINT); // designed for functions such as _totupper, _totlower #else typedef int (*ValidationFunction)(WCHAR); typedef WCHAR (*ConversionFunction)(WCHAR); #endif Symbol(); Symbol(TCHAR cSymbol, ValidationFunction fnValidation, ConversionFunction fnConversion = NULL); virtual ~Symbol(); virtual bool Validate(TCHAR c) const; virtual TCHAR Convert(TCHAR c) const; void Set(TCHAR cSymbol); TCHAR Get() const; operator TCHAR() const; protected: TCHAR m_cSymbol; ValidationFunction m_fnValidation; ConversionFunction m_fnConversion; }; typedef CArray SymbolArray; SymbolArray& GetSymbolArray(); protected: virtual CString _GetValidText() const; virtual void _OnChar(UINT uChar, UINT nRepCnt, UINT nFlags); virtual void _OnKeyDown(UINT uChar, UINT nRepCnt, UINT nFlags); protected: // Attributes CString m_strMask; SymbolArray m_arraySymbols; }; #endif // (AMSEDIT_COMPILED_CLASSES & AMSEDIT_MASKED_CLASS) #if (AMSEDIT_COMPILED_CLASSES & AMSEDIT_NUMERIC_CLASS) // The NumericBehavior class is used to allow the entry of an actual numeric // value into the edit control. It may be restricted by the number of digits // before or after the decimal point (if any). If can also be set to use // commas to separate and group thousands. class AMSEDIT_EXPORT NumericBehavior : public Behavior { public: // Construction NumericBehavior(CAMSEdit* pEdit, int nMaxWholeDigits = 9, int nMaxDecimalPlaces = 4); public: // Operations void SetDouble(double dText, bool bTrimTrailingZeros = true); double GetDouble() const; void SetInt(int nText); int GetInt() const; void SetMaxWholeDigits(int nMaxWholeDigits); int GetMaxWholeDigits() const; void SetMaxDecimalPlaces(int nMaxDecimalPlaces); int GetMaxDecimalPlaces() const; void AllowNegative(bool bAllowNegative = true); bool IsNegativeAllowed() const; void SetDigitsInGroup(int nDigitsInGroup); int GetDigitsInGroup() const; void SetSeparators(TCHAR cDecimal, TCHAR cGroup); void GetSeparators(TCHAR* pcDecimal, TCHAR* pcGroup) const; void SetPrefix(const CString& strPrefix); const CString& GetPrefix() const; void SetMask(const CString& strMask); CString GetMask() const; void SetRange(double dMin, double dMax); void GetRange(double* pdMin, double* pdMax) const; virtual bool IsValid() const; bool CheckIfValid(bool bShowErrorIfNotValid = true); enum Flags { None = 0x0000, CannotBeNegative = 0x1000, AddDecimalAfterMaxWholeDigits = 0x2000, PadWithZerosAfterDecimalWhenTextChanges = 0x4000, PadWithZerosAfterDecimalWhenTextIsSet = 0x8000, OnKillFocus_Beep_IfInvalid = 0x0001, OnKillFocus_Beep_IfEmpty = 0x0002, OnKillFocus_Beep = 0x0003, OnKillFocus_SetValid_IfInvalid = 0x0004, OnKillFocus_SetValid_IfEmpty = 0x0008, OnKillFocus_SetValid = 0x000C, OnKillFocus_SetFocus_IfInvalid = 0x0010, OnKillFocus_SetFocus_IfEmpty = 0x0020, OnKillFocus_SetFocus = 0x0030, OnKillFocus_ShowMessage_IfInvalid = 0x0050, OnKillFocus_ShowMessage_IfEmpty = 0x00A0, OnKillFocus_ShowMessage = 0x00F0, OnKillFocus_PadWithZerosBeforeDecimal = 0x0100, OnKillFocus_PadWithZerosAfterDecimal = 0x0200, OnKillFocus_DontPadWithZerosIfEmpty = 0x0400, OnKillFocus_RemoveExtraLeadingZeros = 0x0800, OnKillFocus_Max = 0x0FFF }; protected: virtual CString _GetValidText() const; virtual void _OnChar(UINT uChar, UINT nRepCnt, UINT nFlags); virtual void _OnKeyDown(UINT uChar, UINT nRepCnt, UINT nFlags); virtual void _OnKillFocus(CWnd* pNewWnd); int GetGroupSeparatorCount(const CString& strText) const; CString GetNumericText(const CString& strText, bool bUseMathSymbols = false) const; CString GetDoubleText(double dText, bool bTrimTrailingZeros = true) const; CString GetSeparatedText(const CString& strText) const; void AdjustSeparators(int nCurrentSeparatorCount); static void InsertZeros(CString* pStrText, int nPos, int nCount); virtual void ShowErrorMessage() const; void AdjustWithinRange(); protected: // Attributes int m_nMaxWholeDigits; int m_nMaxDecimalPlaces; TCHAR m_cNegativeSign; TCHAR m_cDecimalPoint; TCHAR m_cGroupSeparator; int m_nDigitsInGroup; CString m_strPrefix; double m_dMin; double m_dMax; private: bool m_bAdjustingSeparators; }; #endif // (AMSEDIT_COMPILED_CLASSES & AMSEDIT_NUMERIC_CLASS) #if (AMSEDIT_COMPILED_CLASSES & AMSEDIT_DATE_CLASS) // The DateBehavior class is used to allow the entry of date values. class AMSEDIT_EXPORT DateBehavior : virtual public Behavior { public: // Construction DateBehavior(CAMSEdit* pEdit); public: // Operations void SetDate(int nYear, int nMonth, int nDay); void SetDate(const CTime& date); void SetDate(const COleDateTime& date); void SetDateToToday(); CTime GetDate() const; COleDateTime GetOleDate() const; int GetYear() const; int GetMonth() const; int GetDay() const; void SetYear(int nYear); void SetMonth(int nMonth); void SetDay(int nDay); virtual bool IsValid() const; bool CheckIfValid(bool bShowErrorIfNotValid = true); void SetRange(const CTime& dateMin, const CTime& dateMax); void SetRange(const COleDateTime& dateMin, const COleDateTime& dateMax); void GetRange(CTime* pDateMin, CTime* pDateMax) const; void GetRange(COleDateTime* pDateMin, COleDateTime* pDateMax) const; void SetSeparator(TCHAR cSep); TCHAR GetSeparator() const; void ShowDayBeforeMonth(bool bDayBeforeMonth = true); bool IsDayShownBeforeMonth() const; enum Flags { None = 0x0000, DayBeforeMonth = 0x1000, OnKillFocus_Beep_IfInvalid = 0x0001, OnKillFocus_Beep_IfEmpty = 0x0002, OnKillFocus_Beep = 0x0003, OnKillFocus_SetValid_IfInvalid = 0x0004, OnKillFocus_SetValid_IfEmpty = 0x0008, OnKillFocus_SetValid = 0x000C, OnKillFocus_SetFocus_IfInvalid = 0x0010, OnKillFocus_SetFocus_IfEmpty = 0x0020, OnKillFocus_SetFocus = 0x0030, OnKillFocus_ShowMessage_IfInvalid = 0x0050, OnKillFocus_ShowMessage_IfEmpty = 0x00A0, OnKillFocus_ShowMessage = 0x00F0, OnKillFocus_Max = 0x00FF }; protected: virtual CString _GetValidText() const; virtual void _OnChar(UINT uChar, UINT nRepCnt, UINT nFlags); virtual void _OnKeyDown(UINT uChar, UINT nRepCnt, UINT nFlags); virtual void _OnKillFocus(CWnd* pNewWnd); protected: // Helpers bool AdjustMaxMonthAndDay(); bool AdjustMaxDay(); int GetValidMonth() const; int GetMaxMonth() const; int GetMinMonth() const; int GetMonthStartPosition() const; TCHAR GetMaxMonthDigit(int nPos) const; TCHAR GetMinMonthDigit(int nPos) const; bool IsValidMonthDigit(TCHAR c, int nPos) const; bool IsValidMonth(int nMonth) const; int GetValidDay() const; int GetMaxDay() const; int GetMinDay() const; int GetDayStartPosition() const; TCHAR GetMaxDayDigit(int nPos) const; TCHAR GetMinDayDigit(int nPos) const; bool IsValidDayDigit(TCHAR c, int nPos) const; bool IsValidDay(int nDay) const; int GetValidYear() const; int GetYearStartPosition() const; TCHAR GetMaxYearDigit(int nPos) const; TCHAR GetMinYearDigit(int nPos, bool bValidYear = false) const; bool IsValidYearDigit(TCHAR c, int nPos) const; bool IsValidYear(int nYear) const; virtual bool IsWithinRange(const COleDateTime& date, bool bDateOnly = true) const; virtual void ShowErrorMessage() const; CString GetFormattedDate(int nYear, int nMonth, int nDay) const; public: static bool IsLeapYear(int nYear); static CString GetString(int nValue, bool bTwoDigitWithLeadingZero = true); static int GetMaxDayOfMonth(int nMonth, int nYear); protected: // Attributes COleDateTime m_dateMin; COleDateTime m_dateMax; TCHAR m_cSep; }; #endif // (AMSEDIT_COMPILED_CLASSES & AMSEDIT_DATE_CLASS) #if (AMSEDIT_COMPILED_CLASSES & AMSEDIT_TIME_CLASS) // The TimeBehavior class is used to allow the entry of time values. class AMSEDIT_EXPORT TimeBehavior : virtual public Behavior { public: // Construction TimeBehavior(CAMSEdit* pEdit); public: // Operations void SetTime(int nHour, int nMinute, int nSecond = 0); void SetTime(const CTime& time); void SetTime(const COleDateTime& time); void SetTimeToNow(); CTime GetTime() const; COleDateTime GetOleTime() const; int GetHour() const; int GetMinute() const; int GetSecond() const; CString GetAMPM() const; void SetHour(int nYear); void SetMinute(int nMonth); void SetSecond(int nDay); void SetAMPM(bool bAM); virtual bool IsValid() const; bool IsValid(bool bCheckRangeAlso) const; bool CheckIfValid(bool bShowErrorIfNotValid = true); void SetRange(const CTime& dateMin, const CTime& dateMax); void SetRange(const COleDateTime& dateMin, const COleDateTime& dateMax); void GetRange(CTime* pDateMin, CTime* pDateMax) const; void GetRange(COleDateTime* pDateMin, COleDateTime* pDateMax) const; void SetSeparator(TCHAR cSep); TCHAR GetSeparator() const; void Show24HourFormat(bool bShow24HourFormat = true); bool IsShowing24HourFormat() const; void ShowSeconds(bool bShowSeconds = true); bool IsShowingSeconds() const; void SetAMPMSymbols(const CString& strAM, const CString& strPM); void GetAMPMSymbols(CString* pStrAM, CString* pStrPM) const; enum Flags { None = 0x0000, TwentyFourHourFormat = 0x2000, WithSeconds = 0x4000, OnKillFocus_Beep_IfInvalid = 0x0001, OnKillFocus_Beep_IfEmpty = 0x0002, OnKillFocus_Beep = 0x0003, OnKillFocus_SetValid_IfInvalid = 0x0004, OnKillFocus_SetValid_IfEmpty = 0x0008, OnKillFocus_SetValid = 0x000C, OnKillFocus_SetFocus_IfInvalid = 0x0010, OnKillFocus_SetFocus_IfEmpty = 0x0020, OnKillFocus_SetFocus = 0x0030, OnKillFocus_ShowMessage_IfInvalid = 0x0050, OnKillFocus_ShowMessage_IfEmpty = 0x00A0, OnKillFocus_ShowMessage = 0x00F0, OnKillFocus_Max = 0x00FF }; protected: virtual CString _GetValidText() const; virtual void _OnChar(UINT uChar, UINT nRepCnt, UINT nFlags); virtual void _OnKeyDown(UINT uChar, UINT nRepCnt, UINT nFlags); virtual void _OnKillFocus(CWnd* pNewWnd); protected: // Helpers int GetValidHour(bool b24HourFormat = false) const; int GetMaxHour(bool b24HourFormat = false) const; int GetMinHour(bool b24HourFormat = false) const; int GetHourStartPosition() const; TCHAR GetMaxHourDigit(int nPos) const; TCHAR GetMinHourDigit(int nPos) const; bool IsValidHourDigit(TCHAR c, int nPos) const; bool IsValidHour(int nHour, bool b24HourFormat = false) const; int ConvertTo24Hour(int nHour, const CString& strAMPM) const; int ConvertToAMPMHour(int nHour, CString* pStrAMPM = NULL) const; int GetValidMinute() const; int GetMaxMinute() const; int GetMinMinute() const; int GetMaxSecond() const; int GetMinSecond() const; int GetMinuteStartPosition() const; TCHAR GetMaxMinuteDigit(int nPos) const; TCHAR GetMinMinuteDigit(int nPos) const; bool IsValidMinuteDigit(TCHAR c, int nPos) const; bool IsValidMinute(int nMinute) const; int GetValidSecond() const; int GetSecondStartPosition() const; TCHAR GetMaxSecondDigit(int nPos) const; TCHAR GetMinSecondDigit(int nPos) const; bool IsValidSecondDigit(TCHAR c, int nPos) const; bool IsValidSecond(int nSecond) const; void ShowAMPM(); bool ChangeAMPM(TCHAR c); CString GetValidAMPM() const; int GetAMPMStartPosition() const; bool IsValidAMPM(const CString& strAMPM) const; int GetAMPMPosition(const CString& strText) const; virtual bool IsWithinRange(const COleDateTime& date, bool bDateOnly = true) const; virtual void ShowErrorMessage() const; CString GetFormattedTime(int nHour, int nMinute, int nSecond, const CString& strAMPM = _T("")) const; void AdjustWithinRange(); protected: // Attributes COleDateTime m_timeMin; COleDateTime m_timeMax; TCHAR m_cSep; CString m_strAM; CString m_strPM; int m_nAMPMLength; int m_nHourStart; }; #endif // (AMSEDIT_COMPILED_CLASSES & AMSEDIT_TIME_CLASS) #if (AMSEDIT_COMPILED_CLASSES & AMSEDIT_DATETIME_CLASS) == AMSEDIT_DATETIME_CLASS // The DateTimeBehavior class is used to allow the entry of date and time values. class AMSEDIT_EXPORT DateTimeBehavior : public DateBehavior, public TimeBehavior { public: // Construction DateTimeBehavior(CAMSEdit* pEdit); void SetDateTime(int nYear, int nMonth, int nDay, int nHour, int nMinute, int nSecond = 0); void SetDateTime(const CTime& dt); void SetDateTime(const COleDateTime& dt); void SetToNow(); CTime GetDateTime() const; COleDateTime GetOleDateTime() const; virtual bool IsValid() const; void SetRange(const CTime& dateMin, const CTime& dateMax); void SetRange(const COleDateTime& dateMin, const COleDateTime& dateMax); void GetRange(CTime* pDateMin, CTime* pDateMax) const; void GetRange(COleDateTime* pDateMin, COleDateTime* pDateMax) const; void SetSeparator(TCHAR cSep, bool bDate); TCHAR GetSeparator(bool bDate) const; bool ModifyFlags(UINT uAdd, UINT uRemove); enum Flags { DateOnly = 0x0100, TimeOnly = 0x0200, OnKillFocus_Beep_IfInvalid = 0x0001, OnKillFocus_Beep_IfEmpty = 0x0002, OnKillFocus_Beep = 0x0003, OnKillFocus_SetValid_IfInvalid = 0x0004, OnKillFocus_SetValid_IfEmpty = 0x0008, OnKillFocus_SetValid = 0x000C, OnKillFocus_SetFocus_IfInvalid = 0x0010, OnKillFocus_SetFocus_IfEmpty = 0x0020, OnKillFocus_SetFocus = 0x0030, OnKillFocus_ShowMessage_IfInvalid = 0x0050, OnKillFocus_ShowMessage_IfEmpty = 0x00A0, OnKillFocus_ShowMessage = 0x00F0, OnKillFocus_Max = 0x00FF }; protected: virtual CString _GetValidText() const; virtual void _OnChar(UINT uChar, UINT nRepCnt, UINT nFlags); virtual void _OnKeyDown(UINT uChar, UINT nRepCnt, UINT nFlags); virtual void _OnKillFocus(CWnd* pNewWnd); protected: virtual bool IsWithinRange(const COleDateTime& date, bool bDateOnly = true) const; virtual void ShowErrorMessage() const; }; #endif // (AMSEDIT_COMPILED_CLASSES & AMSEDIT_DATETIME_CLASS) == AMSEDIT_DATETIME_CLASS // Generated message map functions (for CAMSEdit) protected: //{{AFX_MSG(CAMSEdit) //}}AFX_MSG afx_msg LONG OnCut(UINT wParam, LONG lParam); afx_msg LONG OnPaste(UINT wParam, LONG lParam); afx_msg LONG OnClear(UINT wParam, LONG lParam); afx_msg LONG OnSetText(UINT wParam, LONG lParam); DECLARE_MESSAGE_MAP() }; #if (AMSEDIT_COMPILED_CLASSES & AMSEDIT_ALPHANUMERIC_CLASS) ///////////////////////////////////////////////////////////////////////////// // CAMSAlphanumericEdit window // The CAMSAlphanumericEdit is a CAMSEdit control which supports the AlphanumericBehavior class. // class AMSEDIT_EXPORT CAMSAlphanumericEdit : public CAMSEdit, public CAMSEdit::AlphanumericBehavior { public: // Construction CAMSAlphanumericEdit(int nMaxChars = 0, const CString& strInvalidChars = _T("%'*\"+?><:\\")); protected: virtual CString GetValidText() const; public: // Overrides // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CAMSAlphanumericEdit) //}}AFX_VIRTUAL // Generated message map functions protected: //{{AFX_MSG(CAMSAlphanumericEdit) afx_msg void OnChar(UINT uChar, UINT nRepCnt, UINT nFlags); //}}AFX_MSG DECLARE_MESSAGE_MAP() }; #endif // (AMSEDIT_COMPILED_CLASSES & AMSEDIT_ALPHANUMERIC_CLASS) #if (AMSEDIT_COMPILED_CLASSES & AMSEDIT_MASKED_CLASS) ///////////////////////////////////////////////////////////////////////////// // CAMSMaskedEdit window // The CAMSMaskedEdit is a CAMSEdit control which supports the MaskedBehavior class. // class AMSEDIT_EXPORT CAMSMaskedEdit : public CAMSEdit, public CAMSEdit::MaskedBehavior { public: // Construction CAMSMaskedEdit(const CString& strMask = _T("")); protected: virtual CString GetValidText() const; public: // Overrides // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CAMSMaskedEdit) //}}AFX_VIRTUAL // Generated message map functions protected: //{{AFX_MSG(CAMSMaskedEdit) afx_msg void OnChar(UINT uChar, UINT nRepCnt, UINT nFlags); afx_msg void OnKeyDown(UINT uChar, UINT nRepCnt, UINT nFlags); //}}AFX_MSG DECLARE_MESSAGE_MAP() }; #endif // (AMSEDIT_COMPILED_CLASSES & AMSEDIT_MASKED_CLASS) #if (AMSEDIT_COMPILED_CLASSES & AMSEDIT_NUMERIC_CLASS) ///////////////////////////////////////////////////////////////////////////// // CAMSNumericEdit window // The CAMSNumericEdit is a CAMSEdit control which supports the NumericBehavior class. // class AMSEDIT_EXPORT CAMSNumericEdit : public CAMSEdit, public CAMSEdit::NumericBehavior { public: CAMSNumericEdit(int nMaxWholeDigits = 9, int nMaxDecimalPlaces = 4); protected: virtual CString GetValidText() const; public: // Overrides // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CAMSNumericEdit) //}}AFX_VIRTUAL // Generated message map functions protected: //{{AFX_MSG(CAMSNumericEdit) afx_msg void OnChar(UINT uChar, UINT nRepCnt, UINT nFlags); afx_msg void OnKeyDown(UINT uChar, UINT nRepCnt, UINT nFlags); afx_msg void OnKillFocus(CWnd* pNewWnd); //}}AFX_MSG DECLARE_MESSAGE_MAP() }; #endif // (AMSEDIT_COMPILED_CLASSES & AMSEDIT_NUMERIC_CLASS) #if (AMSEDIT_COMPILED_CLASSES & AMSEDIT_INTEGER_CLASS) == AMSEDIT_INTEGER_CLASS ///////////////////////////////////////////////////////////////////////////// // CAMSIntegerEdit window // The CAMSNumericEdit is a CAMSEdit control which supports the NumericBehavior class // restricted to only allow integer values. // class AMSEDIT_EXPORT CAMSIntegerEdit : public CAMSNumericEdit { public: // Construction CAMSIntegerEdit(int nMaxWholeDigits = 9); private: // Hidden members -- they don't make sense here void SetDouble(double dText, bool bTrimTrailingZeros = true); double GetDouble() const; void SetMaxDecimalPlaces(int nMaxDecimalPlaces); // always 0 public: // Overrides // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CAMSIntegerEdit) //}}AFX_VIRTUAL // Generated message map functions protected: //{{AFX_MSG(CAMSIntegerEdit) //}}AFX_MSG DECLARE_MESSAGE_MAP() }; #endif // (AMSEDIT_COMPILED_CLASSES & AMSEDIT_INTEGER_CLASS) == AMSEDIT_INTEGER_CLASS #if (AMSEDIT_COMPILED_CLASSES & AMSEDIT_CURRENCY_CLASS) == AMSEDIT_CURRENCY_CLASS ///////////////////////////////////////////////////////////////////////////// // CAMSCurrencyEdit window // The CAMSNumericEdit is a CAMSEdit control which supports the NumericBehavior class // modified to put the '$' character in front of the value and use commas to separate the thousands. // class AMSEDIT_EXPORT CAMSCurrencyEdit : public CAMSNumericEdit { public: // Construction CAMSCurrencyEdit(); public: // Overrides // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CAMSCurrencyEdit) //}}AFX_VIRTUAL // Generated message map functions protected: //{{AFX_MSG(CAMSCurrencyEdit) //}}AFX_MSG DECLARE_MESSAGE_MAP() }; #endif // (AMSEDIT_COMPILED_CLASSES & AMSEDIT_CURRENCY_CLASS) == AMSEDIT_CURRENCY_CLASS #if (AMSEDIT_COMPILED_CLASSES & AMSEDIT_DATE_CLASS) ///////////////////////////////////////////////////////////////////////////// // CAMSDateEdit window // The CAMSDateEdit is a CAMSEdit control which supports the DateBehavior class. // class AMSEDIT_EXPORT CAMSDateEdit : public CAMSEdit, public CAMSEdit::DateBehavior { public: // Construction CAMSDateEdit(); protected: virtual CString GetValidText() const; public: // Overrides // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CAMSDateEdit) //}}AFX_VIRTUAL // Generated message map functions protected: //{{AFX_MSG(CAMSDateEdit) afx_msg void OnChar(UINT uChar, UINT nRepCnt, UINT nFlags); afx_msg void OnKeyDown(UINT uChar, UINT nRepCnt, UINT nFlags); afx_msg void OnKillFocus(CWnd* pNewWnd); //}}AFX_MSG afx_msg LONG OnPaste(UINT wParam, LONG lParam); DECLARE_MESSAGE_MAP() }; #endif // (AMSEDIT_COMPILED_CLASSES & AMSEDIT_DATE_CLASS) #if (AMSEDIT_COMPILED_CLASSES & AMSEDIT_TIME_CLASS) ///////////////////////////////////////////////////////////////////////////// // CAMSTimeEdit window // The CAMSTimeEdit is a CAMSEdit control which supports the TimeBehavior class. // class AMSEDIT_EXPORT CAMSTimeEdit : public CAMSEdit, public CAMSEdit::TimeBehavior { public: // Construction CAMSTimeEdit(); protected: virtual CString GetValidText() const; public: // Overrides // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CAMSTimeEdit) //}}AFX_VIRTUAL // Generated message map functions protected: //{{AFX_MSG(CAMSTimeEdit) afx_msg void OnChar(UINT uChar, UINT nRepCnt, UINT nFlags); afx_msg void OnKeyDown(UINT uChar, UINT nRepCnt, UINT nFlags); afx_msg void OnKillFocus(CWnd* pNewWnd); //}}AFX_MSG afx_msg LONG OnPaste(UINT wParam, LONG lParam); DECLARE_MESSAGE_MAP() }; #endif // (AMSEDIT_COMPILED_CLASSES & AMSEDIT_TIME_CLASS) #if (AMSEDIT_COMPILED_CLASSES & AMSEDIT_DATETIME_CLASS) == AMSEDIT_DATETIME_CLASS ///////////////////////////////////////////////////////////////////////////// // CAMSDateTimeEdit window // The CAMSDateTimeEdit is a CAMSEdit control which supports the // DateBehavior and TimeBehavior classes. // class AMSEDIT_EXPORT CAMSDateTimeEdit : public CAMSEdit, public CAMSEdit::DateTimeBehavior { public: // Construction CAMSDateTimeEdit(); protected: virtual CString GetValidText() const; public: // Overrides // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CAMSDateTimeEdit) //}}AFX_VIRTUAL // Generated message map functions protected: //{{AFX_MSG(CAMSDateTimeEdit) afx_msg void OnChar(UINT uChar, UINT nRepCnt, UINT nFlags); afx_msg void OnKeyDown(UINT uChar, UINT nRepCnt, UINT nFlags); afx_msg void OnKillFocus(CWnd* pNewWnd); //}}AFX_MSG afx_msg LONG OnPaste(UINT wParam, LONG lParam); DECLARE_MESSAGE_MAP() }; #endif // (AMSEDIT_COMPILED_CLASSES & AMSEDIT_DATETIME_CLASS) == AMSEDIT_DATETIME_CLASS #if (AMSEDIT_COMPILED_CLASSES & AMSEDIT_ALL_CLASSES) == AMSEDIT_ALL_CLASSES ///////////////////////////////////////////////////////////////////////////// // CAMSMultiMaskedEdit window // The CAMSMultiMaskedEdit class is a CAMSEdit control which can support the // AlphanumericBehavior, NumericBehavior, MaskedBehavior, DateBehavior, or // TimeBehavior behavior classes. It uses the mask to determine the current behavior. // class AMSEDIT_EXPORT CAMSMultiMaskedEdit : public CAMSEdit, public CAMSEdit::AlphanumericBehavior, public CAMSEdit::NumericBehavior, public CAMSEdit::MaskedBehavior, public CAMSEdit::DateTimeBehavior { public: CAMSMultiMaskedEdit(); const CString& GetMask() const; void SetMask(const CString& strMask); protected: virtual CString GetValidText() const; // Attributes Behavior* m_pCurrentBehavior; public: // Overrides // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CAMSMultiMaskedEdit) //}}AFX_VIRTUAL // Generated message map functions protected: //{{AFX_MSG(CAMSMultiMaskedEdit) afx_msg void OnChar(UINT uChar, UINT nRepCnt, UINT nFlags); afx_msg void OnKeyDown(UINT uChar, UINT nRepCnt, UINT nFlags); afx_msg void OnKillFocus(CWnd* pNewWnd); //}}AFX_MSG afx_msg LONG OnPaste(UINT wParam, LONG lParam); DECLARE_MESSAGE_MAP() }; #endif // (AMSEDIT_COMPILED_CLASSES & AMSEDIT_ALL_CLASSES) == AMSEDIT_ALL_CLASSES #define AMS_MIN_NUMBER -1.7976931348623158e+308 #define AMS_MAX_NUMBER 1.7976931348623158e+308 #define AMS_MIN_CTIME CTime(1970, 1, 1, 0, 0, 0) #define AMS_MAX_CTIME CTime(2037, 12, 31, 23, 59, 59) #define AMS_MIN_OLEDATETIME COleDateTime(1900, 1, 1, 0, 0, 0) #define AMS_MAX_OLEDATETIME COleDateTime(9998, 12, 31, 23, 59, 59) #define AMS_AM_SYMBOL _T("AM") #define AMS_PM_SYMBOL _T("PM") ///////////////////////////////////////////////////////////////////////////// //{{AFX_INSERT_LOCATION}} // Microsoft Developer Studio will insert additional declarations immediately before the previous line. #endif // !defined(AFX_AMS_EDIT_H__AC5ACB94_4363_11D3_9123_00105A6E5DE4__INCLUDED_)