Freigeben über


Verwenden von Fenstereigenschaften

In diesem Abschnitt wird erläutert, wie die folgenden Aufgaben ausgeführt werden, die fenstereigenschaften zugeordnet sind.

Hinzufügen einer Window-Eigenschaft

Im folgenden Beispiel wird ein Symbol und dann ein Cursor geladen und arbeitsspeicher für einen Puffer zugeordnet. Im Beispiel wird dann die SetProp-Funktion verwendet, um die resultierenden Symbol-, Cursor- und Speicherhandles als Fenstereigenschaften für das Fenster zuzuweisen, das durch die anwendungsdefinierte hwndSubclass-Variable identifiziert wird. Die Eigenschaften werden durch die Zeichenfolgen PROP_ICON, PROP_CURSOR und PROP_BUFFER identifiziert.

#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); 

Abrufen einer Window-Eigenschaft

Ein Fenster kann Handles für seine Fenstereigenschaftendaten erstellen und die Daten für jeden Zweck verwenden. Im folgenden Beispiel wird GetProp verwendet, um Handles für die Fenstereigenschaften abzurufen, die durch PROP_ICON, PROP_CURSOR und PROP_BUFFER identifiziert werden. Im Beispiel wird dann der Inhalt des neu abgerufenen Speicherpuffers, Cursors und Symbols im Clientbereich des Fensters angezeigt.

#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); 

Auflisten von Fenstereigenschaften für ein bestimmtes Fenster

Im folgenden Beispiel listet die EnumPropsEx-Funktion die Zeichenfolgenbezeichner der Fenstereigenschaften für das Fenster auf, das durch die anwendungsdefinierte hwndSubclass-Variable identifiziert wird. Diese Funktion basiert auf der anwendungsdefinierten Rückruffunktion WinPropProc, um die Zeichenfolgen im Clientbereich des Fensters anzuzeigen.

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

Löschen einer Window-Eigenschaft

Wenn ein Fenster zerstört wird, muss es alle festgelegten Fenstereigenschaften zerstören. Im folgenden Beispiel werden die EnumPropsEx-Funktion und die anwendungsdefinierte Rückruffunktion DelPropProc verwendet, um die Eigenschaften zu zerstören, die dem Fenster zugeordnet sind, das durch die anwendungsdefinierte hwndSubclass-Variable identifiziert wird. Die Rückruffunktion, die die RemoveProp-Funktion verwendet, wird ebenfalls angezeigt.

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