Оригинальный DVD-ROM: eXeL@B DVD !
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
выпущен 2 августа!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

ПРОГРАММИРОВАНИЕ НА C и С++



Давно заметил, что всё-таки языки С/C++ это не самый лучший вариант программирования под Windows. Сейчас появилась масса более современных и удобных языков, например тот же Python - кроссплатформенный язык, очень легок в изучение. Я его изучил буквально за несколько дней по этому курсу - ссылка. Автор постарался, там видеоуроки на удивление легкие и понятные.

 

Календарь


Автор: 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;
 
 }

Ну а более подробно о принципе работы календаря можно посмотреть в исходнике :)



<< ВЕРНУТЬСЯ В ПОДРАЗДЕЛ

<< ВЕРНУТЬСЯ В ОГЛАВЛЕНИЕ




Материалы находятся на сайте https://exelab.ru/pro/



Оригинальный DVD-ROM: eXeL@B DVD !


Вы находитесь на EXELAB.rU
Проект ReactOS