Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bu konu başlığında, CreateWindowEx işlevini kullanarak bir ay takvimi denetiminin nasıl dinamik olarak oluşturulacağı gösterilmektedir.
Bilmeniz gerekenler
Teknolojileri
Önkoşullar
- C/C++
- Windows Kullanıcı Arabirimi Programlama
Talimatlar
Ay takvimi denetimi oluşturmak için createWindowExişlevini kullanarak pencere sınıfı olarak MONTHCAL_CLASS belirtin. Önce InitCommonControlsEx işlevini çağırarak, eşlik eden INITCOMMONCONTROLSEX yapısındaki ICC_DATE_CLASSES bitini belirterek pencere sınıfını kaydetmeniz gerekir.
Aşağıdaki örnekte, var olan bir modsuz iletişim kutusunda ay takvimi denetiminin nasıl oluşturulacağı gösterilmektedir. Unutmayın ki CreateWindowEx aktarılacak boyut değerlerinin tümü sıfırdır. Gereken en düşük boyut denetimin kullandığı yazı tipine bağlı olduğundan, örnek boyut bilgilerini istemek için MonthCal_GetMinReqRect makroyu kullanır ve ardından setWindowPosçağırarak denetimi yeniden boyutlandırıyor. Yazı tipini daha sonra WM_SETFONTile değiştirirseniz, denetimin boyutları değişmez. MonthCal_GetMinReqRect yeniden çağırmanız ve denetimi yeni yazı tipine uyacak şekilde yeniden boyutlandırmanız gerekir.
// Child window identifier of the month calendar.
#define IDC_MONTHCAL 101
// Symbols used by SetWindowPos function (arbitrary values).
#define LEFT 35
#define TOP 40
// Description:
// Creates a month calendar control in a dialog box.
// Parameters:
// hwndOwner - handle of the owner window.
// Nonlocal variables:
// MonthCalDlgProc - window procedure of the dialog box that
// contains the month calendar.
// g_hInst - global instance handle.
//
HRESULT CreateMonthCalDialog(HWND hwndOwner)
{
RECT rc;
INITCOMMONCONTROLSEX icex;
HWND hwndDlg = NULL;
HWND hwndMonthCal = NULL;
// Return an error code if the owner handle is invalid.
if (hwndOwner == NULL)
return E_INVALIDARG;
// Load the window class.
icex.dwSize = sizeof(icex);
icex.dwICC = ICC_DATE_CLASSES;
InitCommonControlsEx(&icex);
// Create a modeless dialog box to hold the control.
hwndDlg = CreateDialog(g_hInst,
MAKEINTRESOURCE(IDD_DATE_PICKER),
hwndOwner,
MonthCalDlgProc);
// Return if creating the dialog box failed.
if (hwndDlg == NULL)
return HRESULT_FROM_WIN32(GetLastError());
// Create the month calendar.
hwndMonthCal = CreateWindowEx(0,
MONTHCAL_CLASS,
L"",
WS_BORDER | WS_CHILD | WS_VISIBLE | MCS_DAYSTATE,
0,0,0,0, // resize it later
hwndDlg,
(HMENU) IDC_MONTHCAL,
g_hInst,
NULL);
// Return if creating the month calendar failed.
if (hwndMonthCal == NULL)
return HRESULT_FROM_WIN32(GetLastError());
// Get the size required to show an entire month.
MonthCal_GetMinReqRect(hwndMonthCal, &rc);
// Resize the control now that the size values have been obtained.
SetWindowPos(hwndMonthCal, NULL, LEFT, TOP,
rc.right, rc.bottom, SWP_NOZORDER);
// Set the calendar to the annual view.
MonthCal_SetCurrentView(hwndMonthCal, MCMV_YEAR);
// Make the window visible.
ShowWindow(hwndDlg, SW_SHOW);
return S_OK;
}
İlgili konular