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.