Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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.