Календарь
Автор: Norm Almond.
Скачать исходник с примером - 44Kb
Описание
Позволяет задавать описание к любому дню
месяца, ведёт лог. Для программистов здесь будут
интересены некоторые реализации элементов
управления. Также устранены недостатки многих
календарей присутствующих на рынке программного
обеспечения.
Интерфейс
COleDateTime GetDate() |
Получаем выделенную дату |
void ShowSpinner(BOOL bShow); |
Показывает или скрывает полосу
прокрутки |
BOOL SetDate(COleDateTime tm); |
Устанавливает текущую дату |
BOOL AddNote(COleDateTime& date, CString strNote, BOOL
bReplace); |
Присоединяет к дате описание |
void DeleteNote(COleDateTime& date); |
Удаляет описание даты |
void ClearAllNotes(); |
Стирает все описания |
Использование
Файлы:
- CalWnd.h & CalWnd.cpp (Тело календаря)
- CalBtn.h & CalBtn.cpp (объекты-кнопки на календаре)
- Popup.h & Popup.cpp (Всплывающее контекстное меню)
- NoEdit.h & NoEdit.cpp (Запрещает edit box)
В заголовочный файл необходимо включить
"calwnd.h"
// Добавление календаря и зависимых файлов
#include "CalWnd.h"
Теперь создаём объект CCalWnd как член вашего
Вашего класса окна
class CMyWnd
{
public:
... другие объявления
protected:
CCalWnd m_wndCalendar;
Теперь создаём окно календаря.
int CChildView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
// Сперва вызываем OnCreate базового класса
if (CWnd ::OnCreate(lpCreateStruct) == -1)
return -1;
// Теперь создаём наш календарь
// при создании окна задаются координаты лева и верха.
// размер календаря устанавливается автоматически ...
if (m_wndCalendar.Create(NULL,"Calendar",
WS_VISIBLE|WS_CHILD,CRect(20,20,0,0),this,0x0101) == -1)
return -1;
... другой код
Так же Вам необходимо включить обработчик
сообщения об изменении даты. (Когда пользователь
кликает по дате). Он вставляется в .cpp файл Вашего
главного окна. Поместить его надо за пределами
комментария AFX_MSG_MAP.
BEGIN_MESSAGE_MAP(CChildView,CWnd )
//{{AFX_MSG_MAP(CChildView)
ON_WM_PAINT()
ON_WM_CREATE()
ON_WM_LBUTTONDBLCLK()
//}}AFX_MSG_MAP
ON_MESSAGE(WM_DATE_NOTIFY,OnDateNotify) // <--- СЮДА
END_MESSAGE_MAP()
И, соответственно, в .h файл. Естевственно за
пределами AFX_MSG_MAP комментария.
//{{AFX_MSG(CChildView)
afx_msg void OnPaint();
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
afx_msg void OnLButtonDblClk(UINT nFlags, CPoint point);
//}}AFX_MSG
void OnDateNotify(UINT nId); // <--- СЮДА
DECLARE_MESSAGE_MAP()
И в заключении сам обработчик.
LRESULT CChildView::OnDateNotify(WPARAM wParam, LPARAM nControlId)
{
COleDateTime tm = m_wndCalendar.GetDate();
TRACE("Date Selected %s for Control ID %d\n",
tm.Format("%c"), nControlId);
return 0;
}
Ну а более подробно о принципе работы календаря
можно посмотреть в исходнике :)
|