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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? umshelltree.cpp

?? 中央氣象臺與日本臺風數據之間的格式轉換程序
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
{
	// TODO: Add your control notification handler code here
	POINT			pt;
	LPTVITEMDATA	lptvid;  //Long pointer to TreeView item data
	LPSHELLFOLDER	lpsf2=NULL;
	static char		szBuff[MAX_PATH];
	TV_HITTESTINFO	tvhti;
	TV_ITEM			tvi;

	// TODO: Add your control notification handler code here
	::GetCursorPos((LPPOINT)&pt);
	ScreenToClient(&pt);
	tvhti.pt=pt;
    HitTest(&tvhti);
    SelectItem(tvhti.hItem);
	if (tvhti.flags & (TVHT_ONITEMLABEL|TVHT_ONITEMICON))
	{
		ClientToScreen(&pt);
		tvi.mask=TVIF_PARAM;
		tvi.hItem=tvhti.hItem;
		
        if (!GetItem(&tvi)){
			return;
		}
		
		lptvid=(LPTVITEMDATA)tvi.lParam;
		
		DoTheMenuThing(::GetParent(m_hWnd),
		lptvid->lpsfParent, lptvid->lpi, &pt);
	}	
	
	*pResult = 0;
}

/****************************************************************************
*
*	FUNCTION:	OnFolderSelected(NMHDR* pNMHDR, LRESULT* pResult, CString &szFolderPath) 
*
*	PURPOSE:	Call this function if for example you want to put the path of the folder
*				selected inside a combobox or an edit window. You would pass the
*				parameters from OnSelChanged() to this function along with a CString object
*				that will hold the folder path. If the path is not
*				in the filesystem(eg MyComputer) it returns false.
*
*	MESSAGEMAP:	TVN_SELCHANGED
*
****************************************************************************/
BOOL CUmShellTree::OnFolderSelected(NMHDR* pNMHDR, LRESULT* pResult, CString &szFolderPath) 
{
	// TODO: Add your control notification handler code here
	LPTVITEMDATA	lptvid;  //Long pointer to TreeView item data
	LPSHELLFOLDER	lpsf2=NULL;
	static char		szBuff[MAX_PATH];
	HRESULT			hr;
	BOOL			bRet=false;
	TV_SORTCB		tvscb;
	HTREEITEM		hItem=NULL;

	if((hItem = GetSelectedItem()))
	{
		lptvid=(LPTVITEMDATA)GetItemData(hItem);

		if (lptvid && lptvid->lpsfParent && lptvid->lpi)
		{
			hr=lptvid->lpsfParent->BindToObject(lptvid->lpi,
					 0,IID_IShellFolder,(LPVOID *)&lpsf2);

			if (SUCCEEDED(hr))
				{
					ULONG ulAttrs = SFGAO_FILESYSTEM;

					// Determine what type of object we have.
					lptvid->lpsfParent->GetAttributesOf(1, (const struct _ITEMIDLIST **)&lptvid->lpi, &ulAttrs);

					if (ulAttrs & (SFGAO_FILESYSTEM))
					{
						if(SHGetPathFromIDList(lptvid->lpifq,szBuff)){
							szFolderPath = szBuff;
							bRet = true;
						}
					}
					//non standard from here(NEW CODE)
					NM_TREEVIEW* pnmtv = (NM_TREEVIEW*)pNMHDR;
					if ((pnmtv->itemNew.cChildren == 1) && !(pnmtv->itemNew.state & TVIS_EXPANDEDONCE)){
						FillTreeView(lpsf2,lptvid->lpifq,pnmtv->itemNew.hItem);

						tvscb.hParent     = pnmtv->itemNew.hItem;
						tvscb.lParam      = 0;
						tvscb.lpfnCompare = TreeViewCompareProc;
						SortChildrenCB(&tvscb);
						
						pnmtv->itemNew.state |= TVIS_EXPANDEDONCE;
						pnmtv->itemNew.stateMask |= TVIS_EXPANDEDONCE;
						pnmtv->itemNew.mask |= TVIF_STATE;
						SetItem(&pnmtv->itemNew);
					}
				}

		}
		if(lpsf2)
			lpsf2->Release();
		
	}	
	*pResult = 0;
	return bRet;
}

/****************************************************************************
*
*	FUNCTION:	OnDeleteShellItem(NMHDR* pNMHDR, LRESULT* pResult)
*
*	PURPOSE:	Releases the memory allocated by the shell folders
*
*	MESSAGEMAP:	TVN_DELETEITEM
*
*	MISC:		failure to call this function will result in a memory leak
*
****************************************************************************/
void CUmShellTree::OnDeleteShellItem(NMHDR* pNMHDR, LRESULT* pResult)
{
	LPTVITEMDATA lptvid=NULL;
	HRESULT hr;
	LPMALLOC lpMalloc;

	NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;

	//Let's free the memory for the TreeView item data...
	hr=SHGetMalloc(&lpMalloc);
	if (FAILED(hr))
		return;
		
	lptvid=(LPTVITEMDATA)pNMTreeView->itemOld.lParam;
	lptvid->lpsfParent->Release();
	lpMalloc->Free(lptvid->lpi);  
	lpMalloc->Free(lptvid->lpifq);  
	lpMalloc->Free(lptvid);  
	lpMalloc->Release();
}

/****************************************************************************
*
*	FUNCTION:	EnableImages()
*
*	PURPOSE:	Obtains a handle to the system image list and attaches it
*				to the tree control. DO NOT DELETE the imagelist
*
*	MESSAGEMAP:	NONE
*
****************************************************************************/
void CUmShellTree::EnableImages()
{
	// Get the handle to the system image list, for our icons
    HIMAGELIST  hImageList;
    SHFILEINFO    sfi;

    hImageList = (HIMAGELIST)SHGetFileInfo((LPCSTR)"C:\\", 
                                           0,
                                           &sfi, 
                                           sizeof(SHFILEINFO), 
                                           SHGFI_SYSICONINDEX | SHGFI_SMALLICON);

    // Attach ImageList to TreeView
    if (hImageList)
        ::SendMessage(m_hWnd, TVM_SETIMAGELIST, (WPARAM) TVSIL_NORMAL,
            (LPARAM)hImageList);
}

/****************************************************************************
*
*	FUNCTION:	GetSelectedFolderPath(CString &szFolderPath)
*
*	PURPOSE:	Retrieves the path of the currently selected string.
*				Pass a CString object that will hold the folder path. 
*				If the path is not in the filesystem(eg MyComputer) 
*				or none is selected it returns false.
*
*	MESSAGEMAP:	NONE
*
****************************************************************************/
BOOL CUmShellTree::GetSelectedFolderPath(CString &szFolderPath)
{
	LPTVITEMDATA	lptvid;  //Long pointer to TreeView item data
	LPSHELLFOLDER	lpsf2=NULL;
	static char		szBuff[MAX_PATH];
	HTREEITEM		hItem=NULL;
	HRESULT			hr;
	BOOL			bRet=false;

	if((hItem = GetSelectedItem()))
	{
		lptvid=(LPTVITEMDATA)GetItemData(hItem);

		if (lptvid && lptvid->lpsfParent && lptvid->lpi)
		{
			hr=lptvid->lpsfParent->BindToObject(lptvid->lpi,
					 0,IID_IShellFolder,(LPVOID *)&lpsf2);

			if (SUCCEEDED(hr))
				{
					ULONG ulAttrs = SFGAO_FILESYSTEM;

					// Determine what type of object we have.
					lptvid->lpsfParent->GetAttributesOf(1, (const struct _ITEMIDLIST **)&lptvid->lpi, &ulAttrs);

					if (ulAttrs & (SFGAO_FILESYSTEM))
					{
						if(SHGetPathFromIDList(lptvid->lpifq,szBuff)){
							szFolderPath = szBuff;
							bRet = true;
						}
					}
				}

		}
		if(lpsf2)
			lpsf2->Release();
	}
	return bRet;
}

/****************************************************************************
*
*	FUNCTION:	GetParentShellFolder(HTREEITEM folderNode)
*
*	PURPOSE:	Retrieves the pointer to the ISHELLFOLDER interface
*				of the tree node passed as the paramter.
*
*	MESSAGEMAP:	NONE
*
****************************************************************************/
LPSHELLFOLDER CUmShellTree::GetParentShellFolder(HTREEITEM folderNode)
{
	LPTVITEMDATA	lptvid;  //Long pointer to TreeView item data

	lptvid=(LPTVITEMDATA)GetItemData(folderNode);
	if(lptvid)
		return lptvid->lpsfParent;
	else
		return NULL;
}

/****************************************************************************
*
*	FUNCTION:	GetRelativeIDLIST(HTREEITEM folderNode)
*
*	PURPOSE:	Retrieves the Pointer to an ITEMIDLIST structure that
*				identifies the subfolder relative to its parent folder.
*				see GetParentShellFolder();
*
*	MESSAGEMAP:	NONE
*
****************************************************************************/
LPITEMIDLIST CUmShellTree::GetRelativeIDLIST(HTREEITEM folderNode)
{
	LPTVITEMDATA	lptvid;  //Long pointer to TreeView item data

	lptvid=(LPTVITEMDATA)GetItemData(folderNode);
	if(lptvid)
		return lptvid->lpifq;
	else
		return NULL;
}

/****************************************************************************
*
*	FUNCTION:	GetFullyQualifiedIDLIST(HTREEITEM folderNode)
*
*	PURPOSE:	Retrieves the Retrieves the Pointer to an ITEMIDLIST
*				structure that identifies the subfolder relative to the
*				desktop. This is a fully qualified Item Identifier
*
*	MESSAGEMAP:	NONE
*
****************************************************************************/
LPITEMIDLIST CUmShellTree::GetFullyQualifiedID(HTREEITEM folderNode)
{
	LPTVITEMDATA	lptvid;  //Long pointer to TreeView item data

	lptvid=(LPTVITEMDATA)GetItemData(folderNode);
	if(lptvid)
		return lptvid->lpifq;
	else
		return NULL;
}

/****************************************************************************
*
*	FUNCTION:	SearchTree(	HTREEITEM treeNode,
*							CString szSearchName )
*
*	PURPOSE:	Too crude to explain, just use it
*
*	WARNING:	Only works if you use the default PopulateTree()
*				Not guaranteed to work on any future or existing
*				version of windows. Use with caution. Pretty much
*				ok if you're using on local drives
*
****************************************************************************/
bool CUmShellTree::SearchTree(HTREEITEM treeNode,
							CString szSearchName,
							FindAttribs attr)
{
	LPTVITEMDATA	lptvid;  //Long pointer to TreeView item data
	LPSHELLFOLDER	lpsf2=NULL;
	char	drive[_MAX_DRIVE];
	char	dir[_MAX_DIR];
	char	fname[_MAX_FNAME];
	char	ext[_MAX_EXT];
	bool	bRet=false;
	HRESULT	hr;
	CString	szCompare;

	szSearchName.MakeUpper();
	while(treeNode && bRet==false)
	{
		lptvid=(LPTVITEMDATA)GetItemData(treeNode);
		if (lptvid && lptvid->lpsfParent && lptvid->lpi)
		{
			hr=lptvid->lpsfParent->BindToObject(lptvid->lpi,
					 0,IID_IShellFolder,(LPVOID *)&lpsf2);
			if (SUCCEEDED(hr))
			{
				ULONG ulAttrs = SFGAO_FILESYSTEM;
				lptvid->lpsfParent->GetAttributesOf(1, (const struct _ITEMIDLIST **)&lptvid->lpi, &ulAttrs);
				if (ulAttrs & (SFGAO_FILESYSTEM))
				{
					if(SHGetPathFromIDList(lptvid->lpifq,szCompare.GetBuffer(MAX_PATH)))
					{
						switch(attr)
						{
						case type_drive:
							_splitpath(szCompare,drive,dir,fname,ext);
							szCompare=drive;
							break;
						case type_folder:
							szCompare = GetItemText(treeNode);
							break;
						}
						szCompare.MakeUpper();
						if(szCompare == szSearchName)
						{
							EnsureVisible(treeNode);
							SelectItem(treeNode);
							bRet=true;
						}
					}
				}
				lpsf2->Release();
			}
		}
		treeNode = GetNextSiblingItem(treeNode);
	}
	return bRet;
}

/****************************************************************************
*
*	FUNCTION:	TunnelTree(CString szFindPath)
*
*	PURPOSE:	Too crude to explain, just use it
*
*	WARNING:	Only works if you use the default PopulateTree()
*				Not guaranteed to work on any future or existing
*				version of windows. Use with caution. Pretty much
*				ok if you're using on local drives
*
****************************************************************************/
void CUmShellTree::TunnelTree(CString szFindPath)
{
	HTREEITEM subNode = GetRootItem();
	HTREEITEM subNode2;
	CString szPathHop;
	char drive[_MAX_DRIVE];
	char dir[_MAX_DIR];
	char fname[_MAX_FNAME];
	char ext[_MAX_EXT];
	char delimiter[]="\\";

	CUmFileName checkPath(szFindPath);
	if(!checkPath.Exist())
	{
		MessageBox(szFindPath,"Folder not found",MB_ICONERROR);
		return;
	}
		
	if(szFindPath.ReverseFind('\\') != szFindPath.GetLength()-1)
	{
		szFindPath += "\\";
	}

	_splitpath(szFindPath,drive,dir,fname,ext);

	//search the drive first
	szPathHop=drive;
	//subNode=GetChildItem(subNode);
	while(subNode)
	{
		subNode2=GetChildItem(subNode);
		if(SearchTree(subNode2,szPathHop, CUmShellTree::type_drive))
		{
			//break down subfolders and search
			char *p=strtok(dir,delimiter);
			while(p)
			{
				subNode2 = GetSelectedItem();
				subNode2 = GetChildItem(subNode2);
				if(SearchTree(subNode2,p,CUmShellTree::type_folder))
					p=strtok(NULL,delimiter);
				else
					p=NULL;
			}
		}
		subNode = GetNextSiblingItem(subNode);
	}
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
99久久免费视频.com| 久久久噜噜噜久久中文字幕色伊伊 | 国产午夜精品在线观看| 日韩欧美国产精品一区| 欧美一区二区视频在线观看2020| 欧美日韩在线一区二区| 欧美日韩精品一二三区| 欧美一级xxx| 精品日韩欧美一区二区| 久久综合九色综合欧美98| 精品国产三级电影在线观看| 国产亚洲一二三区| 国产精品热久久久久夜色精品三区| 国产情人综合久久777777| 中文字幕精品综合| 亚洲欧美电影一区二区| 亚洲午夜免费视频| 奇米影视一区二区三区小说| 久久精品国产在热久久| 国产乱理伦片在线观看夜一区| 国产一区二区三区视频在线播放 | 欧美一区二区观看视频| 欧美大胆人体bbbb| 2021久久国产精品不只是精品| 久久久91精品国产一区二区精品| 欧美国产精品一区二区| 亚洲另类色综合网站| 天天影视涩香欲综合网| 国产综合成人久久大片91| www.一区二区| 欧美区一区二区三区| 欧美成人欧美edvon| 国产精品免费久久久久| 亚洲一二三专区| 极品少妇xxxx精品少妇| 99久久国产综合色|国产精品| 欧美乱妇23p| 日本一区二区免费在线| 亚洲综合男人的天堂| 久久成人羞羞网站| 91污在线观看| 日韩欧美中文一区二区| 国产精品三级电影| 日日摸夜夜添夜夜添精品视频| 国产福利一区二区三区视频在线| 色噜噜狠狠成人中文综合| 日韩精品在线一区| 中文字幕人成不卡一区| 美女爽到高潮91| 91女人视频在线观看| 欧美va日韩va| 亚洲激情男女视频| 国产一区在线观看麻豆| 91福利视频网站| 久久久美女毛片 | 欧美性生交片4| 精品国产亚洲在线| 亚洲国产一区二区三区| 国产黄色成人av| 在线播放欧美女士性生活| 中文字幕av一区二区三区| 丝袜国产日韩另类美女| 99久久免费精品高清特色大片| 欧美大片日本大片免费观看| 亚洲夂夂婷婷色拍ww47| 成人性生交大片免费看视频在线 | 26uuu久久天堂性欧美| 亚洲老司机在线| 福利一区二区在线观看| 欧美一级片在线看| 一区二区三区四区国产精品| 国产成人一区二区精品非洲| 日韩欧美另类在线| 午夜激情一区二区| 一本色道亚洲精品aⅴ| 中文字幕av不卡| 韩国午夜理伦三级不卡影院| 3atv在线一区二区三区| 亚洲资源中文字幕| 91麻豆swag| 国产精品看片你懂得| 国模无码大尺度一区二区三区| 欧美日韩精品一区二区三区| 亚洲天堂福利av| 北岛玲一区二区三区四区| 久久久99免费| 韩国女主播一区二区三区| 91精品国产91久久综合桃花 | 北岛玲一区二区三区四区| 久久网站最新地址| 美女视频黄 久久| 91麻豆精品91久久久久同性| 亚洲一区二区免费视频| 色88888久久久久久影院按摩| 中文字幕中文字幕在线一区| 国产69精品久久久久毛片| 久久久国产综合精品女国产盗摄| 久久国产精品99精品国产| 91精品久久久久久久99蜜桃| 五月天一区二区三区| 精品视频免费在线| 香蕉成人伊视频在线观看| 欧美日高清视频| 五月综合激情日本mⅴ| 欧美日韩精品二区第二页| 亚洲一区二区欧美日韩| 欧美无砖砖区免费| 天天操天天综合网| 8x8x8国产精品| 久久99精品国产麻豆不卡| 精品国产一区二区三区不卡 | 欧美乱妇20p| 免费成人结看片| 久久伊人中文字幕| 国产成a人无v码亚洲福利| 国产精品无遮挡| 色综合天天综合网天天狠天天 | 男女男精品视频网| 日韩欧美亚洲国产另类| 国产乱子伦视频一区二区三区| 国产午夜精品理论片a级大结局| 高清成人免费视频| 亚洲丝袜美腿综合| 欧美年轻男男videosbes| 蜜桃视频第一区免费观看| 欧美哺乳videos| www.av精品| 亚洲第一在线综合网站| 欧美mv日韩mv| 99麻豆久久久国产精品免费| 亚洲一区二区在线观看视频| 91精品国产欧美一区二区| 国产精品一二三区| 亚洲欧美偷拍另类a∨色屁股| 欧美日韩一区三区| 国产在线麻豆精品观看| 最新成人av在线| 欧美精品日韩一区| 国产精品1024久久| 亚洲一区二区四区蜜桃| 日韩丝袜情趣美女图片| 成人永久aaa| 五月天欧美精品| 久久久国产精品不卡| 色综合久久天天| 久久精品久久精品| 亚洲乱码中文字幕| 精品久久久久久无| 一本大道久久a久久精品综合| 强制捆绑调教一区二区| 国产精品久久一级| 日韩欧美在线观看一区二区三区| 懂色中文一区二区在线播放| 一二三四社区欧美黄| 久久久久久久久蜜桃| 欧美日韩三级一区| 成人妖精视频yjsp地址| 日本不卡一区二区三区高清视频| 中文子幕无线码一区tr| 7777精品伊人久久久大香线蕉完整版| 国产宾馆实践打屁股91| 日韩黄色片在线观看| 国产精品高潮呻吟久久| 日韩欧美中文字幕制服| 欧美吻胸吃奶大尺度电影| 国产成人啪午夜精品网站男同| 午夜视频一区在线观看| 亚洲欧美自拍偷拍| 久久久av毛片精品| 日韩三级视频在线观看| 在线观看区一区二| aaa欧美大片| 国产精品99久久久久久宅男| 日本伊人色综合网| 一区二区三区四区国产精品| 欧美经典一区二区| 精品盗摄一区二区三区| 欧美高清精品3d| 91热门视频在线观看| 成人天堂资源www在线| 成人三级伦理片| 日韩不卡一区二区| 亚洲图片欧美色图| 亚洲美女偷拍久久| 中文无字幕一区二区三区| 日韩美女视频一区二区在线观看| 91国在线观看| 91网站最新地址| eeuss鲁片一区二区三区| 国产成人综合在线观看| 精品夜夜嗨av一区二区三区| 婷婷久久综合九色综合绿巨人| 亚洲美女淫视频| 亚洲视频在线一区二区| 国产精品精品国产色婷婷| 国产日韩欧美电影| 国产欧美一区二区三区鸳鸯浴 | 欧美丝袜自拍制服另类| 色婷婷综合激情| 色婷婷久久99综合精品jk白丝|