/* * 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); } /* * 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; } /* * 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 pprop->hData; }