?? ordinal.c
字號(hào):
* Check or uncheck a menu item.
*
* PARAMS
* hMenu [I] Menu holding menu item
* uID [I] ID of menu item to check/uncheck
* bCheck [I] Whether to check (TRUE) or uncheck (FALSE) the item.
*
* RETURNS
* The return code from CheckMenuItem.
*/
DWORD WINAPI SHCheckMenuItem(HMENU hMenu, UINT uID, BOOL bCheck)
{
return CheckMenuItem(hMenu, uID, bCheck ? MF_CHECKED : MF_UNCHECKED);
}
/*************************************************************************
* @ [SHLWAPI.183]
*
* Register a window class if it isn't already.
*
* PARAMS
* lpWndClass [I] Window class to register
*
* RETURNS
* The result of the RegisterClassA call.
*/
DWORD WINAPI SHRegisterClassA(WNDCLASSA *wndclass)
{
WNDCLASSA wca;
if (GetClassInfoA(wndclass->hInstance, wndclass->lpszClassName, &wca))
return TRUE;
return (DWORD)RegisterClassA(wndclass);
}
/*************************************************************************
* @ [SHLWAPI.186]
*/
BOOL WINAPI SHSimulateDrop(IDropTarget *pDrop, IDataObject *pDataObj,
DWORD grfKeyState, PPOINTL lpPt, DWORD* pdwEffect)
{
DWORD dwEffect = DROPEFFECT_LINK | DROPEFFECT_MOVE | DROPEFFECT_COPY;
POINTL pt = { 0, 0 };
if (!lpPt)
lpPt = &pt;
if (!pdwEffect)
pdwEffect = &dwEffect;
IDropTarget_DragEnter(pDrop, pDataObj, grfKeyState, *lpPt, pdwEffect);
if (*pdwEffect)
return IDropTarget_Drop(pDrop, pDataObj, grfKeyState, *lpPt, pdwEffect);
IDropTarget_DragLeave(pDrop);
return TRUE;
}
/*************************************************************************
* @ [SHLWAPI.187]
*
* Call IPersistPropertyBag_Load() on an object.
*
* PARAMS
* lpUnknown [I] Object supporting the IPersistPropertyBag interface
* lpPropBag [O] Destination for loaded IPropertyBag
*
* RETURNS
* Success: S_OK.
* Failure: An HRESULT error code, or E_FAIL if lpUnknown is NULL.
*/
DWORD WINAPI SHLoadFromPropertyBag(IUnknown *lpUnknown, IPropertyBag* lpPropBag)
{
IPersistPropertyBag* lpPPBag;
HRESULT hRet = E_FAIL;
TRACE("(%p,%p)\n", lpUnknown, lpPropBag);
if (lpUnknown)
{
hRet = IUnknown_QueryInterface(lpUnknown, &IID_IPersistPropertyBag,
(void**)&lpPPBag);
if (SUCCEEDED(hRet) && lpPPBag)
{
hRet = IPersistPropertyBag_Load(lpPPBag, lpPropBag, NULL);
IPersistPropertyBag_Release(lpPPBag);
}
}
return hRet;
}
/*************************************************************************
* @ [SHLWAPI.188]
*
* Call IOleControlSite_TranslateAccelerator() on an object.
*
* PARAMS
* lpUnknown [I] Object supporting the IOleControlSite interface.
* lpMsg [I] Key message to be processed.
* dwModifiers [I] Flags containing the state of the modifier keys.
*
* RETURNS
* Success: S_OK.
* Failure: An HRESULT error code, or E_INVALIDARG if lpUnknown is NULL.
*/
HRESULT WINAPI IUnknown_TranslateAcceleratorOCS(IUnknown *lpUnknown, LPMSG lpMsg, DWORD dwModifiers)
{
IOleControlSite* lpCSite = NULL;
HRESULT hRet = E_INVALIDARG;
TRACE("(%p,%p,0x%08lx)\n", lpUnknown, lpMsg, dwModifiers);
if (lpUnknown)
{
hRet = IUnknown_QueryInterface(lpUnknown, &IID_IOleControlSite,
(void**)&lpCSite);
if (SUCCEEDED(hRet) && lpCSite)
{
hRet = IOleControlSite_TranslateAccelerator(lpCSite, lpMsg, dwModifiers);
IOleControlSite_Release(lpCSite);
}
}
return hRet;
}
/*************************************************************************
* @ [SHLWAPI.189]
*
* Call IOleControlSite_GetExtendedControl() on an object.
*
* PARAMS
* lpUnknown [I] Object supporting the IOleControlSite interface.
* lppDisp [O] Destination for resulting IDispatch.
*
* RETURNS
* Success: S_OK.
* Failure: An HRESULT error code, or E_FAIL if lpUnknown is NULL.
*/
DWORD WINAPI IUnknown_OnFocusOCS(IUnknown *lpUnknown, IDispatch** lppDisp)
{
IOleControlSite* lpCSite = NULL;
HRESULT hRet = E_FAIL;
TRACE("(%p,%p)\n", lpUnknown, lppDisp);
if (lpUnknown)
{
hRet = IUnknown_QueryInterface(lpUnknown, &IID_IOleControlSite,
(void**)&lpCSite);
if (SUCCEEDED(hRet) && lpCSite)
{
hRet = IOleControlSite_GetExtendedControl(lpCSite, lppDisp);
IOleControlSite_Release(lpCSite);
}
}
return hRet;
}
/*************************************************************************
* @ [SHLWAPI.190]
*/
HRESULT WINAPI IUnknown_HandleIRestrict(LPUNKNOWN lpUnknown, PVOID lpArg1,
PVOID lpArg2, PVOID lpArg3, PVOID lpArg4)
{
/* FIXME: {D12F26B2-D90A-11D0-830D-00AA005B4383} - What object does this represent? */
static const DWORD service_id[] = { 0xd12f26b2, 0x11d0d90a, 0xaa000d83, 0x83435b00 };
/* FIXME: {D12F26B1-D90A-11D0-830D-00AA005B4383} - Also Unknown/undocumented */
static const DWORD function_id[] = { 0xd12f26b1, 0x11d0d90a, 0xaa000d83, 0x83435b00 };
HRESULT hRet = E_INVALIDARG;
LPUNKNOWN lpUnkInner = NULL; /* FIXME: Real type is unknown */
TRACE("(%p,%p,%p,%p,%p)\n", lpUnknown, lpArg1, lpArg2, lpArg3, lpArg4);
if (lpUnknown && lpArg4)
{
hRet = IUnknown_QueryService(lpUnknown, (REFGUID)service_id,
(REFGUID)function_id, (void**)&lpUnkInner);
if (SUCCEEDED(hRet) && lpUnkInner)
{
/* FIXME: The type of service object requested is unknown, however
* testing shows that its first method is called with 4 parameters.
* Fake this by using IParseDisplayName_ParseDisplayName since the
* signature and position in the vtable matches our unknown object type.
*/
hRet = IParseDisplayName_ParseDisplayName((LPPARSEDISPLAYNAME)lpUnkInner,
lpArg1, lpArg2, lpArg3, lpArg4);
IUnknown_Release(lpUnkInner);
}
}
return hRet;
}
/*************************************************************************
* @ [SHLWAPI.192]
*
* Get a sub-menu from a menu item.
*
* PARAMS
* hMenu [I] Menu to get sub-menu from
* uID [I] ID of menu item containing sub-menu
*
* RETURNS
* The sub-menu of the item, or a NULL handle if any parameters are invalid.
*/
HMENU WINAPI SHGetMenuFromID(HMENU hMenu, UINT uID)
{
MENUITEMINFOW mi;
TRACE("(%p,%u)\n", hMenu, uID);
mi.cbSize = sizeof(mi);
mi.fMask = MIIM_SUBMENU;
if (!GetMenuItemInfoW(hMenu, uID, FALSE, &mi))
return NULL;
return mi.hSubMenu;
}
/*************************************************************************
* @ [SHLWAPI.193]
*
* Get the color depth of the primary display.
*
* PARAMS
* None.
*
* RETURNS
* The color depth of the primary display.
*/
DWORD WINAPI SHGetCurColorRes()
{
HDC hdc;
DWORD ret;
TRACE("()\n");
hdc = GetDC(0);
ret = GetDeviceCaps(hdc, BITSPIXEL) * GetDeviceCaps(hdc, PLANES);
ReleaseDC(0, hdc);
return ret;
}
/*************************************************************************
* @ [SHLWAPI.194]
*
* Wait for a message to arrive, with a timeout.
*
* PARAMS
* hand [I] Handle to query
* dwTimeout [I] Timeout in ticks or INFINITE to never timeout
*
* RETURNS
* STATUS_TIMEOUT if no message is received before dwTimeout ticks passes.
* Otherwise returns the value from MsgWaitForMultipleObjectsEx when a
* message is available.
*/
DWORD WINAPI SHWaitForSendMessageThread(HANDLE hand, DWORD dwTimeout)
{
DWORD dwEndTicks = GetTickCount() + dwTimeout;
DWORD dwRet;
while ((dwRet = MsgWaitForMultipleObjectsEx(1, &hand, dwTimeout, QS_SENDMESSAGE, 0)) == 1)
{
MSG msg;
PeekMessageW(&msg, NULL, 0, 0, PM_NOREMOVE);
if (dwTimeout != INFINITE)
{
if ((int)(dwTimeout = dwEndTicks - GetTickCount()) <= 0)
return WAIT_TIMEOUT;
}
}
return dwRet;
}
/*************************************************************************
* @ [SHLWAPI.195]
*
* Determine if a shell folder can be expanded.
*
* PARAMS
* lpFolder [I] Parent folder containing the object to test.
* pidl [I] Id of the object to test.
*
* RETURNS
* Success: S_OK, if the object is expandable, S_FALSE otherwise.
* Failure: E_INVALIDARG, if any argument is invalid.
*
* NOTES
* If the object to be tested does not expose the IQueryInfo() interface it
* will not be identified as an expandable folder.
*/
HRESULT WINAPI SHIsExpandableFolder(LPSHELLFOLDER lpFolder, LPCITEMIDLIST pidl)
{
HRESULT hRet = E_INVALIDARG;
IQueryInfo *lpInfo;
if (lpFolder && pidl)
{
hRet = IShellFolder_GetUIObjectOf(lpFolder, NULL, 1, &pidl, &IID_IQueryInfo,
NULL, (void**)&lpInfo);
if (FAILED(hRet))
hRet = S_FALSE; /* Doesn't expose IQueryInfo */
else
{
DWORD dwFlags = 0;
/* MSDN states of IQueryInfo_GetInfoFlags() that "This method is not
* currently used". Really? You wouldn't be holding out on me would you?
*/
hRet = IQueryInfo_GetInfoFlags(lpInfo, &dwFlags);
if (SUCCEEDED(hRet))
{
/* 0x2 is an undocumented flag apparently indicating expandability */
hRet = dwFlags & 0x2 ? S_OK : S_FALSE;
}
IQueryInfo_Release(lpInfo);
}
}
return hRet;
}
/*************************************************************************
* @ [SHLWAPI.197]
*
* Blank out a region of text by drawing the background only.
*
* PARAMS
* hDC [I] Device context to draw in
* pRect [I] Area to draw in
* cRef [I] Color to draw in
*
* RETURNS
* Nothing.
*/
DWORD WINAPI SHFillRectClr(HDC hDC, LPCRECT pRect, COLORREF cRef)
{
COLORREF cOldColor = SetBkColor(hDC, cRef);
ExtTextOutA(hDC, 0, 0, ETO_OPAQUE, pRect, 0, 0, 0);
SetBkColor(hDC, cOldColor);
return 0;
}
/*************************************************************************
* @ [SHLWAPI.198]
*
* Return the value asociated with a key in a map.
*
* PARAMS
* lpKeys [I] A list of keys of length iLen
* lpValues [I] A list of values associated with lpKeys, of length iLen
* iLen [I] Length of both lpKeys and lpValues
* iKey [I] The key value to look up in lpKeys
*
* RETURNS
* The value in lpValues associated with iKey, or -1 if iKey is not
* found in lpKeys.
*
* NOTES
* - If two elements in the map share the same key, this function returns
* the value closest to the start of the map
* - The native version of this function crashes if lpKeys or lpValues is NULL.
*/
int WINAPI SHSearchMapInt(const int *lpKeys, const int *lpValues, int iLen, int iKey)
{
if (lpKeys && lpValues)
{
int i = 0;
while (i < iLen)
{
if (lpKeys[i] == iKey)
return lpValues[i]; /* Found */
i++;
}
}
return -1; /* Not found */
}
/*************************************************************************
* @ [SHLWAPI.199]
*
* Copy an interface pointer
*
* PARAMS
* lppDest [O] Destination for copy
* lpUnknown [I] Source for copy
*
* RETURNS
* Nothing.
*/
VOID WINAPI IUnknown_Set(IUnknown **lppDest, IUnknown *lpUnknown)
{
TRACE("(%p,%p)\n", lppDest, lpUnknown);
if (lppDest)
IUnknown_AtomicRelease(lppDest); /* Release existing interface */
if (lpUnknown)
{
/* Copy */
IUnknown_AddRef(lpUnknown);
*lppDest = lpUnknown;
}
}
/*************************************************************************
* @ [SHLWAPI.200]
*
*/
HRESULT WINAPI MayQSForward(IUnknown* lpUnknown, PVOID lpReserved,
REFGUID riidCmdGrp, ULONG cCmds,
OLECMD *prgCmds, OLECMDTEXT* pCmdText)
{
FIXME("(%p,%p,%p,%ld,%p,%p) - stub\n",
lpUnknown, lpReserved, riidCmdGrp, cCmds, prgCmds, pCmdText);
/* FIXME: Calls IsQSForward & IUnknown_QueryStatus */
return DRAGDROP_E_NOTREGISTERED;
}
/*************************************************************************
* @ [SHLWAPI.201]
*
*/
HRESULT WINAPI MayExecForward(IUnknown* lpUnknown, INT iUnk, REFGUID pguidCmdGroup,
D
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -