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

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

?? tabbedmdisave.cpp

?? 一款最完整的工業組態軟源代碼
?? CPP
?? 第 1 頁 / 共 4 頁
字號:
/////////////////////////////////////////////////////////////////////////////
// TabbedMDISave.cpp - Classes related to "saving" MDI children in the
//   tabbed MDI environment.
//
// Classes:
//   CTabbedMDIChildModifiedItem - 
//      Implements ITabbedMDIChildModifiedItem.
//   CTabbedMDIChildModifiedList - 
//      Implements ITabbedMDIChildModifiedList.
//
// Written by Daniel Bowen (dbowen@es.com)
// Copyright (c) 2004 Daniel Bowen.
//
// This code may be used in compiled form in any way you desire. This
// file may be redistributed by any means PROVIDING it is 
// not sold for profit without the authors written consent, and 
// providing that this notice and the authors name is included.
//
// This file is provided "as is" with no expressed or implied warranty.
// The author accepts no liability if it causes any damage to you or your
// computer whatsoever.
//
// If you find bugs, have suggestions for improvements, etc.,
// please contact the author.
//
// History (Date/Author/Description):
// ----------------------------------
//
// 2004/06/28: Daniel Bowen
// - Support hiding the description and/or last modified columns
//   in the "save modified items" dialog.
// - Clean up warnings on level 4
//
// 2004/04/29: Daniel Bowen
// - Original implementation

#define WTL_TABBED_MDI_SAVE_IMPLEMENTATION
#include "TabbedMDISave.h"

#if (_WIN32_WINNT >= 0x0501)
	#include <atltheme.h>
#endif

#if (_ATL_VER < 0x0700)
	#error TabbedMDISave.cpp requires ATL 7.0 or higher
#endif

#include <atlcomtime.h>

/////////////////////////////////////////////////////////////////////////////
// CTabbedMDIChildModifiedList
CTabbedMDIChildModifiedList::CTabbedMDIChildModifiedList() :
	m_parentItem(NULL)
{
}

HRESULT CTabbedMDIChildModifiedList::FinalConstruct()
{
	return S_OK;
}

void CTabbedMDIChildModifiedList::FinalRelease() 
{
	this->Clear();

	// Don't Release m_parentItem, because
	// we only have a weak reference to it
	m_parentItem = NULL;
}

STDMETHODIMP CTabbedMDIChildModifiedList::get_Item(long index, ITabbedMDIChildModifiedItem** item)
{
	if(item == NULL)
	{
		return E_POINTER;
	}
	HRESULT hr = E_INVALIDARG;

	*item = NULL;
	POSITION pos = this->FindIndex(index);
	if(pos != NULL)
	{
		hr = this->GetAt(pos)->QueryInterface(item);
	}
	return hr;
}

STDMETHODIMP CTabbedMDIChildModifiedList::get_Index(ITabbedMDIChildModifiedItem* item, long* index)
{
	if(item == NULL || index == NULL)
	{
		return E_POINTER;
	}

	*index = -1;

	CComPtr<IUnknown> punkItemToFind;
	item->QueryInterface(IID_IUnknown, (void**)&punkItemToFind);

	// If we tracked items by their identity IUnknown*, we could do
	// a "Find".  But we don't, so we'll just linearly search the list,
	// and depend on the comparing IUnknown* values for identity.
	// (It's not expected that this method would be called very frequently).
	int currentIndex = 0;
	POSITION pos = this->GetHeadPosition();
	while(pos != NULL)
	{
		CComPtr<IUnknown> punkItem;
		this->GetNext(pos)->QueryInterface(IID_IUnknown, (void**)&punkItem);
		if(punkItemToFind == punkItem)
		{
			*index = currentIndex;
			pos = NULL;
		}
		else
		{
			++currentIndex;
		}
	}

	return ((*index) >= 0) ? S_OK : E_INVALIDARG;
}

STDMETHODIMP CTabbedMDIChildModifiedList::get_Count(long* count)
{
	if(count == NULL)
	{
		return E_POINTER;
	}
	*count = (long)this->GetCount();
	return S_OK;
}

STDMETHODIMP CTabbedMDIChildModifiedList::AddNew(
	const wchar_t* name, const wchar_t* displayName, const wchar_t* description,
	DATE lastModified, HICON icon,
	ITabbedMDIChildModifiedItem** item)
{
	HRESULT hr = E_FAIL;

	CComObject<CTabbedMDIChildModifiedItem>* newItem = NULL;
	hr = CComObject<CTabbedMDIChildModifiedItem>::CreateInstance(&newItem);
	if(newItem != NULL)
	{
		newItem->AddRef();

		HWND window = NULL;
		if(m_parentItem)
		{
			m_parentItem->get_Window(&window);
		}

		hr = newItem->InitNew(window, name, displayName, description, lastModified, icon);
		if(SUCCEEDED(hr))
		{
			CComPtr<ITabbedMDIChildModifiedItem> modifiedItem;
			hr = newItem->QueryInterface(&modifiedItem);

			this->AddTail(modifiedItem);

			// Set the parent list as ourselves, but only after
			// we really have added it to our collection of items
			modifiedItem->putref_ParentList(this);

			if(item != NULL)
			{
				*item = modifiedItem.Detach();
			}
		}

		newItem->Release();
	}

	return hr;
}

STDMETHODIMP CTabbedMDIChildModifiedList::Insert(
	long index, ITabbedMDIChildModifiedItem* item)
{
	HRESULT hr = E_INVALIDARG;

	POSITION pos = this->FindIndex(index);
	if(pos != NULL)
	{
		this->InsertBefore(pos, item);
		hr = S_OK;
	}
	else
	{
		this->AddTail(item);
		hr = S_OK;
	}

	if(SUCCEEDED(hr))
	{
		// Set the parent list as ourselves, but only after
		// we really have added it to our collection of items
		item->putref_ParentList(this);
	}
	return hr;
}

STDMETHODIMP CTabbedMDIChildModifiedList::InsertList(
	long index, ITabbedMDIChildModifiedList* list)
{
	if(list == NULL)
	{
		return E_INVALIDARG;
	}

	HRESULT hr = S_OK;

	long count = 0;
	list->get_Count(&count);

	if(index < 0)
	{
		index = count;
	}

	for(long i=0; i<count; ++i)
	{
		CComPtr<ITabbedMDIChildModifiedItem> item;
		list->get_Item(i, &item);
		
		this->Insert(index + i, item);
	}

	return hr;
}

STDMETHODIMP CTabbedMDIChildModifiedList::Remove(
	long index, ITabbedMDIChildModifiedItem** item)
{
	HRESULT hr = E_INVALIDARG;

	POSITION pos = this->FindIndex(index);
	if(pos != NULL)
	{
		CComPtr<ITabbedMDIChildModifiedItem> oldItem(this->GetAt(pos));
		this->RemoveAt(pos);
		if(oldItem)
		{
			oldItem->putref_ParentList(NULL);

			if(item != NULL)
			{
				*item = oldItem.Detach();
			}
		}
	}
	return hr;
}

STDMETHODIMP CTabbedMDIChildModifiedList::Clear()
{
	POSITION pos = this->GetHeadPosition();
	while(pos != NULL)
	{
		CComPtr<ITabbedMDIChildModifiedItem> item(this->GetNext(pos));
		if(item)
		{
			item->putref_ParentList(NULL);
		}
	}

	this->RemoveAll();
	return S_OK;
}

STDMETHODIMP CTabbedMDIChildModifiedList::get_ParentItem(ITabbedMDIChildModifiedItem** item)
{
	ATLASSERT(item != NULL);
	if(item == NULL)
	{
		return E_POINTER;
	}
	*item = m_parentItem;
	if(m_parentItem)
	{
		m_parentItem->AddRef();
	}
	return S_OK;
}

// Methods not exposed over iterface:
STDMETHODIMP CTabbedMDIChildModifiedList::putref_ParentItem(ITabbedMDIChildModifiedItem* item)
{
	m_parentItem = item;
	return S_OK;
}


/////////////////////////////////////////////////////////////////////////////
// CTabbedMDIChildModifiedItem
CTabbedMDIChildModifiedItem::CTabbedMDIChildModifiedItem() :
	m_window(NULL),
	m_lastModified(0),
	m_icon(NULL),
	m_parentList(NULL)
{
}

HRESULT CTabbedMDIChildModifiedItem::FinalConstruct()
{
	return S_OK;
}

void CTabbedMDIChildModifiedItem::FinalRelease() 
{
	if(m_icon)
	{
		::DestroyIcon(m_icon);
		m_icon = NULL;
	}

	// Don't Release m_parentList, because
	// we only have a weak reference to it
	m_parentList = NULL;
	m_window = NULL;

	m_name.Empty();
	m_displayName.Empty();
	m_description.Empty();
	m_userData.Release();
	m_subItems.Release();
}

STDMETHODIMP CTabbedMDIChildModifiedItem::get_Window(
	HWND* window)
{
	ATLASSERT(window != NULL);
	if (window == NULL)
	{
		return E_POINTER;
	}
	*window = m_window;
	return S_OK;
}
STDMETHODIMP CTabbedMDIChildModifiedItem::put_Window(
	HWND window)
{
	m_window = window;
	return S_OK;
}

STDMETHODIMP CTabbedMDIChildModifiedItem::get_Name(
	BSTR* name)
{
	return m_name.CopyTo(name);
}
STDMETHODIMP CTabbedMDIChildModifiedItem::put_Name(
	const wchar_t* name)
{
	m_name = name;
	return S_OK;
}

STDMETHODIMP CTabbedMDIChildModifiedItem::get_DisplayName(
	BSTR* displayName)
{
	return m_displayName.CopyTo(displayName);
}
STDMETHODIMP CTabbedMDIChildModifiedItem::put_DisplayName(
	const wchar_t* displayName)
{
	m_displayName = displayName;
	return S_OK;
}

STDMETHODIMP CTabbedMDIChildModifiedItem::get_Description(
	BSTR* description)
{
	return m_description.CopyTo(description);
}
STDMETHODIMP CTabbedMDIChildModifiedItem::put_Description(
	const wchar_t* description)
{
	m_description = description;
	return S_OK;
}

STDMETHODIMP CTabbedMDIChildModifiedItem::get_LastModifiedUTC(
	DATE* lastModified)
{
	ATLASSERT(lastModified != NULL);
	if (lastModified == NULL)
	{
		return E_POINTER;
	}
	*lastModified = m_lastModified;
	return S_OK;
}
STDMETHODIMP CTabbedMDIChildModifiedItem::put_LastModifiedUTC(
	DATE lastModified)
{
	m_lastModified = lastModified;
	return S_OK;
}

STDMETHODIMP CTabbedMDIChildModifiedItem::get_Icon(
	HICON* icon)
{
	ATLASSERT(icon != NULL);
	if (icon == NULL)
	{
		return E_POINTER;
	}
	*icon = m_icon;
	return S_OK;
}
STDMETHODIMP CTabbedMDIChildModifiedItem::put_Icon(
	HICON icon)
{
	if(m_icon)
	{
		::DestroyIcon(m_icon);
		m_icon = NULL;
	}
	m_icon = ::CopyIcon(icon);
	return S_OK;
}

STDMETHODIMP CTabbedMDIChildModifiedItem::get_UserData(
	IUnknown** userData)
{
	return m_userData.CopyTo(userData);
}
STDMETHODIMP CTabbedMDIChildModifiedItem::putref_UserData(
	IUnknown* userData)
{
	m_userData = userData;
	return S_OK;
}

STDMETHODIMP CTabbedMDIChildModifiedItem::get_ParentList(
	ITabbedMDIChildModifiedList** parentList)
{
	ATLASSERT(parentList != NULL);
	if(parentList == NULL)
	{
		return E_POINTER;
	}
	*parentList = m_parentList;
	if(m_parentList)
	{
		m_parentList->AddRef();
	}
	return S_OK;
}
STDMETHODIMP CTabbedMDIChildModifiedItem::putref_ParentList(
	ITabbedMDIChildModifiedList* parentList)
{
	if(	m_parentList != NULL && parentList != NULL &&
		m_parentList != parentList)
	{
		// Neither the current nor the new parent list is NULL.

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
香蕉加勒比综合久久| 中文字幕在线播放不卡一区| 蜜桃一区二区三区在线观看| 欧美老肥妇做.爰bbww| 日精品一区二区| 91精品国产乱码| 国产美女娇喘av呻吟久久| 日本一区二区成人| 色婷婷av一区二区三区之一色屋| 亚洲一区二区三区四区在线观看| 91精品在线免费观看| 韩国成人福利片在线播放| 欧美—级在线免费片| 91久久奴性调教| 偷窥国产亚洲免费视频| 久久综合av免费| 91丝袜呻吟高潮美腿白嫩在线观看| 尤物av一区二区| 欧美电影免费观看高清完整版在| 国产成人精品免费一区二区| 一区二区三区在线影院| 91精品国产高清一区二区三区蜜臀 | 欧美成人一区二区三区片免费 | 91在线无精精品入口| 石原莉奈一区二区三区在线观看| 久久久久久亚洲综合| 欧洲亚洲国产日韩| 国产一区在线观看视频| 亚洲一区二区美女| 久久久精品免费观看| 欧美日韩国产123区| 国产酒店精品激情| 有码一区二区三区| 亚洲国产精品成人综合| 91精品国产综合久久精品麻豆 | 国产一区二区三区在线观看精品| 亚洲欧洲成人自拍| 日韩免费观看2025年上映的电影 | 欧美午夜精品久久久| 欧美日韩另类一区| 国产99精品视频| 视频一区欧美日韩| 亚洲人妖av一区二区| 久久久午夜精品理论片中文字幕| 欧美日韩卡一卡二| 色av综合在线| 成人在线视频一区| 国产自产v一区二区三区c| 香蕉久久夜色精品国产使用方法| 国产精品久久久久一区二区三区| 日韩免费性生活视频播放| 色丁香久综合在线久综合在线观看| 国产伦精品一区二区三区免费迷| 亚洲午夜久久久久久久久电影院| 国产亚洲一区字幕| 精品成人免费观看| 欧美绝品在线观看成人午夜影视| 色94色欧美sute亚洲线路一ni| 高清shemale亚洲人妖| 久久99精品久久久久久国产越南 | 国产高清在线观看免费不卡| 日韩精品福利网| 舔着乳尖日韩一区| 亚洲bt欧美bt精品| 亚洲一二三级电影| 一区二区三区四区激情| 亚洲精品国产视频| 1024成人网| 国产精品不卡一区| 中文字幕一区二区三| 国产精品久久久久久久午夜片| 精品国产自在久精品国产| 91精品国产欧美一区二区18| 91精选在线观看| 91精品婷婷国产综合久久竹菊| 欧美高清性hdvideosex| 欧美日本在线看| 91精品国产色综合久久不卡蜜臀 | 欧美精品一区二区三区高清aⅴ| 欧美一区二区三区免费| 日韩欧美不卡一区| 久久麻豆一区二区| 国产精品久久久久永久免费观看| 国产精品女主播av| 中文字幕日本乱码精品影院| 亚洲欧美色一区| 亚洲午夜电影网| 日本亚洲一区二区| 久久超碰97中文字幕| 国产成a人亚洲| 色婷婷久久久综合中文字幕| 欧美中文一区二区三区| 欧美一区二区大片| 亚洲午夜一区二区| 日本亚洲电影天堂| 韩国视频一区二区| 成人动漫一区二区在线| 欧美专区日韩专区| 欧美电影免费观看高清完整版在线| 久久久影视传媒| 亚洲欧美另类久久久精品| 亚洲国产sm捆绑调教视频| 免费成人在线视频观看| 国产·精品毛片| 欧美亚洲综合一区| 精品少妇一区二区| 日韩理论片中文av| 日本中文字幕一区二区有限公司| 国产成人在线视频网站| 欧美午夜电影在线播放| 精品国产一区二区三区忘忧草| 亚洲欧洲国产日本综合| 日韩精品高清不卡| www.亚洲在线| 日韩一区二区高清| 最近中文字幕一区二区三区| 日本中文在线一区| 色综合天天综合网天天狠天天| 日韩一区二区精品| 亚洲精品日日夜夜| 国产永久精品大片wwwapp| 在线观看91精品国产入口| 欧美xxxxxxxxx| 一区二区免费看| 国产精品一二三四| 欧美日韩久久久久久| 国产精品高清亚洲| 精久久久久久久久久久| 色噜噜狠狠一区二区三区果冻| 精品噜噜噜噜久久久久久久久试看| 自拍偷拍亚洲欧美日韩| 国产在线播精品第三| 欧美色图激情小说| 亚洲三级电影网站| 国产精品综合av一区二区国产馆| 欧美丝袜丝交足nylons图片| 国产蜜臀97一区二区三区| 欧美aⅴ一区二区三区视频| 91在线视频18| 国产日韩欧美精品一区| 久久国产精品色婷婷| 欧美日韩五月天| 亚洲人成影院在线观看| 粉嫩aⅴ一区二区三区四区五区| 91精品蜜臀在线一区尤物| 亚洲无线码一区二区三区| 99在线精品视频| 国产拍揄自揄精品视频麻豆| 加勒比av一区二区| 日韩亚洲电影在线| 日韩成人av影视| 欧美视频在线一区| 亚洲欧美欧美一区二区三区| 不卡视频在线观看| 中文一区在线播放| 国产福利精品一区| 精品国产一区a| 精品一区二区三区在线播放| 91精品综合久久久久久| 国产91丝袜在线播放九色| 欧美成人猛片aaaaaaa| 日韩av高清在线观看| 欧美日韩久久久一区| 亚洲超丰满肉感bbw| 在线成人免费视频| 日本不卡视频在线| 欧美大片顶级少妇| 久久99蜜桃精品| 亚洲精品一区二区在线观看| 国产在线一区二区| 久久久美女艺术照精彩视频福利播放| 狠狠v欧美v日韩v亚洲ⅴ| 欧美电影免费提供在线观看| 激情五月播播久久久精品| 久久久亚洲精品石原莉奈| 成人免费观看视频| 亚洲精品中文字幕在线观看| 91同城在线观看| 亚洲图片欧美综合| 7799精品视频| 国产一区二区剧情av在线| 欧美韩国一区二区| 94色蜜桃网一区二区三区| 亚洲一区二区视频| 日韩欧美视频一区| 国产精品一区二区视频| 1024成人网| 制服丝袜一区二区三区| 精品一区二区三区在线播放 | 免费亚洲电影在线| 26uuu欧美日本| k8久久久一区二区三区| 亚洲区小说区图片区qvod| 欧美日韩高清不卡| 激情五月婷婷综合| 亚洲人成网站影音先锋播放| 欧美一级黄色片| 成人国产亚洲欧美成人综合网| 亚洲精品写真福利| 日韩一区国产二区欧美三区|