Megosztás a következőn keresztül:


Ablaktulajdonságok használata

Ez a szakasz az ablaktulajdonságokkal kapcsolatos alábbi feladatokat ismerteti.

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