티스토리 뷰

열혈강의 VISUAL C++ 2008 MFC 윈도우 프로그래밍 참고

MSDN 참고


아래는 MFC의 달력 컨트롤을 사용한 예제입니다.

Month Calendar 컨트롤, Date Time Picker 컨트롤과 List Box를 사용하였습니다.

Month Calendar에서 선택한 값을 리스트에 추가하고, Date Time Picker의 날자를 기준으로 특정 일 만큼 이동하는 예제입니다.


새로운 프로젝트 생성

 MFC Application으로 새로운 프로젝트를 생성합니다.


다이얼로그를 클릭하고, 유니코드는 사용하도록 하고, 완료를 클릭합니다.


컨트롤러 추가

 도구상자(Toolbox)에서 Month Calendar Control을 추가합니다.


변수 추가

 Month Calendar Control의 변수를 추가해줍니다. 카테고리를 Value로 선택하고, 이름은 m_timeMC로 추가합니다.


 도구상자(Toolbox)에서 Date Time Picker을 추가하고, 변수를 추가합니다. Month Calendar와 동일하게 카테고리를 value로 선택하고, m_timeTP로 추가합니다.



 도구상자(Toolbox)에서 List Box을 추가합니다.


 도구상자(Toolbox)에서 Button 2개와 입력 컨트롤을 추가합니다.


 나머지 List Box, Edit box 변수를 추가합니다. 저는 List Box = m_listBox(카테고리 control), Edit box = m_strDay(카테고리 value) 변수로 추가하였습니다.


버튼 2개는 더블클릭 또는 이벤트 핸들러를 추가합니다. 이벤트 핸들러는 BN_CLICKED로 Cex00calendarDlg에 추가합니다.


멤버의 선언과 초기화 코드 - ex00calendarDlg.h

protected:
	HICON m_hIcon;

	// Generated message map functions
	virtual BOOL OnInitDialog();
	afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
	afx_msg void OnPaint();
	afx_msg HCURSOR OnQueryDragIcon();
	DECLARE_MESSAGE_MAP()
public:
	COleDateTime m_timeMC;  //왼쪽에 있는 Month Calendar 컨트롤
	COleDateTime m_timeTP; //오른쪽에 있는 Date Time Picker
	CListBox m_listBox; //List box
	afx_msg void OnBnClickedButton2(); //버튼 1
	afx_msg void OnBnClickedButton3(); //버튼 2
	CString m_strDay; //입력 박스

소스코드 초기화 부분 - ex00calendarDlg.cpp

Cex00calendarDlg::Cex00calendarDlg(CWnd* pParent /*=NULL*/)
	: CDialogEx(Cex00calendarDlg::IDD, pParent)
	, m_timeMC(COleDateTime::GetCurrentTime()) //Month Calendar 컨트롤
	, m_timeTP(COleDateTime::GetCurrentTime()) //Date Time Picker 컨트롤
	, m_strDay(_T(""))  //입력 박스 초기화
{
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

마우스 클릭 소스코드(리스트에 추가) - ex00calendarDlg.cpp

/* button 클릭 시 왼쪽의 달력에서 년, 월, 일을 List 에 추가하는 코드 */
void Cex00calendarDlg::OnBnClickedButton2()
{
	// TODO: Add your control notification handler code here
	UpdateData();
	CString str;
	str.Format(_T("%d-%d-%d"), m_timeMC.GetYear(), m_timeMC.GetMonth(), m_timeMC.GetDay());
	m_listBox.AddString(str);
	UpdateData(false);
}

마우스 클릭 소스코드(특정일로 이동) - ex00calendarDlg.cpp

/* 버튼 클릭 시 오른쪽 Date Time Picer을 기준으로 COleDateTimeSpan(일, 시간, 분, 초)를 뺀 만큼 이동하는 소스코드 */
void Cex00calendarDlg::OnBnClickedButton3()
{
	// TODO: Add your control notification handler code here
	UpdateData();
	int day = _ttoi(m_strDay);
	//COleDateTimeSpan 일, 시간, 분, 초
	m_timeMC = (m_timeTP - COleDateTimeSpan(day, 0, 0, 0));
	UpdateData(false);
}

추가로 COleDateTime은 년, 월, 일, 시, 분, 초를  사용 수 있습니다.

  MSDN 링크 : http://bit.thdev.net/JwTxVw

COleDateTimeSpan은 일, 시, 분, 초를 사용 수 있습니다.

  MSDN 링크 : http://bit.thdev.net/KmRIqA






댓글