Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
In deze sectie wordt uitgelegd hoe u de volgende taken uitvoert die zijn gekoppeld aan venstereigenschappen.
- een venstereigenschap toevoegen
- een venstereigenschap ophalen
- eigenschappen van een venster weergeven voor een bepaald venster
- een venstereigenschap verwijderen
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;
}