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

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

?? tabbedmdisave.cpp

?? 一款最完整的工業組態軟源代碼
?? CPP
?? 第 1 頁 / 共 4 頁
字號:
			// NOTE: The handler of LVN_INSERTITEM will AddRef,
			// and the handler of LVN_DELETEITEM will Release
			// to be sure we keep the item reference counted appropriately
			// no matter where the InsertItem comes from.
			//IUnknown* punkItem = NULL;
			CComPtr<IUnknown> punkItem;
			item->QueryInterface(IID_IUnknown, (void**)&punkItem);

			LVITEM lvItem = {0};
			lvItem.mask = (LVIF_TEXT | LVIF_INDENT | LVIF_IMAGE | LVIF_PARAM);
			lvItem.iItem = m_list.GetItemCount();
			lvItem.iSubItem = 0;
			lvItem.pszText = (LPTSTR)(LPCTSTR)displayNameForItem;
			lvItem.iIndent = indent;
			lvItem.iImage = imageIndex;
			lvItem.lParam = (LPARAM)punkItem.p;

			int index = m_list.InsertItem(&lvItem);
			if(index >= 0)
			{
				m_list.SetCheckState(index, TRUE);

				m_list.SetItemText(index, eColumn_Description, descriptionForItem);
				if(lastModifiedForItem.GetLength() > 0)
				{
					m_haveAtLeastOneModifiedDate = true;
					m_list.SetItemText(index, eColumn_LastModified, lastModifiedForItem);
				}
			}

			CComPtr<ITabbedMDIChildModifiedList> subItems;
			item->get_SubItems(&subItems);
			if(subItems)
			{
				this->AddItems(subItems, (indent + 1));
			}
		}
	}

	return success;
}

CString CSaveModifiedItemsDialog::FormatLastModifiedDateString(DATE lastModifiedUTC)
{
	CString lastModifiedString;

	if(lastModifiedUTC != 0)
	{
		SYSTEMTIME lastModifiedUTCSystem = {0};
		::VariantTimeToSystemTime(lastModifiedUTC, &lastModifiedUTCSystem);
		FILETIME lastModifiedUTCFileTime = {0};
		::SystemTimeToFileTime(&lastModifiedUTCSystem, &lastModifiedUTCFileTime);
		FILETIME lastModifiedLocalFileTime = {0};
		::FileTimeToLocalFileTime(&lastModifiedUTCFileTime, &lastModifiedLocalFileTime);

		COleDateTime nowLocal(COleDateTime::GetCurrentTime());
		COleDateTime dateTimeModifiedLocal(lastModifiedLocalFileTime);

		CString fullDateTimeString = dateTimeModifiedLocal.Format(_T("%#m/%#d/%Y %#I:%M %p"));;
		CString timeString = dateTimeModifiedLocal.Format(_T("%#I:%M %p"));;

		int yearDifference = (nowLocal.GetYear() - dateTimeModifiedLocal.GetYear());
		int dayOfYearDifference = (nowLocal.GetDayOfYear() - dateTimeModifiedLocal.GetDayOfYear());
		int hourDifference = (nowLocal.GetHour() - dateTimeModifiedLocal.GetHour());
		int minuteDifference = (nowLocal.GetMinute() - dateTimeModifiedLocal.GetMinute());
		int secondDifference = (nowLocal.GetSecond() - dateTimeModifiedLocal.GetSecond());
		if(	yearDifference >= 1 ||
			dayOfYearDifference > 1 ||
			nowLocal < dateTimeModifiedLocal)
		{
			lastModifiedString = fullDateTimeString;
		}
		else if(dayOfYearDifference == 1)
		{
			lastModifiedString.Format(_T("Yesterday, %s"), timeString);
		}
		else if(hourDifference >= 1)
		{
			lastModifiedString.Format(_T("%d hour%s ago"), hourDifference,
				(hourDifference!=1) ? _T("s") : _T(""));
		}
		else if(minuteDifference >= 1)
		{
			lastModifiedString.Format(_T("%d minute%s ago"), minuteDifference,
				(minuteDifference!=1) ? _T("s") : _T(""));
		}
		else if(secondDifference >= 1)
		{
			lastModifiedString.Format(_T("%d second%s ago"), secondDifference,
				(secondDifference!=1) ? _T("s") : _T(""));
		}
		else
		{
			lastModifiedString = fullDateTimeString;
		}
	}

	return lastModifiedString;
}

IUnknown* CSaveModifiedItemsDialog::GetIUnknownForItem(int index)
{
	LVITEM lvi={0};
	lvi.mask = LVIF_PARAM;
	lvi.iItem = index;
	lvi.iSubItem = 0;
	lvi.lParam = 0;
	if(m_list.GetItem(&lvi))
	{
		return (IUnknown*) lvi.lParam;
	}

	return NULL;
}

int CSaveModifiedItemsDialog::FindItemIndex(ITabbedMDIChildModifiedItem* item)
{
	if(item == NULL)
	{
		return -1;
	}

	CComPtr<IUnknown> punkNode;
	item->QueryInterface(IID_IUnknown, (void**)&punkNode);
	if(punkNode)
	{
		LVFINDINFO findInfo = {0};
		findInfo.flags = LVFI_PARAM;
		findInfo.lParam = (LPARAM)(IUnknown*)punkNode.p;

		return m_list.FindItem(&findInfo, -1);
	}

	return -1;
}

int CSaveModifiedItemsDialog::FindParentIndex(int item)
{
	// Find the index of the "parent" based on the indent
	LVITEM lvi = { 0 };
	lvi.iItem = item;
	lvi.iSubItem = 0;
	lvi.mask = LVIF_INDENT;
	m_list.GetItem(&lvi);

	if(lvi.iIndent == 0)
	{
		return -1;
	}

	int parentIndex = -1;
	for(int i=item; (i >= 0) && (parentIndex < 0); --i)
	{
		LVITEM lviParent = { 0 };
		lviParent.iItem = i;
		lviParent.iSubItem = 0;
		lviParent.mask = LVIF_INDENT;
		m_list.GetItem(&lviParent);
		if(lviParent.iIndent < lvi.iIndent)
		{
			// We've hit the first item before the
			// item in question where the indent is less.
			// Treat this as the parent
			parentIndex = i;
		}
	}

	return parentIndex;
}

void CSaveModifiedItemsDialog::ToggleCheckState(int item)
{
	LVITEM lvi = { 0 };
	lvi.iItem = item;
	lvi.iSubItem = 0;
	lvi.mask = (LVIF_INDENT | LVIF_STATE);
	lvi.stateMask = (LVIS_STATEIMAGEMASK | LVIS_SELECTED);
	m_list.GetItem(&lvi);

	CheckState checkState = (CheckState)(lvi.state & LVIS_STATEIMAGEMASK);

	CheckState newCheckState = eCheckState_Checked;
	switch(checkState)
	{
	case eCheckState_Unchecked:
		newCheckState = eCheckState_Checked;
		break;
	case eCheckState_Checked:
		newCheckState = eCheckState_Unchecked;
		break;
	case eCheckState_Indeterminate:
		newCheckState = eCheckState_Checked;
		break;
	}

	if((lvi.state & LVIS_SELECTED) != LVIS_SELECTED)
	{
		// If the item isn't selected, toggle the checkmark on just the item
		this->SetTristateCheckState(item, newCheckState);
	}
	else
	{
		// Otherwise, set the checkmark appropriately on all selected items.
		int itemToCheck = -1;
		while((itemToCheck = m_list.GetNextItem(itemToCheck, LVNI_SELECTED)) != -1)
		{
			this->SetTristateCheckState(itemToCheck, newCheckState);
		}
	}
}

void CSaveModifiedItemsDialog::SetTristateCheckState(int item, CheckState checkState)
{
	LVITEM lvi = { 0 };
	lvi.iItem = item;
	lvi.iSubItem = 0;
	lvi.mask = LVIF_INDENT;
	m_list.GetItem(&lvi);

	int itemToCheck = item;
	bool done = false;

	// Set the check of the item as well as all of the "child" items
	while(!done)
	{
		m_list.SetItemState(itemToCheck, checkState, LVIS_STATEIMAGEMASK);

		itemToCheck = m_list.GetNextItem(itemToCheck, LVNI_ALL);
		if(itemToCheck < 0)
		{
			done = true;
		}
		else
		{
			LVITEM lviToCheck = { 0 };
			lviToCheck.iItem = itemToCheck;
			lviToCheck.iSubItem = 0;
			lviToCheck.mask = LVIF_INDENT;
			m_list.GetItem(&lviToCheck);
			done = (lviToCheck.iIndent <= lvi.iIndent);
		}
	}

	this->UpdateParentCheckState(item, checkState);
}

CSaveModifiedItemsDialog::CheckState CSaveModifiedItemsDialog::GetTristateCheckState(int item)
{
	return (CheckState)m_list.GetItemState(item, LVIS_STATEIMAGEMASK);
}

void CSaveModifiedItemsDialog::UpdateParentCheckState(int item, CheckState checkState)
{
	// Update the "parent" item's checkbox to reflect the state of the descendants.
	// If all of the descendants are checked, then check the parent.
	// If all of the descendants are unchecked, then uncheck the parent.
	// If some of the descendants are checked, and some are unchecked, have
	// the parent's checkbox be indeterminate.
	// If the parent isn't a "root" parent, recursively give the same
	// treatment to all of the ancestors.

	int parentIndex = this->FindParentIndex(item);
	if(parentIndex >= 0)
	{
		LVITEM lviParent = { 0 };
		lviParent.iItem = parentIndex;
		lviParent.iSubItem = 0;
		lviParent.mask = LVIF_INDENT;
		m_list.GetItem(&lviParent);

		int itemToCheck = parentIndex + 1;

		bool checkStateMixed = false;
		bool done = false;
		while(!done)
		{
			LVITEM lviDescendant = { 0 };
			lviDescendant.iItem = itemToCheck;
			lviDescendant.iSubItem = 0;
			lviDescendant.mask = (LVIF_INDENT | LVIF_STATE);
			lviDescendant.stateMask = LVIS_STATEIMAGEMASK;
			BOOL validItem = m_list.GetItem(&lviDescendant);
			if(!validItem)
			{
				done = true;
			}
			else if(lviDescendant.iIndent <= lviParent.iIndent)
			{
				// There's no more possible siblings or descendants,
				// because we've hit our parent's sibling
				done = true;
			}
			else
			{
				CheckState descendantCheckState = (CheckState)(lviDescendant.state & LVIS_STATEIMAGEMASK);
				if(descendantCheckState != checkState)
				{
					checkStateMixed = true;
					done = true;
				}
			}

			if(!done)
			{
				itemToCheck = m_list.GetNextItem(itemToCheck, LVNI_ALL);
				done = (itemToCheck < 0);
			}
		}

		// Now we've visited all of the descendants of the parent.
		// If all of them have the same check state as the item,
		// set the parent's check state to the same.  If the descendants
		// have mixed check states, then set the parent's check
		// state to indeterminate.
		if(checkStateMixed)
		{
			m_list.SetItemState(parentIndex, eCheckState_Indeterminate, LVIS_STATEIMAGEMASK);
		}
		else
		{
			m_list.SetItemState(parentIndex, checkState, LVIS_STATEIMAGEMASK);
		}
		this->UpdateParentCheckState(parentIndex, checkState);
	}
}

void CSaveModifiedItemsDialog::CreateDefaultImages(void)
{
	// IMPORTANT! Win2K and WinXP have the same index for this bitmap.
	//  There's even a standard TB_LOADIMAGES message for toolbar that loads it,
	//  along with standard image indexes into the bitmap.
	//  However, instead of creating a toolbar and issuing TB_LOADIMAGES,
	//  we'll load the bitmap directly by its index (120) and
	//  the color mask (192,192,192).
	//  Double check future versions of Windows to make sure
	//  this all works correctly.
	HMODULE hComCtl32 = GetModuleHandle(_T("comctl32.dll"));
	if(hComCtl32)
	{
		HIMAGELIST hCommonToolbar = ImageList_LoadBitmap(hComCtl32, MAKEINTRESOURCE(120), 16, 0, RGB(192,192,192));
		if(hCommonToolbar)
		{
			HICON hFileNew = ImageList_ExtractIcon(NULL, hCommonToolbar, STD_FILENEW);
			HICON hFileSave = ImageList_ExtractIcon(NULL, hCommonToolbar, STD_FILESAVE);

			if(hFileNew)
			{
				int fileNewIndex = m_images.AddIcon(hFileNew);
				ATLASSERT(fileNewIndex == 0);

				::DestroyIcon(hFileNew);
				hFileNew = NULL;
			}

			if(hFileSave)
			{
				int fileSaveIndex = m_images.AddIcon(hFileSave);
				ATLASSERT(fileSaveIndex == 1);

				m_dialogIcon = hFileSave;

				this->SetIcon(m_dialogIcon, ICON_SMALL);
			}

			ImageList_Destroy(hCommonToolbar);
			hCommonToolbar = NULL;
		}
	}
}

void CSaveModifiedItemsDialog::CreateDefaultStateImages(void)
{
	if(!m_stateImages.IsNull())
	{
		CWindowDC dcScreen(NULL);

		int cx = ::GetSystemMetrics(SM_CXSMICON);
		int cy = ::GetSystemMetrics(SM_CYSMICON);

		m_imageUnchecked     = this->AddCheckStateImage(dcScreen, cx, cy, eCheckState_Unchecked);
		m_imageChecked       = this->AddCheckStateImage(dcScreen, cx, cy, eCheckState_Checked);
		m_imageIndeterminate = this->AddCheckStateImage(dcScreen, cx, cy, eCheckState_Indeterminate);
	}
}

int CSaveModifiedItemsDialog::AddCheckStateImage(HDC dcScreen, int cx, int cy, enum CheckState checkState)
{
	int index = -1;

#ifdef __ATLTHEME_H__
	UINT stateDTB = CBS_CHECKEDNORMAL;
	UINT stateDFC = (DFCS_BUTTONCHECK | DFCS_CHECKED | DFCS_FLAT);
	switch(checkState)
	{
	case eCheckState_Unchecked:
		stateDTB = CBS_UNCHECKEDNORMAL;
		stateDFC = (DFCS_BUTTONCHECK | DFCS_FLAT);
		break;
	case eCheckState_Checked:
		stateDTB = CBS_CHECKEDNORMAL;
		stateDFC = (DFCS_BUTTONCHECK | DFCS_CHECKED | DFCS_FLAT);
		break;
	case eCheckState_Indeterminate:
		stateDTB = CBS_MIXEDNORMAL;
		stateDFC = (DFCS_BUTTONCHECK | DFCS_CHECKED | DFCS_INACTIVE | DFCS_FLAT);
		break;
	}
#else
	UINT stateDFC = (DFCS_BUTTONCHECK | DFCS_CHECKED | DFCS_FLAT);
	switch(checkState)
	{
	case eCheckState_Unchecked:
		stateDFC = (DFCS_BUTTONCHECK | DFCS_FLAT);
		break;
	case eCheckState_Checked:
		stateDFC = (DFCS_BUTTONCHECK | DFCS_CHECKED | DFCS_FLAT);
		break;
	case eCheckState_Indeterminate:
		stateDFC = (DFCS_BUTTONCHECK | DFCS_CHECKED | DFCS_INACTIVE | DFCS_FLAT);
		break;
	}
#endif

	CDC dc;
	dc.CreateCompatibleDC(dcScreen);
	if(!dc.IsNull())
	{
		CRect rcImage(0,0,cx,cy);

		CBitmap bitmap;
		bitmap.CreateCompatibleBitmap(dcScreen, rcImage.Width(), rcImage.Height());
		CBitmapHandle hOldBitmap = dc.SelectBitmap(bitmap);

		dc.FillSolidRect(&rcImage, RGB(255,0,0));
		rcImage.DeflateRect(1,1);
#ifdef __ATLTHEME_H__
		CTheme theme;
		if(theme.OpenThemeData(m_list, L"Button"))
		{
			theme.DrawThemeBackground(dc, BP_CHECKBOX, stateDTB, &rcImage);
		}
		else
		{
			dc.DrawFrameControl(&rcImage, DFC_BUTTON, stateDFC);
		}
#else
		dc.DrawFrameControl(&rcImage, DFC_BUTTON, stateDFC);
#endif
		dc.SelectBitmap(hOldBitmap);

		index = m_stateImages.Add(bitmap, RGB(255,0,0));
	}

	return index;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩经典中文字幕一区| 99精品久久久久久| 欧美三区在线视频| 一区二区三区免费| 色女孩综合影院| 国产精品综合网| 成人免费看视频| 中文字幕精品一区二区三区精品| 亚洲成av人片www| 欧美一区二区国产| 免费欧美日韩国产三级电影| 欧美二区在线观看| 美腿丝袜亚洲色图| 久久综合色8888| 国产精品亚洲成人| 中文字幕亚洲视频| 欧美亚洲一区三区| 日韩成人伦理电影在线观看| 欧美一区二区三区影视| 国产精品白丝av| 一区av在线播放| 精品国产欧美一区二区| 韩国精品在线观看| 亚洲三级视频在线观看| 在线不卡a资源高清| 国产精品88888| 亚洲国产日韩a在线播放| 91精品在线麻豆| 国产91在线看| 日日摸夜夜添夜夜添亚洲女人| 精品999在线播放| 91片在线免费观看| 狠狠色丁香婷婷综合久久片| 国产精品成人网| 欧美成人一区二区| 精品视频免费在线| aa级大片欧美| 精品中文字幕一区二区| 一区二区三区毛片| 亚洲欧洲日韩在线| 91精品国产一区二区三区蜜臀| 成人一级片网址| 久久av资源网| 亚洲h在线观看| 一区二区三区.www| 国产精品久久毛片av大全日韩| 欧美一级片在线| 欧美精品99久久久**| 在线欧美小视频| av影院午夜一区| 成人午夜短视频| 国产精品一卡二卡| 国精产品一区一区三区mba视频 | 久久一夜天堂av一区二区三区| 美国毛片一区二区三区| 亚洲一区免费观看| 无码av免费一区二区三区试看| 成人免费在线播放视频| 亚洲欧美一区二区三区极速播放| 亚洲国产精品ⅴa在线观看| 久久久久国产成人精品亚洲午夜| 日韩欧美一区二区视频| 欧美人牲a欧美精品| 欧美视频一区二区| 欧美日本在线一区| 2023国产精品| 国产精品久久久久四虎| 亚洲韩国精品一区| 经典一区二区三区| 91国产精品成人| 欧美男人的天堂一二区| 欧美一级午夜免费电影| 久久综合一区二区| 国产精品久久网站| 午夜精品在线看| 日本视频免费一区| 99视频在线观看一区三区| 色综合久久九月婷婷色综合| 欧美三级电影精品| 日本一区二区免费在线观看视频| 一区二区三区精品| 国产乱码精品一品二品| 欧美四级电影网| 国产午夜精品一区二区三区四区| 亚洲一区二区三区小说| 国产一区二区中文字幕| 欧美亚洲动漫精品| 国产欧美一区二区精品性色| 亚洲成人午夜电影| jizzjizzjizz欧美| 欧美精品久久99| 亚洲福利视频三区| 色八戒一区二区三区| 中文字幕中文在线不卡住| 精品在线免费视频| 91精品国产全国免费观看| 国产精品欧美经典| 成人性生交大片| 亚洲国产精品国自产拍av| 精品一区二区日韩| 精品日产卡一卡二卡麻豆| 日韩高清电影一区| 3atv在线一区二区三区| 日本vs亚洲vs韩国一区三区二区| 欧美日韩午夜在线| 亚洲一区二区三区美女| 欧美丝袜丝nylons| 日韩电影免费在线| 亚洲1区2区3区视频| 国产剧情一区二区三区| 67194成人在线观看| 久久精品99国产精品日本| 欧美va亚洲va在线观看蝴蝶网| 久久精品国产99国产| 久久久久久久久久久久电影| 精品一区中文字幕| 国产精品二三区| 欧美中文字幕不卡| 久久99这里只有精品| 国产视频亚洲色图| 一本大道久久a久久综合| 三级精品在线观看| 久久久91精品国产一区二区三区| 成人一二三区视频| 亚洲综合色成人| 亚洲精品一区二区三区福利| 白白色 亚洲乱淫| 日韩国产精品大片| 国产精品高潮呻吟| 久久色在线视频| 欧美日韩精品一区二区天天拍小说 | 日本中文字幕一区二区视频 | 国产ts人妖一区二区| 一区二区三区在线观看国产| 日韩欧美在线不卡| 色94色欧美sute亚洲线路一ni| 丝袜美腿亚洲色图| 亚洲精品视频在线观看网站| 国产亚洲一区二区三区| 91精品国产欧美一区二区18| 色先锋久久av资源部| www.亚洲在线| 成人毛片视频在线观看| 国产精品资源在线| 韩国视频一区二区| 久久99热这里只有精品| 久久99精品国产91久久来源| 午夜亚洲国产au精品一区二区| 亚洲激情一二三区| 亚洲在线免费播放| 亚洲综合清纯丝袜自拍| 亚洲成人免费看| 亚洲va中文字幕| 美腿丝袜一区二区三区| 国产一区视频在线看| 加勒比av一区二区| 国产乱人伦偷精品视频不卡| 国产成人综合在线| 97se狠狠狠综合亚洲狠狠| 色综合久久久久久久久| 欧美伊人久久大香线蕉综合69| 色国产综合视频| 欧美一级爆毛片| 久久九九久久九九| 亚洲精品美腿丝袜| 午夜精品一区二区三区三上悠亚| 国产欧美视频一区二区| 国产欧美日韩麻豆91| 一区二区三区精品视频在线| 日本色综合中文字幕| 欧美精品一区二区久久久| 日韩欧美综合在线| 久久综合999| 午夜伦欧美伦电影理论片| 精品一区二区三区免费视频| 国产精品自拍av| 欧美综合欧美视频| 久久一区二区视频| 亚洲精品中文字幕在线观看| 日韩高清国产一区在线| 成人精品小蝌蚪| 日韩欧美国产麻豆| 亚洲精品自拍动漫在线| 成人午夜视频在线观看| 在线电影一区二区三区| 亚洲色图在线看| 成人午夜免费视频| 中文字幕第一区二区| 久久国产精品色| 欧美一区国产二区| 日韩福利电影在线| 欧美视频你懂的| 一区二区三区不卡视频| 一本大道久久a久久综合| 中文字幕成人av| 北条麻妃国产九九精品视频| 国产精品电影院| a4yy欧美一区二区三区| 亚洲日本va在线观看| 欧美专区日韩专区|