다음을 통해 공유


월 달력 컨트롤 정보

월 달력 컨트롤은 달력과 같은 사용자 인터페이스를 구현합니다. 해당 컨트롤은 날짜를 입력하거나 선택하는 매우 직관적인 인식 방법을 사용자에게 제공합니다. 또한 기존의 데이터 형식을 사용하여 컨트롤에서 날짜 정보를 가져오고 설정하는 방법을 애플리케이션에 제공합니다.

월간 달력 컨트롤 기능

다음 스크린샷은 두 달을 표시하도록 크기가 조정된 월 달력 컨트롤을 보여 줍니다.

screen shot of a dialog box with a month calendar control showing two months, side by side

참고 항목

월 달력 컨트롤의 모양과 동작은 런타임 라이브러리 버전에 따라 약간 다릅니다. 이 항목에서는 Comctl32.dll 버전 6이 포함된 Windows Vista에 나타나는 컨트롤에 대해 중점적으로 설명합니다.

 

그림의 컨트롤에는 다음과 같은 선택적 기능이 있습니다.

  • 현재 날짜는 컨트롤 하단의 별도 줄에 표시됩니다. 기본 스타일입니다.
  • "today circle"(실제로 이 버전에서는 사각형)이 현재 날짜 주위에 표시되고 "Today" 줄 옆에 시각 신호로 나타납니다. 기본 스타일입니다.
  • 주 번호는 각 일 행의 왼쪽에 표시됩니다. 이 스타일을 지정해야 합니다.
  • 애플리케이션에서 설정한 요일 상태에 따라 일부 날짜는 굵게 표시됩니다. 예를 들어, 예약된 모임이 있는 날짜는 굵게 표시될 수 있습니다. 이 스타일을 지정해야 합니다.

참고

Windows는 1601 이전 날짜를 지원하지 않습니다. 자세한 내용은 FILETIME을 참조하세요.

월 달력 컨트롤은 1753년에 도입된 양력(그레고리력)을 기반으로 합니다. 1753년 이전에 사용되었던 율리우스력과 일치하는 날짜는 계산하지 않습니다.

 

날짜 선택

기본적으로 사용자가 월 달력 컨트롤의 왼쪽 상단 또는 오른쪽 상단에 있는 화살표 단추를 클릭하면 컨트롤이 디스플레이를 업데이트하여 이전 달 또는 다음 달을 표시합니다. 사용자는 첫 번째 달 이전과 마지막 달 이후에 표시된 부분 월을 클릭하여 동일한 작업을 수행할 수도 있습니다.

다음 키보드 명령을 사용하여 선택 항목을 이동할 수도 있습니다. 달력은 필요에 따라 선택한 날짜를 표시하기 위해 항상 스크롤됩니다. (가상 키 코드는 표에 나와 있습니다.)

명령 설명
왼쪽 화살표(VK_LEFT) 이전 날짜를 선택합니다.
오른쪽 화살표(VK_RIGHT) 다음 날짜를 선택합니다.
위쪽 화살표(VK_UP) 지난 주의 같은 날짜를 선택합니다.
아래쪽 화살표(VK_DOWN) 다음 주의 같은 날짜를 선택합니다.
페이지 위로(VK_PRIOR) 지난달의 같은 날짜를 선택합니다. (해당 월에 날짜가 없으면 가장 가까운 날짜가 선택됩니다. 예를 들어, 3월 31일에서 2월 28일 또는 29일로 선택이 이동합니다.)
페이지 다운(VK_NEXT) 다음 달의 같은 날짜를 선택합니다.
홈(VK_HOME) 현재 달의 첫째 날짜를 선택합니다.
끝(VK_END) 현재 달의 마지막 날짜를 선택합니다.
CTRL+HOME 한 달 뒤로 스크롤하고 맨 왼쪽 열에서 날짜를 선택합니다.
CTRL+END 한 달 앞으로 스크롤하여 맨 오른쪽 열에서 날짜를 선택합니다.
CTRL + PAGE UP 이전 달의 같은 날을 선택합니다. 선택 항목이 이동하는 개월 수는 컨트롤에 표시되는 개월 수입니다. 예를 들어, 두 달이 표시되면 선택 항목이 6월 6일에서 5월 6일로 이동합니다.
CTRL + PAGE DOWN 이전 달의 같은 날을 선택합니다. 선택 항목이 이동하는 개월 수는 컨트롤에 표시되는 개월 수입니다. 예를 들어, 두 달이 표시되면 선택 항목이 6월 6일에서 8월 6일로 이동합니다.

 

월 달력 컨트롤이 MCS_NOTODAY 스타일을 사용하지 않는 경우 사용자는 컨트롤 하단의 'Today' 텍스트를 클릭하여 현재 날짜로 돌아갈 수 있습니다. 현재 날짜가 표시되지 않으면 컨트롤이 디스플레이를 업데이트하여 표시합니다.

애플리케이션은 MCM_SETMONTHDELTA 메시지 또는 해당 매크로 MonthCal_SetMonthDelta를 사용하여 컨트롤이 디스플레이를 업데이트하는 개월 수를 변경할 수 있습니다. 그러나 PAGE UP 및 PAGE DOWN 키는 표시된 월 수 또는 MCM_SETMONTHDELTA에서 설정한 값에 관계없이 선택한 월을 하나씩 변경합니다.

인접하지 않은 월 선택

사용자가 표시된 달의 이름을 클릭하면 해당 연도의 모든 달이 나열됩니다(이전 버전에서는 팝업 메뉴임). 사용자는 목록에서 월을 선택할 수 있습니다. 사용자의 선택이 표시되지 않으면 월 달력 컨트롤이 디스플레이를 스크롤하여 선택한 월을 표시합니다. 다음 스크린샷에서 월 달력 컨트롤은 인접한 두 연도의 월을 보여 줍니다.

screen shot of a dialog box with a month calendar control showing all the months of 2007 and 2008

다른 연도 선택

사용자가 연도를 클릭하면 다음 스크린샷과 같이 연도 그룹이 나열되고 사용자는 다른 연도를 선택할 수 있습니다.

screen shot of a month calendar control showing all years from 1999 to 2020

지역화

월 달력 컨트롤은 LOCALE_USER_DEFAULT에서 형식과 모든 문자열을 가져옵니다.

월 달력 컨트롤의 시간

월 달력 컨트롤은 시간을 표시하지 않습니다. 그러나 선택한 날짜 또는 오늘 날짜를 설정하고 검색하는 데 사용되는 SYSTEMTIME 구조체에는 시간 필드가 포함되어 있습니다. 날짜가 프로그래밍 방식으로 설정되면 컨트롤은 시간 필드를 있는 그대로 복사하거나 먼저 유효성을 검사한 다음 잘못된 경우 현재 기본 시간을 저장합니다. 다음은 날짜를 설정하는 메시지 목록과 시간 필드 처리 방법에 대한 설명입니다.

메시지 Description
MCM_SETCURSEL 컨트롤은 유효성 검사나 수정 없이 시간 필드를 있는 그대로 복사합니다.
MCM_SETRANGE 전달된 구조체의 시간 필드의 유효성이 검사됩니다. 유효한 경우 시간 필드가 수정 없이 복사됩니다. 유효하지 않은 경우 컨트롤은 오늘 데이터에서 시간 필드를 복사합니다.
MCM_SETSELRANGE 전달된 구조체의 시간 필드의 유효성이 검사됩니다. 유효한 경우 시간 필드가 수정 없이 복사됩니다. 유효하지 않은 경우 컨트롤은 현재 선택 범위의 시간 필드를 유지합니다.
MCM_SETTODAY 컨트롤은 유효성 검사나 수정 없이 시간 필드를 있는 그대로 복사합니다.

 

컨트롤에서 날짜를 검색하면 저장된 시간에서 시간 필드가 수정 없이 복사됩니다. 컨트롤에 의한 시간 필드 처리는 프로그래머의 편의를 위해 제공됩니다. 컨트롤은 위에 나열된 작업 이외의 작업 결과로 시간 필드를 검사하거나 수정하지 않습니다.