Aracılığıyla paylaş


Pencere Özelliklerini Kullanma

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

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