亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
国产精品天美传媒| 亚洲三级久久久| 成人黄色免费短视频| 天堂久久一区二区三区| 久久久亚洲午夜电影| 欧美日韩视频在线第一区| 国产福利一区二区| 色综合天天做天天爱| 久久精品噜噜噜成人av农村| 怡红院av一区二区三区| 久久精品人人做人人爽97| 日韩一区二区在线看片| 91久久精品网| 99久久99久久久精品齐齐| 精品一区二区三区在线观看 | 亚洲欧洲日产国产综合网| 欧美一区二区久久| 精品视频资源站| 色婷婷香蕉在线一区二区| 播五月开心婷婷综合| 国产精品99久| 国产精品888| 国产一区二区在线看| 喷白浆一区二区| 五月天激情小说综合| 亚洲伊人伊色伊影伊综合网| 日韩伦理av电影| 国产精品久久综合| 国产精品萝li| 国产欧美日韩精品a在线观看| 精品欧美一区二区久久| 欧美久久久久久久久中文字幕| 色婷婷久久久综合中文字幕| 99国产精品一区| 91视频观看视频| 色av成人天堂桃色av| 色狠狠色狠狠综合| 欧美专区在线观看一区| 色欧美片视频在线观看| 91福利社在线观看| 91久久精品国产91性色tv| 91美女在线看| 欧亚一区二区三区| 6080国产精品一区二区| 欧美三日本三级三级在线播放| 欧美色中文字幕| 9191成人精品久久| 欧美一级在线观看| 精品国产乱子伦一区| 久久免费电影网| 国产精品色哟哟网站| 亚洲私人影院在线观看| 一区二区三区**美女毛片| 天天影视网天天综合色在线播放 | 韩国av一区二区三区| 国产成人精品亚洲777人妖| 成人黄色电影在线 | 亚洲bt欧美bt精品| 免费人成黄页网站在线一区二区| 久久狠狠亚洲综合| 国产成人精品网址| 在线观看国产日韩| 日韩免费高清视频| 国产精品二三区| 亚洲图片欧美视频| 91黄色免费版| 欧美人狂配大交3d怪物一区| 6080国产精品一区二区| 国产日韩欧美一区二区三区乱码| 国产精品九色蝌蚪自拍| 洋洋av久久久久久久一区| 美女性感视频久久| www.亚洲精品| 91精品国产综合久久福利软件| 久久综合九色综合97婷婷| 亚洲色图视频免费播放| 日韩成人dvd| www.日韩精品| 日韩免费观看2025年上映的电影 | 欧美日韩色综合| 久久综合色一综合色88| 亚洲黄色免费电影| 久久99久久久久| 色伊人久久综合中文字幕| 日韩欧美国产午夜精品| 国产精品久久久久久久久搜平片| 午夜国产不卡在线观看视频| 国产激情偷乱视频一区二区三区| 欧美系列亚洲系列| 国产精品色一区二区三区| 日本vs亚洲vs韩国一区三区 | 成人高清免费观看| 欧美高清视频一二三区| 国产精品毛片久久久久久| 日韩不卡免费视频| 色婷婷精品久久二区二区蜜臀av| 精品国内二区三区| 亚洲成av人**亚洲成av**| 成人看片黄a免费看在线| 67194成人在线观看| 伊人开心综合网| 国产乱色国产精品免费视频| 欧美日韩不卡一区二区| 亚洲人精品一区| 成人性生交大片免费看中文网站| 91 com成人网| 一区二区三区四区激情| 国产高清久久久| 精品999在线播放| 偷拍与自拍一区| 欧美亚洲国产一区二区三区| 国产精品久久一卡二卡| 狠狠色丁香婷综合久久| 在线电影院国产精品| 一区二区三区在线视频观看 | 欧美一区二区三区四区视频| 久久成人久久鬼色| 欧美丰满一区二区免费视频| 亚洲黄色免费电影| 91香蕉视频mp4| 亚洲欧洲三级电影| a级高清视频欧美日韩| 欧美激情综合在线| 国产精品自在在线| 精品成人佐山爱一区二区| 全部av―极品视觉盛宴亚洲| 欧美视频第二页| 亚洲国产精品久久久久秋霞影院| 91久久精品国产91性色tv| 樱花草国产18久久久久| 欧美在线三级电影| 亚洲国产日韩综合久久精品| 欧美性大战久久| 亚洲成av人片一区二区梦乃| 欧美日韩一级片网站| 偷窥少妇高潮呻吟av久久免费| 欧美三级在线看| 日韩精品成人一区二区在线| 91精品国产综合久久香蕉麻豆| 水野朝阳av一区二区三区| 欧美日本在线一区| 日韩vs国产vs欧美| 久久中文娱乐网| 床上的激情91.| 亚洲欧美精品午睡沙发| 欧美在线一区二区三区| 日韩国产精品大片| 欧美电视剧免费观看| 国产麻豆视频精品| 中文字幕欧美区| 在线影院国内精品| 日日摸夜夜添夜夜添国产精品| 日韩欧美国产三级电影视频| 国产在线精品一区在线观看麻豆| 久久精品日产第一区二区三区高清版 | 91丨porny丨在线| 亚洲一卡二卡三卡四卡无卡久久| 欧美日韩国产123区| 麻豆精品久久精品色综合| 国产女同性恋一区二区| 91蝌蚪porny九色| 日韩精品成人一区二区在线| 久久久99精品免费观看不卡| 国产69精品久久久久777| 一区二区在线观看不卡| 555www色欧美视频| 国产大陆a不卡| 亚洲精品国产视频| 91精品国产综合久久香蕉的特点 | 亚洲国产成人在线| 欧美日韩一区二区不卡| 国内欧美视频一区二区| 亚洲久草在线视频| 日韩美女天天操| 不卡视频一二三四| 日本少妇一区二区| 国产精品美女一区二区三区| 欧美三级日本三级少妇99| 国产米奇在线777精品观看| 亚洲精品国产精华液| 337p粉嫩大胆噜噜噜噜噜91av| 91丨porny丨首页| 精品一区二区日韩| 一区二区成人在线| 久久久久九九视频| 欧美高清视频不卡网| 91丨九色丨黑人外教| 欧美日韩久久一区二区| 国产在线精品不卡| 亚洲午夜激情av| 国产精品久线在线观看| 欧美成人一区二区三区片免费| 99久久精品国产精品久久| 麻豆精品视频在线| 亚洲成人av在线电影| 国产精品国产自产拍高清av王其| 日韩丝袜情趣美女图片| 欧美亚洲日本国产| 99精品国产一区二区三区不卡| 精品一区二区在线免费观看|