Leaked source code of windows server 2003
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
/***************************************************************************\
* MapPropertyKey * * Copyright (c) 1985 - 1999, Microsoft Corporation * * Maps a property key string into an atom. * * History: * 21-Dec-1994 JimA Created. \***************************************************************************/
__inline ATOM MapPropertyKey( PCWSTR pszKey) { #ifdef _USERK_
/*
* Internal properties must use atoms, not strings. */ UserAssert(!IS_PTR(pszKey)); #else
/*
* Is pszKey an atom? If not, find the atom that matches the string. * If one doesn't exist, bail out. */ if (IS_PTR(pszKey)) return GlobalFindAtomW(pszKey); #endif
return PTR_TO_ID(pszKey); }
/***************************************************************************\
* FindProp * * Search the window's property list for the specified property. pszKey * could be a string or an atom. If it is a string, convert it to an atom * before lookup. FindProp will only find internal or external properties * depending on the fInternal flag. * * History: * 11-14-90 darrinm Rewrote from scratch with new data structures and * algorithms. \***************************************************************************/
PPROP _FindProp( PWND pwnd, PCWSTR pszKey, BOOL fInternal) { UINT i; PPROPLIST ppropList; PPROP pprop; ATOM atomKey;
/*
* Make sure we have a property list. */ ppropList = REBASE(pwnd, ppropList); if (ppropList == NULL) return NULL;
/*
* Call to the appropriate routine to verify the key name. */ atomKey = MapPropertyKey(pszKey); if (atomKey == 0) return NULL;
/*
* Now we've got the atom, search the list for a property with the * same atom/name. Make sure to only return internal properties if * the fInternal flag is set. Do the same for external properties. */ pprop = ppropList->aprop; for (i = ppropList->iFirstFree; i > 0; i--) { if (pprop->atomKey == atomKey) { if (fInternal) { if (pprop->fs & PROPF_INTERNAL) return pprop; } else { if (!(pprop->fs & PROPF_INTERNAL)) return pprop; } } pprop++; }
/*
* Property not found, too bad. */ return NULL; }
/***************************************************************************\
* InternalGetProp * * Search the window's property list for the specified property and return * the hData handle from it. If the property is not found, NULL is returned. * * History: * 11-14-90 darrinm Rewrote from scratch with new data structures and * algorithms. \***************************************************************************/
HANDLE _GetProp( PWND pwnd, PCWSTR pszKey, BOOL fInternal) { PPROP pprop;
/*
* A quick little optimization for that case where the window has no * properties at all. */ if (pwnd->ppropList == NULL) return NULL;
/*
* FindProp does all the work, including converting pszKey to an atom * (if necessary) for property lookup. */ pprop = _FindProp(pwnd, pszKey, fInternal); if (pprop == NULL) return NULL;
return KHANDLE_TO_HANDLE(pprop->hData); }
|