Работа с датой и временем |
Общие замечанияДля инкапсуляции даты/времени в MFC предназначен класс CTime. Даты, которые могут содержать объекты данного типа, находятся в диапазоне от 01.01.1970 до 18.01.2038 (это связано с тем, что они хранятся в поле типа time_t, который «унаследован» аж от MS-DOS). Класс CMonthCalCtrl инкапсулирует элемент управления общего назначения Month Calendar (окно класса «SysMonthCal32»), который представляет собой месячный календарь с возможностью задания диапазона отображаемых дат. Класс CDateTimeCtrl инкапсулирует элемент управления общего назначения Date-Time Picker (окно класса «SysDateTimePick32»), который позволяет пользователю задавать дату или время. Класс CTime
Ниже перечислены основные методы класса CTime. Конструирование (construction)
CTime(void);
Конструирует неинициализированный объект. CTime( const CTime& time ); Конструирует объект как копию time. CTime( int nYear, int nMonth, int nDay, int nHour, int nMin, int nSec, int nDST = -1 ); Конструирует объект, инициализируя дату и время заданными значениями. Если задать параметр nDST равным 0, то объект никогда не будет учитывать переход на летнее время; если задать nDST больше 0, то переход на летнее время будет учитываться всегда. И наконец, если задать nDST равным -1, то необходимость учитывать переход на летнее время будет распознаваться автоматически (в зависимости от форточных настроек). CTime( const SYSTEMTIME& st, int nDST = -1 ); Конструирует объект, инициализируя дату и время значениями полей структуры st (тип SYSTEMTIME описан в документации по Win32 API). Параметр nDST имеет тот же самый смысл, что и в предыдущем случае. CTime( const FILETIME& ft, int nDST = -1 ); Конструирует объект, инициализируя дату и время значениями полей структуры ft (тип FILETIME описан в документации по Win32 API). Параметр nDST имеет тот же самый смысл, что и в предыдущем случае. Заметим, что преобразования значений типа SYSTEMTIME к типу FILETIME и обратно можно воспользоваться функциями Win32 API SystemTimeToFileTime и FileTimeToSystemTime соответственно. Получение составляющих (extraction)
int GetYear(void) const;
Возвращает год в диапазоне от 1970 до 2038.
int GetMonth(void) const;
Возвращает месяц в диапазоне от 1 до 12.
int GetDay(void) const;
Возвращает день в диапазоне от 1 до 31.
int GetHour(void) const;
Возвращает час в диапазоне от 0 до 23.
int GetMinute(void) const;
Возвращает минуту в диапазоне от 0 до 59.
int GetSecond(void) const;
Возвращает секунду в диапазоне от 0 до 59.
int GetDayOfWeek(void) const;
Возвращает номер дня недели в диапазоне от 1 до 7, причем 1 соответствует воскресенью. Преобразование (conversion)BOOL GetAsSystemTime( SYSTEMTIME& stDest ) const; Преобразует текущее значение даты/времени к типу SYSTEMTIME и записывает результат преобразования в структуру stDest. CString Format( LPCTSTR pszFmtStr ) const; CString Format( UINT uFmtID ) const; Преобразует текущее значение даты/времени в строку на основании заданной форматирующей строки. Через параметр pszFmtStr необходимо передавать саму форматирующую строку, а через параметр uFmtID — идентификатор форматирующей строки в String Table. Форматирующая строка составляется по тому же принципу, что и для функции sprintf стандартной библиотеки, и может, помимо обычного текста, содержать следующие форматирующие последовательности:
Операторы (operators)CTime operator =( const CTime& time ); CTime operator =( time_t time ); Присваивает данному объекту значение time. Для класса CTime определены также операторы отношения ==, !=, >, <, >= и <=, позволяющие сравнивать два объекта следующим образом:
Класс CMonthCalCtrl
Ниже перечислены основные методы класса CMonthCalCtrl. Конструирование (construction)
CMonthCalCtrl(void);
BOOL Create( DWORD fdwStyle, const RECT& rect, CWnd* pParentWnd, UINT uID ); В качестве одного из стилей, задаваемых параметром fdwStyle необходимо обязательно указывать WS_CHILD. Кроме этого, обычно используется стиль WS_VISIBLE, а также один или несколько стилей, специфичных для данного элемента управления:
Через параметр rect необходимо передать размеры создаваемого окна; параметр pParentWnd должен определять родительское окно и не может быть равен NULL. Наконец, через параметр uID передается идентификатор создаваемого элемента управления. BOOL Create( DWORD fdwStyle, const POINT& point, CWnd* pParentWnd, UINT uID ); В данном варианте метода параметр point задает координаты левого верхнего угла окна, при этом назначаются стандартные системные ширина и высота. Оба варианта метода Create возвращают ненулевое значение при успешном создании окна и нулевое — в противном случае. Атрибуты (attributes)BOOL GetMinReqRect( RECT* prcDest ) const; Записывает в поля right и bottom структуры, адресуемой параметром prcDest, минимально возможные ширину и высоту окна, в соответствии с текущими системными метриками и используемым шрифтом. Поля left и top получат нулевые значения. int SetMonthDelta( int nNumMonths ); Метод назначает интервал «прокрутки» календаря в месяцах и возвращает предыдущее значение. Если ранее этот интервал не назначался, возвращается значение 0.
int GetMonthDelta(void) const;
Возвращает текущий интервал «прокрутки» в месяцах или количество одновременно отображаемых месяцев, если этот интервал не назначался. BOOL SetFirstDayOfWeek( int nDay, int* pnPrev = NULL ); Назначает номер первого дня недели равным nDay и записывает в переменную по адресу pnPrev (если он не равен NULL) предыдущее значение. Понедельнику соответствует значение 0, вторнику — значение 1, etc. Возвращает ненулевое значение, если предыдущий первый день недели не соответствовал стандартным системным установкам. int GetFirstDayOfWeek( BOOL* pfLocal = NULL ) const; Возвращает номер первого дня недели и записывает в переменную по адресу pfLocal (если он не равен NULL) ненулевое значение, если текущая установка не соответствует стандартной системной. COLORREF SetColor( int nRegion, COLORREF crColor ); Назначает цвет crColor области окна календаря nRegion и возвращает предыдущее значение цвета этой области. Параметр nRegion может принимать одно из следующих значений:
COLORREF GetColor( int nRegion ) const; Возвращает цвет области nRegion окна календаря. Операции (operations)void SetToday( const CTime* pTimeSrc ); void SetToday( const SYSTEMTIME* pstSrc ); Назначает «сегодняшний» день. BOOL GetToday( CTime& timeDest ) const; BOOL GetToday( SYSTEMTIME* pstDest ) const; Записывает в timeDest или по адресу pstDest текущий «сегодняшний» день. Класс CDateTimeCtrl
Ниже перечислены основные методы класса CDateTimeCtrl. Конструирование (construction)
CDateTimeCtrl(void);
BOOL Create( DWORD fdwStyle, const RECT& rect, CWnd* pParentWnd, UINT uID ); В качестве одного из стилей, задаваемых параметром fdwStyle необходимо обязательно указывать WS_CHILD. Кроме этого, обычно используется стиль WS_VISIBLE, а также один или несколько стилей, специфичных для данного элемента управления:
Заметим, что эти стили являются взаимоисключающими — при создании элемента управления должен указываться только один из них. Конкретный формат представления даты/времени определяется настройками, сделанными пользователем в Regional Options. Помимо перечисленных, доступны следующие стили:
Через параметр rect необходимо передать размеры создаваемого окна; параметр pParentWnd должен определять родительское окно и не может быть равен NULL. Наконец, через параметр uID передается идентификатор создаваемого элемента управления. При успешном создании окна метод Create возвращает ненулевое значение. Атрибуты (attributes)COLORREF SetMonthCalColor( int nRegion, COLORREF crColor ); Назначает цвет crColor области nRegion окна «выпадающего» календаря и возвращает предыдущее значение цвета этой области. Возможные значения параметра nRegion приведены в описании метода SetColor класса CMonthCalCtrl. COLORREF GetMonthCalColor( int nRegion ) const; Возвращает цвет области nRegion окна «выпадающего» календаря. BOOL SetFormat( LPCTSTR pszFormat ); Позволяет назначить форматирующее выражение, на основании которого составляется строка, отображаемая в элементе управления. В форматирующем выражении pszFormat помимо управляющих последовательностей можно использовать любой текст, однако он должен заключаться в одинарные кавычки (апострофы). Исключение составляют пробелы и знаки пунктуации. Для включения в форматирующее выражение самого символа апострофа, его необходимо написать два раза подряд. Ниже перечислены допустимые управляющие последовательности:
Рассмотрим несколько примеров:
При успешном назначении форматирующего выражения метод SetFormat возвращает ненулевое значение.
CMonthCalCtrl* GetMonthCalCtrl(void) const;
Возвращает указатель на объект класса CMonthCalCtrl, соответствующий окну «выпадающего» календаря. void SetMonthCalFont( HFONT hFont, BOOL fRedraw = TRUE ); Назначает «выпадающему» календарю шрифт hFont. Если параметр fRedraw задать равным TRUE, окно календаря будет немедленно перерисовано.
CFont* GetMonthCalFont(void) const;
Возвращает шрифт, используемый окном «выпадающего» календаря. Этот объект может быть временным. BOOL SetRange( const CTime* pMinTime, const CTime* pMaxTime ); Назначает допустимый диапазон даты/времени, которые может задать пользователь и возвращает ненулевое значение при успешном выполнении. DWORD GetRange( CTime* pMinTime, CTime* pMaxTime ) const; Записывает в переменные по адресу pMinTime и pMaxTime текущий допустимый диапазон даты/времени, которые может задать пользователь. Операции (operations)BOOL SetTime( const CTime* pTimeSrc, ); BOOL SetTime( const SYSTEMTIME* pstSrc, ); Назначает текущие дату/время для элемента управления и возвращает ненулевое значение при успешном выполнении. DWORD GetTime( CTime& timeDest, ) const; DWORD SetTime( SYSTEMTIME* pstDest, ) const; Записывает в переменную, на которую ссылается timeDest, или в переменную по адресу pstDest текущие дату/время, заданные пользователем. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||