티스토리 뷰

크리에이티브 커먼즈 라이선스
Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시 2.0 대한민국 라이선스에 따라 이용하실 수 있습니다.
본문

열혈강의 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




개인 광고 영역


댓글
  • 프로필사진 111 좋은자료 감사합니다.. 이자료참고하면서 만들고있는데

    오류를 도저히 못해결하겠습니다 ㅠㅠ...
    2013.12.07 12:19
  • 프로필사진 BlogIcon taehwan ..어떤 오류이신지를 알려주셔야.. 2013.12.07 13:17 신고
  • 프로필사진 비밀댓글입니다 2014.05.13 21:38
  • 프로필사진 BlogIcon taehwan 해당 코드는 Visual C++ 2008에서 작업한것이기에 Visual C++ 6.0에서는 동작하지 않습니다. 코드 수정을 하시거나, 해당 패키지로 처음부터 다시 만드셔야 합니다. 2014.05.14 13:24 신고
  • 프로필사진 비밀댓글입니다 2014.05.15 10:29
  • 프로필사진 BlogIcon taehwan 그렇죠. 실행이 안되죠. 버전이 괜히 다른게 아니니^^;; 지원하는 API가 약간씩 차이가 나게됩니다. 2014.05.15 21:52 신고
  • 프로필사진 비밀댓글입니다 2014.05.24 08:36
  • 프로필사진 BlogIcon taehwan 해당 글은 학생때 작성한것으로 몇년이 지났습니다. 책의 예제를 보고 만든것이기에 책을 참고하시는게 좋겠군요. 제가 알려드릴 수 있는 부분이 없네요.

    그리고 질문하신 분이.. 자신의 메일주소를 남기셔야지 .. 알려달라고 하시는건 아니라고 생각되네요. 참고로 블로그 내에 메일 주소를 남겨두었습니다.
    2014.05.24 08:08 신고
  • 프로필사진 비밀댓글입니다 2014.05.24 08:38
댓글쓰기 폼