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 bölümde, pencere özellikleriyle ilişkili aşağıdaki görevlerin nasıl gerçekleştirilecekleri açıklanmaktadır.
- Pencere Özelliği ekleme
- Pencere Özelliği alma
- Belirli Bir Pencere İçin Pencere Özelliklerini Listeleme
- Bir Pencere Özelliğini Silme
Pencere Özelliği Ekleme
Aşağıdaki örnek, önce bir simge ardından bir imleç yükler ve arabellek için bellek ayırır. Daha sonra örnek, uygulama tanımlı hwndSubclass değişkeni tarafından tanımlanan pencere için pencere özellikleri olarak elde edilen simge, imleç ve bellek tanıtıcılarını atamak üzere SetProp işlevini kullanır. Özellikler PROP_ICON, PROP_CURSOR ve PROP_BUFFER dizeleriyle tanımlanır.
#define BUFFER 4096
HINSTANCE hinst; // handle of current instance
HWND hwndSubclass; // handle of a subclassed window
HANDLE hIcon, hCursor;
HGLOBAL hMem;
char *lpMem;
TCHAR tchPath[] = "c:\\winnt\\samples\\winprop.c";
HRESULT hResult;
// Load resources.
hIcon = LoadIcon(hinst, MAKEINTRESOURCE(400));
hCursor = LoadCursor(hinst, MAKEINTRESOURCE(220));
// Allocate and fill a memory buffer.
hMem = GlobalAlloc(GPTR, BUFFER);
lpMem = GlobalLock(hMem);
if (lpMem == NULL)
{
// TODO: write error handler
}
hResult = StringCchCopy(lpMem, STRSAFE_MAX_CCH, tchPath);
if (FAILED(hResult))
{
// TO DO: write error handler if function fails.
}
GlobalUnlock(hMem);
// Set the window properties for hwndSubclass.
SetProp(hwndSubclass, "PROP_ICON", hIcon);
SetProp(hwndSubclass, "PROP_CURSOR", hCursor);
SetProp(hwndSubclass, "PROP_BUFFER", hMem);
Pencere Özelliğini Alma
Pencere, pencere özelliği verilerine işaretçiler oluşturabilir ve verileri herhangi bir amaçla kullanabilir. Aşağıdaki örnekte, PROP_ICON, PROP_CURSOR ve PROP_BUFFER tarafından tanımlanan pencere özelliklerinin tanıtıcılarını elde etmek için GetPropkullanılır. Örnek daha sonra pencerenin istemci alanında yeni alınan bellek arabelleği, imleç ve simgenin içeriğini görüntüler.
#define PATHLENGTH 256
HWND hwndSubclass; // handle of a subclassed window
HANDLE hIconProp, hCursProp;
HGLOBAL hMemProp;
char *lpFilename;
TCHAR tchBuffer[PATHLENGTH];
size_t * nSize;
HDC hdc;
HRESULT hResult;
// Get the window properties, then use the data.
hIconProp = (HICON) GetProp(hwndSubclass, "PROP_ICON");
TextOut(hdc, 10, 40, "PROP_ICON", 9);
DrawIcon(hdc, 90, 40, hIconProp);
hCursProp = (HCURSOR) GetProp(hwndSubclass, "PROP_CURSOR");
TextOut(hdc, 10, 85, "PROP_CURSOR", 9);
DrawIcon(hdc, 110, 85, hCursProp);
hMemProp = (HGLOBAL) GetProp(hwndSubclass, "PROP_BUFFER");
lpFilename = GlobalLock(hMemProp);
hResult = StringCchPrintf(tchBuffer, PATHLENGTH,
"Path to file: %s", lpFilename);
if (FAILED(hResult))
{
// TODO: write error handler if function fails.
}
hResult = StringCchLength(tchBuffer, PATHLENGTH, nSize)
if (FAILED(hResult))
{
// TODO: write error handler if function fails.
}
TextOut(hdc, 10, 10, tchBuffer, *nSize);
Belirli Bir Pencerenin Pencere Özelliklerini Listeleme
Aşağıdaki örnekte EnumPropsEx işlevi, uygulama tanımlı hwndSubclass değişkeni tarafından tanımlanan pencerenin pencere özelliklerinin dize tanımlayıcılarını listeler. Bu işlev, dizeleri pencerenin istemci alanında görüntülemek için uygulama tanımlı geri çağırma işlevi WinPropProc'a dayanır.
EnumPropsEx(hwndSubclass, WinPropProc, NULL);
// WinPropProc is an application-defined callback function
// that lists a window property.
BOOL CALLBACK WinPropProc(
HWND hwndSubclass, // handle of window with property
LPCSTR lpszString, // property string or atom
HANDLE hData) // data handle
{
static int nProp = 1; // property counter
TCHAR tchBuffer[BUFFER]; // expanded-string buffer
size_t * nSize; // size of string in buffer
HDC hdc; // device-context handle
HRESULT hResult;
hdc = GetDC(hwndSubclass);
// Display window property string in client area.
hResult = StringCchPrintf(tchBuffer, BUFFER, "WinProp %d: %s", nProp++, lpszString);
if (FAILED(hResult))
{
// TO DO: write error handler if function fails.
}
hResult = StringCchLength(tchBuffer, BUFFER, nSize);
if (FAILED(hResult))
{
// TO DO: write error handler if function fails.
}
TextOut(hdc, 10, nProp * 20, tchBuffer, *nSize);
ReleaseDC(hwndSubclass, hdc);
return TRUE;
}
Pencere Özelliğini Silme
Bir pencere yok edildiğinde, ayarlandığı pencere özelliklerini yok etmesi gerekir. Aşağıdaki örnek, uygulama tanımlı hwndSubclass değişkeni tarafından tanımlanan pencereyle ilişkili özellikleri yok etmek için EnumPropsEx işlevini ve uygulama tanımlı geri çağırma işlevi DelPropProc'u kullanır. RemoveProp işlevini kullanan geri çağırma işlevi de gösterilir.
case WM_DESTROY:
EnumPropsEx(hwndSubclass, DelPropProc, NULL);
PostQuitMessage(0);
break;
// DelPropProc is an application-defined callback function
// that deletes a window property.
BOOL CALLBACK DelPropProc(
HWND hwndSubclass, // handle of window with property
LPCSTR lpszString, // property string or atom
HANDLE hData) // data handle
{
hData = RemoveProp(hwndSubclass, lpszString);
//
// if appropriate, free the handle hData
//
return TRUE;
}