다음을 통해 공유


월별 달력 컨트롤에 대한 정보

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

월 달력 컨트롤 기능

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

2개월을 나란히 표시하는 월 달력 컨트롤이 있는 대화 상자의 스크린샷을

메모

월 달력 컨트롤의 모양과 동작은 런타임 라이브러리의 다른 버전에서 약간 다릅니다. 이 항목에서는 Comctl32.dll의 버전 6이 Windows Vista에 표시되는 방식으로 컨트롤에 중점을 둡니다.

 

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

  • 현재 날짜는 컨트롤 아래쪽에 있는 별도의 줄에 표시됩니다. 기본 스타일입니다.
  • "이 버전에서는 사각형으로 나타나는 "오늘 원"은 현재 날짜를 둘러싸고 나타나며 "오늘" 줄 옆에 시각적인 단서로 사용됩니다." 기본 스타일입니다.
  • 주 번호는 각 일 행의 왼쪽에 표시됩니다. 이 스타일을 지정해야 합니다.
  • 일부 날짜는 애플리케이션에서 설정한 날짜 상태에 따라 굵게 표시됩니다. 예를 들어 모임이 예약된 날짜는 굵게 표시될 수 있습니다. 이 스타일을 지정해야 합니다.

메모

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

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

 

하루 선택

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

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

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

 

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

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

인접하지 않은 월 선택

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

한 대화 상자의 스크린샷으로, 2007년과 2008년의 모든 월을 보여 주는 월 달력 컨트롤이 있습니다.

다른 연도 선택

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

1999년부터 2020년까지의 모든 연도를 보여 주는 월 달력 컨트롤의 스크린샷

지역화

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

월 달력 컨트롤의 시간 설정

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

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

 

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