Udostępnij za pośrednictwem


Za pomocą wywołania zwrotnego pól daty i formant wyboru czas

Oprócz standardowego formatu znaków, określające pola wyboru daty i godziny dane wyjściowe można dostosować, określając niektórych części ciąg formatu niestandardowego pola wywołania zwrotnego.Aby zadeklarować pole wywołania zwrotnego, obejmują jeden lub więcej znaków "X" (88 kodu ASCII) gdziekolwiek w treści ciąg formatu.Na przykład, następujący ciąg "" jest obecnie: "yy" / "MM" / "dd" (dzień "X") ""powoduje, że formant wyboru daty i godziny wyświetlić bieżącą wartość jako rok, miesiąc, daty i wreszcie dzień roku.

[!UWAGA]

Liczba x w wywołaniu zwrotnym pola nie odpowiada liczba znaków, które będą wyświetlane.

Można rozróżnić wielu pól wywołania zwrotnego w niestandardowy ciąg przez powtarzanie znaku "X".Tak więc ciąg formatu "XXddddMMMdd", "yyyXXX" zawiera dwa pola unikatowego wywołania zwrotnego: "XX" i "XXX".

[!UWAGA]

Pola wywołania zwrotnego są traktowane jako prawidłowe pola tak aplikacji musi być przygotowany do obsługi DTN_WMKEYDOWN wiadomości powiadomień.

Formant wyboru daty i godziny wykonania wywołania zwrotnego pola składa się z trzech części:

  • Inicjowanie ciąg formatu niestandardowego

  • Obsługa DTN_FORMATQUERY powiadomienia

  • Obsługa DTN_FORMAT powiadomienia

Inicjowanie niestandardowy ciąg formatu

Niestandardowy ciąg z zaproszeniem do zainicjowania CDateTimeCtrl::SetFormat.Aby uzyskać więcej informacji, zobacz Za pomocą niestandardowe ciągi formatów daty i czasu formant wyboru.Wspólne miejsce określić ciąg formatu niestandardowego jest w OnInitDialog funkcji klasy okno dialogowe zawierające lub OnInitialUpdate funkcji klasy zawierającej widok.

Obsługa powiadomienie DTN_FORMATQUERY

Podczas kontroli analizowania ciągu formatu i napotka pole wywołania zwrotnego, aplikacja wysyła DTN_FORMAT i DTN_FORMATQUERY wiadomości powiadomień.Ciąg pole wywołania zwrotnego jest dołączony do powiadomienia, dzięki czemu można określić pole wywołania zwrotnego, które dotyczy kwerenda.

DTN_FORMATQUERY powiadomienie jest wysyłane do pobierania maksymalny dozwolony rozmiar w pikselach ciąg, który będzie wyświetlany w bieżącym polu wywołanie zwrotne.

Aby poprawnie obliczyć tę wartość, to musi obliczyć wysokość i szerokość ciąg na polu, przy użyciu czcionki formantu.W kalkulacji ciąg jest łatwo osiągnięte z zaproszeniem do GetTextExtentPoint32 funkcji Win32.Po określeniu rozmiaru przekazać wartość z powrotem do aplikacji i funkcji obsługi wyjść.

Poniższy przykład jest jedną z metod dostarczania rozmiar ciągu wywołania zwrotnego:

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;
}

Gdy rozmiar bieżącego pola wywołania zwrotnego został obliczony, należy podać wartość dla pola.Jest to wykonywane w obsługi dla DTN_FORMAT powiadomienia.

Obsługa powiadomienie DTN_FORMAT

DTN_FORMAT powiadomienia jest używany przez aplikację do żądania ciąg znaków, który zostanie zastąpiony.Poniższy przykład ilustruje jedną z możliwych metod:

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;
}

[!UWAGA]

Wskaźnik, aby NMDATETIMEFORMAT struktury znajduje się przez rzutowanie pierwszy parametr obsługi powiadamiania właściwego typu.

Zobacz też

Informacje

Przy użyciu CDateTimeCtrl

Koncepcje

Formanty (MFC)