다음을 통해 공유


날짜 및 시간 선택 컨트롤의 콜백 필드를 사용합니다.

날짜 및 시간 선택 필드를 정의 하는 표준 서식 문자 외에 사용자 지정 형식 문자열의 특정 부분을 콜백 필드로 지정 하 여 출력을 사용자 지정할 수 있습니다.콜백 필드를 선언 하려면 하나 이상의 "X" 문자 (ASCII 코드 88) 아무 곳 이나 형식 문자열의 본문에 포함 됩니다.예를 들어, 다음 문자열 "' 오늘입니다: '년' 'MM' / / 'dd' (Day 'X')'" 일년 월, 날짜 및 날짜의 연도에서 마지막으로 현재 값을 표시 하려면 날짜 및 시간 선택 컨트롤 하면 됩니다.

[!참고]

개수 X 콜백 필드에 표시 되는 문자 수가 일치 하지 않습니다.

여러 콜백 필드에 "X" 문자를 반복 하 여 사용자 지정 문자열을 구분할 수 있습니다.따라서, 형식 문자열 "XXddddMMMdd', ' yyyXXX" 두 고유 콜백 필드인 "XX" 및 "XXX" 포함 되어 있습니다.

[!참고]

콜백 필드 올바른 필드로 처리 응용 프로그램을 처리할 준비가 되어 있어야 하므로 DTN_WMKEYDOWN 알림 메시지입니다.

날짜 및 시간 선택 컨트롤에서 구현 하는 콜백 필드 세 부분으로 구성 되어 있습니다.

  • 사용자 지정 형식 문자열 초기화

  • 처리는 DTN_FORMATQUERY 알림

  • 처리는 DTN_FORMAT 알림

사용자 지정 형식 문자열 초기화

사용자 지정 문자열에 대 한 호출을 초기화 CDateTimeCtrl::SetFormat.자세한 내용은 를 사용 하 여 사용자 지정 형식 문자열에 날짜 및 시간 선택 컨트롤.사용자 지정 형식 문자열을 설정 하는 공통 위치입니다의 OnInitDialog 함수를 포함 하는 대화 상자 클래스의 또는 OnInitialUpdate 함수를 포함 하는 뷰 클래스의.

DTN_FORMATQUERY 알림을 처리합니다.

컨트롤 서식 문자열을 구문 분석 하 고 콜백 필드를 발견 한 경우 응용 프로그램을 보냅니다 DTN_FORMATDTN_FORMATQUERY 알림 메시지입니다.쿼리할 콜백 필드를 결정할 수 있도록 콜백 필드 문자열을 사용 하 여 알림을 포함 되어 있습니다.

DTN_FORMATQUERY 알림 보냄의 최대 허용 크기를 픽셀 단위로 현재 콜백 필드에 표시 되는 문자열을 검색할 수 있습니다.

이 값을 제대로 계산 하려면 컨트롤의 표시 글꼴을 사용 하 여 높이 및 너비 필드에 대체 문자열의 계산 해야 합니다.문자열의 실제 계산은를 쉽게 얻을 수 있습니다의 GetTextExtentPoint32 Win32 함수입니다.크기 결정 되 면 값은 응용 프로그램에 다시 전달 하 고 처리기 함수를 끝냅니다.

다음 예제에서는 콜백 문자열의 크기를 제공 하는 한 가지 방법은 다음과 같습니다.

void CMyDialog::OnDtnFormatqueryDatetimepicker1(NMHDR *pNMHDR, LRESULT *pResult)
{
   LPNMDATETIMEFORMATQUERY pDTFormatQuery = 
      reinterpret_cast<LPNMDATETIMEFORMATQUERY>(pNMHDR);
   CDC* pDC = NULL;
   CFont* pFont = NULL;
   CFont* pOrigFont = NULL;

   //  Prepare the device context for the GetTextExtentPoint32 call.
   pDC = GetDC();
   if (NULL == pDC)
   {
      return;
   }

   pFont = GetFont();
   if(NULL == pFont)
   {
      pFont = new CFont();
      VERIFY(pFont->CreateStockObject(DEFAULT_GUI_FONT));
   }

   pOrigFont = pDC->SelectObject(pFont);

   // Check to see if this is the callback segment desired. If so,
   // use the longest text segment to determine the maximum 
   // width of the callback field, and then place the information into 
   // the NMDATETIMEFORMATQUERY structure.
   if(!_tcscmp(_T("X"), pDTFormatQuery->pszFormat))
   {
      ::GetTextExtentPoint32(pDC->m_hDC, _T("366"), 3, &pDTFormatQuery->szMax);
   }

   // Reset the font in the device context then release the context.
   pDC->SelectObject(pOrigFont);
   ReleaseDC(pDC);

   *pResult = 0;
}

현재 콜백 필드의 크기를 계산한 후에 필드의 값을 제공 해야 합니다.이 대 한 처리기에서 수행 됩니다를 DTN_FORMAT 알림.

DTN_FORMAT 알림 메시지 처리

DTN_FORMAT 알림 사용 응용 프로그램에 의해 대체 될 문자열을 요청 합니다.다음 예제에서는 여러 가능한 메서드를 보여 줍니다.

void CMyDialog::OnDtnFormatDatetimepicker1(NMHDR *pNMHDR, LRESULT *pResult)
{
   LPNMDATETIMEFORMAT pDTFormat = reinterpret_cast<LPNMDATETIMEFORMAT>(pNMHDR);

   COleDateTime oCurTime;

   m_DateTimeCtrl.GetTime(oCurTime);

   _itot_s(oCurTime.GetDayOfYear(), pDTFormat->szDisplay, 
      sizeof(pDTFormat->szDisplay) / sizeof(TCHAR), 10);

   *pResult = 0;
}

[!참고]

포인터에는 NMDATETIMEFORMAT 구조 발견 되는 첫 번째 알림 처리기를 적절 한 형식 매개 변수를 캐스팅 하 여.

참고 항목

참조

에서는 사용할 수 있는 사용합니다.

개념

컨트롤 (MFC)