亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? shellpidl.cpp

?? CAN__組建現(xiàn)場總線系統(tǒng)設(shè)計(jì)技術(shù)(光盤)
?? CPP
字號:

#include "stdafx.h"
#include "..\\resource.h"
#include "shellpidl.h"
#include "wm.h"


#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

#pragma warning ( disable : 4711 )
////////////////////////////////////////////////////////////////////////////////
//
// This source is part of CShellTree - Selom Ofori
//

//
// FUNCTIONS THAT DEAL WITH PIDLs
//
/****************************************************************************
 *
 *    FUNCTION: Next(LPCITEMIDLIST pidl)
 *
 *    PURPOSE:  Gets the next PIDL in the list
 *
 ****************************************************************************/
LPITEMIDLIST CShellPidl::
Next (LPCITEMIDLIST pidl)
{
  LPTSTR lpMem = (LPTSTR) pidl;

  lpMem += pidl->mkid.cb;

  return (LPITEMIDLIST) lpMem;
}

/****************************************************************************
 *
 *    FUNCTION: GetSize(LPCITEMIDLIST pidl)
 *
 *    PURPOSE:  Gets the size of the PIDL
 *
 ****************************************************************************/
UINT CShellPidl::
GetSize (LPCITEMIDLIST pidl)
{
  UINT cbTotal = 0;
  if (pidl)
    {
      cbTotal += sizeof (pidl->mkid.cb);    // Null terminator

      while (pidl->mkid.cb)
        {
          cbTotal += pidl->mkid.cb;
          pidl = Next (pidl);
        }
    }

  return cbTotal;
}

/****************************************************************************
 *
 *    FUNCTION: CreatePidl(UINT cbSize)
 *
 *    PURPOSE:  Allocates a PIDL
 *
 ****************************************************************************/
LPITEMIDLIST CShellPidl::
CreatePidl (UINT cbSize)
{
  LPMALLOC lpMalloc;
  HRESULT hr;
  LPITEMIDLIST pidl = NULL;

  hr = SHGetMalloc (&lpMalloc);

  if (FAILED (hr))
    return 0;

  pidl = (LPITEMIDLIST) lpMalloc->Alloc (cbSize);

  if (pidl)
    memset (pidl, 0, cbSize);   // zero-init for external task   alloc

  if (lpMalloc)
    lpMalloc->Release ();

  return pidl;
}

/****************************************************************************
 *
 *    FUNCTION: ConcatPidls(LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2)
 *
 *    PURPOSE:  Concatenates two PIDLs
 *
 ****************************************************************************/
LPITEMIDLIST CShellPidl::
ConcatPidls (LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2)
{
  LPITEMIDLIST pidlNew;
  UINT cb1;
  UINT cb2;

  if (pidl1)                    //May be NULL

    cb1 = GetSize (pidl1) - sizeof (pidl1->mkid.cb);
  else
    cb1 = 0;

  cb2 = GetSize (pidl2);

  pidlNew = CreatePidl (cb1 + cb2);
  if (pidlNew)
    {
      if (pidl1)
        memcpy (pidlNew, pidl1, cb1);
      memcpy (((LPTSTR) pidlNew) + cb1, pidl2, cb2);
    }
  return pidlNew;
}

/****************************************************************************
 *
 *    FUNCTION: CopyITEMID(LPMALLOC lpMalloc, LPITEMIDLIST lpi)
 *
 *    PURPOSE:  Copies the ITEMID
 *
 ****************************************************************************/
LPITEMIDLIST CShellPidl::
CopyITEMID (LPMALLOC lpMalloc, LPITEMIDLIST lpi)
{
  LPITEMIDLIST lpiTemp;

  lpiTemp = (LPITEMIDLIST) lpMalloc->Alloc (lpi->mkid.cb + sizeof (lpi->mkid.cb));
  CopyMemory ((PVOID) lpiTemp, (CONST VOID *) lpi, lpi->mkid.cb + sizeof (lpi->mkid.cb));

  return lpiTemp;
}

/****************************************************************************
 *
 *    FUNCTION: GetName(LPSHELLFOLDER lpsf,LPITEMIDLIST  lpi,DWORD dwFlags,
 *             LPTSTR         lpFriendlyName)
 *
 *    PURPOSE:  Gets the friendly name for the folder
 *
 ****************************************************************************/
BOOL CShellPidl::
GetName (LPSHELLFOLDER lpsf,
         LPITEMIDLIST lpi,
         DWORD dwFlags,
         LPTSTR lpFriendlyName)
{
  BOOL bSuccess = TRUE;
  STRRET str;

  if (NOERROR == lpsf->GetDisplayNameOf (lpi, dwFlags, &str))
    {
      switch (str.uType)
        {
        case STRRET_WSTR:

#ifdef _UNICODE
          _tcscpy (lpFriendlyName, (LPTSTR) str.cStr);
#else // _UNICODE
          WideCharToMultiByte (CP_ACP,  // CodePage
                               0,  // dwFlags
                               str.pOleStr,    // lpWideCharStr
                               -1,     // cchWideChar
                               lpFriendlyName,     // lpMultiByteStr
                               MAX_PATH,
                               //sizeof(lpFriendlyName), // cchMultiByte, wrong. sizeof on a pointer, psk, psk
                               NULL,    // lpDefaultChar,
                               NULL);  // lpUsedDefaultChar
#endif // _UNICODE

          break;

        case STRRET_OFFSET:

          _tcscpy (lpFriendlyName, (LPTSTR) lpi + str.uOffset);
          break;

        case STRRET_CSTR:

          _tcscpy (lpFriendlyName, (LPTSTR) str.cStr);
          break;

        default:
          bSuccess = FALSE;
          break;
        }
    }
  else
    bSuccess = FALSE;

  return bSuccess;
}

/****************************************************************************
 *
 *    FUNCTION: GetFullyQualPidl(LPSHELLFOLDER lpsf, LPITEMIDLIST lpi)
 *
 *    PURPOSE:  Gets the Fully qualified Pidls for the folder
 *
 ****************************************************************************/
LPITEMIDLIST CShellPidl::
GetFullyQualPidl (LPSHELLFOLDER lpsf, LPITEMIDLIST lpi)
{
  TCHAR szBuff[MAX_PATH];
  OLECHAR szOleChar[MAX_PATH];
  LPSHELLFOLDER lpsfDeskTop;
  LPITEMIDLIST lpifq;
  ULONG ulEaten, ulAttribs;
  HRESULT hr;

  if (!GetName (lpsf, lpi, SHGDN_FORPARSING, szBuff))
    return NULL;

  hr = SHGetDesktopFolder (&lpsfDeskTop);

  if (FAILED (hr))
    return NULL;

#ifdef _UNICODE
          _tcscpy (szOleChar, szBuff);
#else // _UNICODE
  MultiByteToWideChar (CP_ACP,
                       MB_PRECOMPOSED,
                       szBuff,
                       -1,
                       (USHORT *) szOleChar,
                       sizeof (szOleChar));
#endif // _UNICODE

  hr = lpsfDeskTop->ParseDisplayName (NULL,
                                      NULL,
                                      szOleChar,
                                      &ulEaten,
                                      &lpifq,
                                      &ulAttribs);

  lpsfDeskTop->Release ();

  if (FAILED (hr))
    return NULL;

  return lpifq;
}

/****************************************************************************
 *
 *  FUNCTION: DoTheMenuThing(HWND hwnd,
 *                           LPSHELLFOLDER lpsfParent,
 *                           LPITEMIDLIST  lpi,
 *                           LPPOINT lppt)
 *
 *  PURPOSE: Displays a popup context menu, given a parent shell folder,
 *           relative item id and screen location.
 *
 *  PARAMETERS:
 *    hwnd       - Parent window handle
 *    lpsfParent - Pointer to parent shell folder.
 *    lpi        - Pointer to item id that is relative to lpsfParent
 *    lppt       - Screen location of where to popup the menu.
 *
 *  RETURN VALUE:
 *    Returns TRUE on success, FALSE on failure
 *
 ****************************************************************************/
BOOL CShellPidl::DoTheMenuThing (HWND hwnd, LPSHELLFOLDER lpsfParent,
                LPITEMIDLIST lpi, LPPOINT lppt)
{
	LPCONTEXTMENU lpcm;
	HRESULT hr;
	TCHAR szTemp[64];
	CMINVOKECOMMANDINFO cmi;
	DWORD dwAttribs = 0;
	int idCmd;
	HMENU hMenu;
	BOOL bSuccess = TRUE;

	hr = lpsfParent->GetUIObjectOf (hwnd,
                                  1,    //Number of objects to get attributes of
                                  (const struct _ITEMIDLIST **) &lpi,
                                        IID_IContextMenu,
                                        0,
                                        (LPVOID *) & lpcm);
	if (SUCCEEDED (hr)){
		hMenu = CreatePopupMenu ();

		if (hMenu){
			hr = lpcm->QueryContextMenu (hMenu, 0, 1, 0x7fff, CMF_EXPLORE);
			if (SUCCEEDED (hr)){
				ULONG ulAttrs = SFGAO_HASSUBFOLDER|SFGAO_FOLDER;
				// Determine what type of object we have.
				lpsfParent->GetAttributesOf(1,(const struct _ITEMIDLIST **)&lpi,&ulAttrs);
				if (!(ulAttrs & SFGAO_FOLDER )){
					MENUITEMINFO minfo;
					minfo.cbSize = sizeof (minfo);
					minfo.fMask = MIIM_TYPE;
					minfo.fType = MFT_SEPARATOR;
					::InsertMenuItem (hMenu, 0, MF_BYPOSITION, &minfo);
					minfo.fMask = MIIM_TYPE|MIIM_ID;
					minfo.wID = ID_OPEN_HERE;
					minfo.fType = MFT_STRING;
					minfo.dwTypeData = _T ("&Open here");
					minfo.cch = 17;
					::InsertMenuItem (hMenu, 0, MF_BYPOSITION, &minfo);
				}
				idCmd = TrackPopupMenu (hMenu,
                                      TPM_LEFTALIGN | TPM_RETURNCMD | TPM_RIGHTBUTTON,
                                      lppt->x, lppt->y, 0, hwnd, NULL);
				if (idCmd == ID_OPEN_HERE){
					TCHAR szPath[_MAX_PATH];
					if (GetName (lpsfParent, lpi, SHGDN_NORMAL|SHGDN_FORPARSING, szPath))
					AfxGetMainWnd ()->SendMessage (WM_OPEN_HERE, 0, (LPARAM) szPath);
				}
				else if (idCmd){
					USES_CONVERSION;
					cmi.cbSize = sizeof (CMINVOKECOMMANDINFO);
					cmi.fMask = 0;
					cmi.hwnd = hwnd;
					cmi.lpVerb = T2A (MAKEINTRESOURCE (idCmd - 1));
					cmi.lpParameters = NULL;
					cmi.lpDirectory = NULL;
					cmi.nShow = SW_SHOWNORMAL;
					cmi.dwHotKey = 0;
					cmi.hIcon = NULL;
					hr = lpcm->InvokeCommand (&cmi);
					if (!SUCCEEDED (hr)){
						_stprintf (szTemp, _T ("InvokeCommand failed. hr=%lx"), hr);
						AfxMessageBox (szTemp);
					}
				}
			}
			else{
				bSuccess = FALSE;
			}

			DestroyMenu (hMenu);
		}
		else{
			bSuccess = FALSE;
		}
		lpcm->Release ();
	}
	else{
		_stprintf (szTemp, _T ("GetUIObjectOf failed! hr=%lx"), hr);
		AfxMessageBox (szTemp);
		bSuccess = FALSE;
	}
	return bSuccess;
}

/****************************************************************************
 *
 *    FUNCTION: GetIcon(LPITEMIDLIST lpi, UINT uFlags)
 *
 *    PURPOSE:  Gets the index for the current icon.  Index is index into system
 *              image list.
 *
 *  PARAMETERS:
 *    lpi    - Fully qualified item id list for current item.
 *    uFlags - Flags for SHGetFileInfo()
 *
 *  RETURN VALUE:
 *    Icon index for current item.
 ****************************************************************************/
int CShellPidl::GetItemIcon (LPITEMIDLIST lpi, UINT uFlags)
{
  SHFILEINFO sfi;

  SHGetFileInfo ((LPCTSTR) lpi,
                 0,
                 &sfi,
                 sizeof (SHFILEINFO),
                 uFlags);

  return sfi.iIcon;
}

////////////////////////////////////////////////////////////////////////////////
#pragma warning ( default : 4711 )

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品久久久久久一区二区三区| 不卡影院免费观看| 日本一区二区三区四区| 久久这里都是精品| 久久一夜天堂av一区二区三区| 欧美性xxxxx极品少妇| 91视频.com| 色狠狠桃花综合| 91精品91久久久中77777| 波多野结衣精品在线| 色综合久久久久网| 色综合久久综合网| 欧美日韩不卡一区| 欧美日韩www| 中文字幕高清不卡| 亚洲精品写真福利| 国产一区啦啦啦在线观看| 国产精品一二三| 99久久久久久| 精品国产一区二区三区四区四| 2023国产精品视频| 亚洲电影一区二区| 免费在线观看精品| 成人黄色在线看| 91精品久久久久久蜜臀| 国产精品久久毛片| 午夜精品在线视频一区| 成人久久18免费网站麻豆| 欧美综合色免费| 国产精品久线在线观看| 国产主播一区二区| 日韩精品一区二区三区在线| 国产精品国产自产拍高清av| 久久精品国产澳门| 91成人国产精品| 国产精品久久久久久久蜜臀| 另类小说视频一区二区| 欧美日韩国产在线播放网站| 一区二区三区免费在线观看| 成人av网址在线| 国产精品视频一区二区三区不卡| 国产一区二区导航在线播放| 日韩免费观看2025年上映的电影| 美女国产一区二区| 国产日韩欧美综合在线| 懂色av中文一区二区三区| 亚洲欧洲日韩av| 精品视频资源站| 久久99久国产精品黄毛片色诱| 国产欧美精品一区aⅴ影院| 91麻豆免费视频| 奇米综合一区二区三区精品视频| 精品久久久三级丝袜| jlzzjlzz亚洲女人18| 水蜜桃久久夜色精品一区的特点| 26uuu色噜噜精品一区| 99精品国产热久久91蜜凸| 亚洲一二三区视频在线观看| 国产欧美日韩另类一区| 欧美撒尿777hd撒尿| 91电影在线观看| 国产麻豆精品在线| 亚洲成人av一区| 亚洲精品久久久蜜桃| 久久日韩粉嫩一区二区三区| 欧美群妇大交群的观看方式| 国产成人8x视频一区二区| 午夜精品aaa| 亚洲一区在线观看视频| 国产精品网站在线观看| 欧美sm极限捆绑bd| 日韩欧美在线一区二区三区| 色婷婷狠狠综合| av在线一区二区| 欧美一区二区三区四区高清 | 激情小说欧美图片| 亚洲va天堂va国产va久| 亚洲伊人伊色伊影伊综合网| 国产精品久久久久久久久果冻传媒| xf在线a精品一区二区视频网站| 91精品国产手机| 日韩欧美中文字幕制服| 欧美一区欧美二区| 26uuu成人网一区二区三区| 欧美一区二区三区四区久久 | 麻豆精品视频在线观看免费 | 这里只有精品视频在线观看| 欧美日韩aaaaaa| 日韩欧美视频一区| 国产精品国产a| 一区二区三区鲁丝不卡| 午夜视频一区二区三区| 成人午夜av电影| 色欧美片视频在线观看在线视频| 欧美体内she精高潮| 亚洲人精品一区| 免费久久99精品国产| 国产黄色精品视频| 在线观看91视频| 精品久久久影院| 一区二区三区.www| 国产在线精品视频| 欧美日产在线观看| 久久久99久久精品欧美| 亚洲欧美电影一区二区| 奇米色一区二区三区四区| 懂色av一区二区夜夜嗨| 日韩欧美中文一区| 亚洲尤物视频在线| av成人老司机| 日韩免费一区二区| 亚洲第一成年网| 欧美亚洲日本一区| 国产精品理论在线观看| 国产在线精品免费| www激情久久| 国产乱子伦一区二区三区国色天香| 欧美少妇bbb| 国产精品久久三区| 成人午夜免费电影| 中文一区二区完整视频在线观看| 麻豆视频观看网址久久| 欧美日韩成人在线| 亚洲精品综合在线| 欧美午夜精品免费| 亚洲香蕉伊在人在线观| 欧美亚日韩国产aⅴ精品中极品| 亚洲免费在线播放| 一本大道久久精品懂色aⅴ| 日韩一区欧美一区| 91福利区一区二区三区| 午夜精品福利一区二区蜜股av| 欧美日韩视频一区二区| 婷婷丁香激情综合| 久久看人人爽人人| 成人精品高清在线| 亚洲视频图片小说| 日韩一卡二卡三卡国产欧美| 国产精品一色哟哟哟| 国产精品福利影院| 欧美一区二区在线视频| 国产呦精品一区二区三区网站 | 精品一区免费av| 亚洲永久免费视频| 日韩欧美成人午夜| 91香蕉国产在线观看软件| 日韩精彩视频在线观看| 国产精品的网站| 欧美一区二区三区的| 色视频成人在线观看免| 激情偷乱视频一区二区三区| 一区二区三区精品视频| 国产午夜亚洲精品羞羞网站| 91久久精品一区二区三| 国产精品资源在线| 亚洲图片欧美色图| 亚洲男帅同性gay1069| 久久综合久久久久88| 欧美放荡的少妇| 91国偷自产一区二区三区成为亚洲经典| 99久久精品国产导航| 国产成人久久精品77777最新版本| 亚洲成va人在线观看| 亚洲激情图片小说视频| 欧美国产国产综合| 精品国产成人系列| 日韩欧美国产一区二区三区| 欧美日韩在线亚洲一区蜜芽| 色爱区综合激月婷婷| 91蜜桃免费观看视频| 色综合色综合色综合| 99久久精品免费| 日本精品一区二区三区高清| 色悠悠久久综合| 色狠狠一区二区| 欧美日韩久久不卡| 91精品国产欧美日韩| 日韩午夜av电影| 久久久久久久久久久久电影 | 国产一区二区三区综合| 紧缚捆绑精品一区二区| 国产精品一区免费在线观看| 成人听书哪个软件好| 91一区二区三区在线播放| 欧美日韩精品系列| 精品日韩欧美在线| 综合激情网...| 日韩国产精品久久久久久亚洲| 久久99蜜桃精品| 色婷婷久久一区二区三区麻豆| 欧洲一区二区三区在线| 久久人人爽爽爽人久久久| 亚洲三级电影网站| 激情综合网av| 国产亚洲欧美色| 亚洲自拍偷拍综合| 成人综合婷婷国产精品久久蜜臀| 欧美日韩一区国产| 国产精品毛片高清在线完整版| 五月天网站亚洲|