Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Ez a szakasz az ablaktulajdonságokkal kapcsolatos alábbi feladatokat ismerteti.
- Ablaktulajdonság hozzáadása
- Ablak tulajdonság beolvasása
- Adott ablak ablaktulajdonságainak felsorolása
- Ablaktulajdonság törlése
Ablaktulajdonság hozzáadása
Az alábbi példa betölt egy ikont, majd egy kurzort, és lefoglalja a memóriát egy puffer számára. A példa ezután a SetProp függvénnyel rendeli hozzá az eredményül kapott ikont, kurzort és memóriafogantyúkat az alkalmazás által definiált hwndSubclass változó által azonosított ablak tulajdonságaiként. A tulajdonságokat a PROP_ICON, PROP_CURSOR és PROP_BUFFER sztringek azonosítják.
#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);
Ablaktulajdonság beolvasása
Az ablak fogantyúkat hozhat létre az ablaktulajdonságai adatainak, és az adatokat bármilyen célra felhasználhatja. Az alábbi példa a GetProp használatával szerzi be a PROP_ICON, PROP_CURSOR és PROP_BUFFER által azonosított ablaktulajdonságokhoz használt fogópontokat. A példa ezután megjeleníti az újonnan beszerzett memóriapuffer, kurzor és ikon tartalmát az ablak ügyfélterületén.
#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);
Adott ablak ablaktulajdonságainak listázása
Az alábbi példában az EnumPropsEx függvény az alkalmazás által definiált HwndSubclass változó által azonosított ablaktulajdonságok sztringazonosítóit sorolja fel. Ez a függvény az alkalmazás által definiált WinPropProc visszahívási függvényre támaszkodik, hogy megjelenítse a sztringeket az ablak ügyfélterületén.
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;
}
Ablaktulajdonság törlése
Ha egy ablak megsemmisül, el kell pusztítania a beállított ablaktulajdonságokat. Az alábbi példa az EnumPropsEx függvényt és az alkalmazás által definiált DelPropProc visszahívási függvényt használja az alkalmazás által definiált HwndSubclass változó által azonosított ablakhoz társított tulajdonságok megsemmisítésére. Megjelenik a visszahívási függvény is, amely a RemoveProp függvényt használja.
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;
}