Delen via


Venstereigenschappen gebruiken

In deze sectie wordt uitgelegd hoe u de volgende taken uitvoert die zijn gekoppeld aan venstereigenschappen.

Een venstereigenschap toevoegen

In het volgende voorbeeld wordt een pictogram geladen en vervolgens een cursor en wordt geheugen toegewezen voor een buffer. In het voorbeeld wordt vervolgens de functie SetProp gebruikt om het resulterende pictogram, de cursor en het geheugen toe te wijzen als venstereigenschappen voor het venster dat is geïdentificeerd door de door de toepassing gedefinieerde hwndSubclass-variabele. De eigenschappen worden geïdentificeerd door de tekenreeksen PROP_ICON, PROP_CURSOR en PROP_BUFFER.

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

Een venstereigenschap ophalen

Een venster kan ingangen maken voor de venstereigenschapsgegevens en de gegevens voor elk doel gebruiken. In het volgende voorbeeld wordt GetProp- gebruikt om ingangen te verkrijgen voor de venstereigenschappen die zijn geïdentificeerd door PROP_ICON, PROP_CURSOR en PROP_BUFFER. In het voorbeeld wordt vervolgens de inhoud van de zojuist verkregen geheugenbuffer, cursor en pictogram weergegeven in het clientgebied van het venster.

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

Venstereigenschappen voor een bepaald venster weergeven

In het volgende voorbeeld bevat de functie EnumPropsEx de tekenreeks-id's van de venstereigenschappen voor het venster dat is geïdentificeerd door de door de toepassing gedefinieerde hwndSubclass-variabele. Deze functie is afhankelijk van de door de toepassing gedefinieerde callback-functie WinPropProc om de tekenreeksen weer te geven in het clientgebied van het venster.

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

Een venstereigenschap verwijderen

Wanneer een venster wordt vernietigd, moet het alle venstereigenschappen vernietigen die het heeft ingesteld. In het volgende voorbeeld wordt de EnumPropsEx--functie en de door de toepassing gedefinieerde callback-functie DelPropProc gebruikt om de eigenschappen te vernietigen die zijn gekoppeld aan het venster dat is geïdentificeerd door de door de toepassing gedefinieerde hwndSubclass-variabele. De callback-functie, die gebruikmaakt van de functie RemoveProp, wordt ook weergegeven.

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