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

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

?? customtabctrl.h

?? 一款最完整的工業組態軟源代碼
?? H
?? 第 1 頁 / 共 5 頁
字號:
	}

	bool IsHighlighted() const
	{
		return m_bHighlighted;
	}
	bool SetHighlighted(bool bHighlighted)
	{
		m_bHighlighted = bHighlighted;
		return true;
	}

	bool CanClose() const
	{
		return m_bCanClose;
	}
	bool SetCanClose(bool bCanClose)
	{
		m_bCanClose = bCanClose;
		return true;
	}
	

// Methods:
public:
	bool UsingImage() const
	{
		return (m_nImage >= 0);
	}
	bool UsingText() const
	{
		return (m_sText.GetLength() > 0);
	}
	bool UsingToolTip() const
	{
		return (m_sToolTip.GetLength() > 0);
	}

	BOOL InflateRect(int dx, int dy)
	{
		return ::InflateRect(&m_rcItem, dx, dy);
	}

	bool MatchItem(CCustomTabItem* pItem, DWORD eFlags) const
	{
		bool bMatch = true;
		if(bMatch && (eFlags & CTFI_RECT) == CTFI_RECT)
		{
			bMatch = (TRUE == ::EqualRect(&m_rcItem, &pItem->m_rcItem));
		}
		if(bMatch && (eFlags & CTFI_IMAGE) == CTFI_IMAGE)
		{
			bMatch = (m_nImage == pItem->m_nImage);
		}
		if(bMatch && (eFlags & CTFI_TEXT) == CTFI_TEXT)
		{
			bMatch = (m_sText == pItem->m_sText);
		}
		if(bMatch && (eFlags & CTFI_TOOLTIP) == CTFI_TOOLTIP)
		{
			bMatch = (m_sToolTip == pItem->m_sToolTip);
		}
		if(bMatch && (eFlags & CTFI_HIGHLIGHTED) == CTFI_HIGHLIGHTED)
		{
			bMatch = (m_bHighlighted == pItem->m_bHighlighted);
		}
		if(bMatch && (eFlags & CTFI_CANCLOSE) == CTFI_CANCLOSE)
		{
			bMatch = (m_bCanClose == pItem->m_bCanClose);
		}

		if(bMatch)
		{
			*pItem = *this;
		}

		return bMatch;
	}
};

// Derived Tab Item class that supports an HWND identifying a "tab view"
class CTabViewTabItem : public CCustomTabItem
{
protected:
	typedef CCustomTabItem baseClass;

// Member variables (in addition to CCustomTabItem ones)
protected:
	HWND m_hWndTabView;

public:
	// NOTE: This is here for backwards compatibility.
	//  Use the new CTFI_TABVIEW instead
	typedef enum FieldFlags
	{
		eCustomTabItem_TabView = CTFI_TABVIEW,
	};

// Use CTFI_TABVIEW instead
#if (_MSC_VER >= 1300)
	#pragma deprecated(eCustomTabItem_TabView)
#endif

// Constructors/Destructors
public:
	CTabViewTabItem() :
		m_hWndTabView(NULL)
	{
	}

	CTabViewTabItem(const CTabViewTabItem& rhs)
	{
		*this = rhs;
	}

	virtual ~CTabViewTabItem()
	{
	}

	const CTabViewTabItem& operator=(const CTabViewTabItem& rhs)
	{
		if(&rhs != this)
		{
			m_rcItem        = rhs.m_rcItem;
			m_nImage        = rhs.m_nImage;
			m_sText         = rhs.m_sText;
			m_sToolTip      = rhs.m_sToolTip;
			m_bHighlighted  = rhs.m_bHighlighted;
			m_bCanClose     = rhs.m_bCanClose;
			m_hWndTabView   = rhs.m_hWndTabView;
		}
		return *this;
	}

// Accessors
public:

	HWND GetTabView() const
	{
		return m_hWndTabView;
	}
	bool SetTabView(HWND hWnd = NULL)
	{
		m_hWndTabView = hWnd;
		return true;
	}

// Methods:
public:
	bool UsingTabView() const
	{
		return (m_hWndTabView != NULL);
	}

	bool MatchItem(CTabViewTabItem* pItem, DWORD eFlags) const
	{
		bool bMatch = true;
		if(eFlags == CTFI_TABVIEW)
		{
			// Make the common case a little faster
			// (searching only for a match to the "tab view" HWND)
			bMatch = (m_hWndTabView == pItem->m_hWndTabView);
		}
		else
		{
			// Do an extensive comparison
			bMatch = baseClass::MatchItem(pItem, eFlags);
			if(bMatch && (eFlags & CTFI_TABVIEW) == CTFI_TABVIEW)
			{
				bMatch = (m_hWndTabView == pItem->m_hWndTabView);
			}
		}

		if(bMatch)
		{
			*pItem = *this;
		}

		return bMatch;
	}
};

typedef CWinTraits<WS_CHILD | WS_VISIBLE | WS_CLIPCHILDREN | WS_CLIPSIBLINGS | CTCS_TOOLTIPS, 0> CCustomTabCtrlWinTraits;

template <class T, class TItem = CCustomTabItem, class TBase = CWindow, class TWinTraits = CCustomTabCtrlWinTraits>
class ATL_NO_VTABLE CCustomTabCtrl : 
	public CWindowImpl< T, TBase, TWinTraits >,
	public COffscreenDrawRect< T >
{
public:
	// Expose the item type (that's a template parameter to this base class)
	typedef typename TItem TItem;

protected:
	typedef CWindowImpl< T, TBase, TWinTraits > baseClass;
	typedef COffscreenDrawRect< T > offscreenDrawClass;

#if (_ATL_VER < 0x0700)
// With ATL 7, CAtlArray was introduced which is better than
//  CSimpleArray. Among other things, it supports inserting
//  items in any place.  If this code is compiled under ATL 7,
//  we'll use the real CAtlArray.  If this is compiled under ATL 3,
//  we'll use a "fake" CAtlArray where we implement the
//  functionality we're using that the real CAtlArray provides.
//
// Important! This isn't the real ATL 7 CAtlArray.
//  We inherit from CSimpleArray as "protected", so that you
//  can't call its versions of functions (so you have
//  to use the CAtlArray style of functions)

template<typename E>
class CAtlArray : protected CSimpleArray<E>
{
protected:
	typedef CAtlArray thisClass;
	typedef CSimpleArray<E> baseClass;

public:

	//Real CAtlArray:  size_t GetCount() const throw();
	size_t GetCount() const
	{
		return m_nSize;
	}

	//Real CAtlArray:  void InsertAt( size_t iElement, INARGTYPE element, size_t nCount = 1 );
	void InsertAt( size_t nIndex, E& element )
	{
		if(m_nSize == m_nAllocSize)
		{
			E* aT;
			int nNewAllocSize = (m_nAllocSize == 0) ? 1 : (m_nSize * 2);
			aT = (E*)realloc(m_aT, nNewAllocSize * sizeof(E));
			if(aT == NULL)
				return; // FALSE;
			m_nAllocSize = nNewAllocSize;
			m_aT = aT;
		}
		memmove((void*)&m_aT[nIndex+1], (void*)&m_aT[nIndex], (m_nSize - nIndex ) * sizeof(E));
		m_nSize++;
		SetAtIndex(nIndex, element);
		//return TRUE;
	}

	//Real CAtlArray:  void RemoveAt( size_t iElement, size_t nCount = 1 );
	void RemoveAt( size_t nIndex )
	{
		// This is an improvement over CSimpleArray::RemoveAt suggested
		//  by Jim Springfield on the ATL discussion list
		m_aT[nIndex].~E();
		if((int)nIndex != (m_nSize - 1))
		{
			memmove((void*)&m_aT[nIndex], (void*)&m_aT[nIndex + 1], (m_nSize - (nIndex + 1)) * sizeof(E));
		}
		m_nSize--;
		//return TRUE;
	}

	//Real CAtlArray:  const E& operator[]( size_t iElement ) const throw();
	const E& operator[]( size_t iElement ) const
	{
		ATLASSERT( iElement < (size_t)m_nSize );
		return( m_aT[iElement] );
	}

	//Real CAtlArray:  E& operator[]( size_t iElement ) throw();
	E& operator[]( size_t iElement )
	{
		ATLASSERT( iElement < (size_t)m_nSize );
		return( m_aT[iElement] );
	}

};

#endif // (_ATL_VER < 0x0700)

// Member variables
protected:
	int m_iCurSel;
	int m_iHotItem;
	CTCSETTINGS m_settings;
	CAtlArray< TItem* > m_Items;
	CFont m_font;
	CFont m_fontSel;
	CImageList m_imageList;
	CToolTipCtrl m_tooltip;

	RECT m_rcTabItemArea;
	RECT m_rcScrollLeft;
	RECT m_rcScrollRight;
	RECT m_rcCloseButton;

	int m_iDragItem;
	int m_iDragItemOriginal;
	POINT m_ptDragOrigin;
	HCURSOR m_hCursorMove;
	HCURSOR m_hCursorNoDrop;

	int m_iScrollOffset;

	// Flags, internal state, etc.
	//
	//   3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
	//   1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
	//  +-------+-------+-------+-------+---+-----------+---------------+
	//  |  FUT  |  MO   |  MD   |  HT   |SR |    SD     |     FLAGS     |
	//  +-------+-------+-------+-------+---+-----------+---------------+
	//
	//  FLAGS - boolean flags
	//  SD - Scroll delta.  The number of pixels to move in a single scroll.
	//       Valid values are 0-63 (the value is bit shifted to/from position).
	//  SR - Scroll repeat speed.  Valid values are no-repeat,
	//       slow repeat, normal repeat and fast repeat
	//  HT - Current hot tracked item (if its a tab, then m_iHotItem is the hot tab item) 
	//  MD - Item under mouse when mouse button down message was sent
	//       but before mouse button up message is sent
	//  MO - Item current under mouse cursor
	//  FUT - Not used at this time, but reserved for the future.
	DWORD m_dwState;

	enum StateBits
	{
		// Flags
		// bits                   = 0x000000ff
		ectcMouseInWindow         = 0x00000001,
		ectcOverflowLeft          = 0x00000002,
		ectcOverflowRight         = 0x00000004,
		//ectcOverflowBottom        = 0x00000002,  // alias for vertical mode
		//ectcOverflowTop           = 0x00000004,  // alias for vertical mode
		ectcEnableRedraw          = 0x00000008,
		ectcDraggingItem          = 0x00000010,
		//ectcFlag20                = 0x00000020,
		//ectcFlag40                = 0x00000040,
		//ectcFlag80                = 0x00000080,

		// Scroll
		// bits                   = 0x0000ff00
		ectcScrollDeltaMask       = 0x00003f00,    //0011 1111
		ectcScrollDeltaShift      = 8,

		// We have to publicly expose these:
		ectcScrollRepeat          = 0x0000c000,    //1100 0000
		//ectcScrollRepeat_None     = 0x00000000,
		//ectcScrollRepeat_Slow     = 0x00004000,    //0100 0000
		//ectcScrollRepeat_Normal   = 0x00008000,    //1000 0000
		//ectcScrollRepeat_Fast     = 0x0000c000,    //1100 0000

		// Hot Tracking
		// bits                   = 0x000f0000
		ectcHotTrack              = 0x000f0000,
		ectcHotTrack_CloseButton  = 0x00010000,
		ectcHotTrack_ScrollRight  = 0x00020000,
		ectcHotTrack_ScrollLeft   = 0x00030000,
		ectcHotTrack_TabItem      = 0x00040000,

		// Mouse Down
		// bits                    = 0x00f00000
		ectcMouseDown              = 0x00f00000,
		ectcMouseDownL_CloseButton = 0x00100000,
		ectcMouseDownL_ScrollRight = 0x00200000,
		ectcMouseDownL_ScrollLeft  = 0x00300000,
		ectcMouseDownL_TabItem     = 0x00400000,

		ectcMouseDownR_CloseButton = 0x00900000,
		ectcMouseDownR_ScrollRight = 0x00a00000,
		ectcMouseDownR_ScrollLeft  = 0x00b00000,
		ectcMouseDownR_TabItem     = 0x00c00000,

		// Mouse Over
		// bits                   = 0x0f000000
		ectcMouseOver             = 0x0f000000,
		ectcMouseOver_CloseButton = 0x01000000,
		ectcMouseOver_ScrollRight = 0x02000000,
		ectcMouseOver_ScrollLeft  = 0x03000000,
		ectcMouseOver_TabItem     = 0x04000000,
	};

	enum ButtonToolTipIDs
	{
		ectcToolTip_Close         = 0xFFFFFFF0,
		ectcToolTip_ScrollRight   = 0xFFFFFFF1,
		ectcToolTip_ScrollLeft    = 0xFFFFFFF2,
	};

	enum TimerIDs
	{
		ectcTimer_ScrollLeft      = 0x00000010,
		ectcTimer_ScrollRight     = 0x00000020,
	};

// Public enumerations
public:
	enum ScrollRepeat
	{
		ectcScrollRepeat_None     = 0x00000000,
		ectcScrollRepeat_Slow     = 0x00004000,
		ectcScrollRepeat_Normal   = 0x00008000,
		ectcScrollRepeat_Fast     = 0x0000c000,
	};

// Constructors
public:
	CCustomTabCtrl() :
		m_iCurSel(-1),
		m_iHotItem(-1),
		m_dwState(0),
		m_iDragItem(-1),
		m_iDragItemOriginal(-1),
		m_hCursorMove(NULL),
		m_hCursorNoDrop(NULL),
		m_iScrollOffset(0)
	{
		::ZeroMemory(&m_settings, sizeof(CTCSETTINGS));
		::ZeroMemory(&m_ptDragOrigin, sizeof(POINT));

		::SetRectEmpty(&m_rcTabItemArea);
		::SetRectEmpty(&m_rcCloseButton);
		::SetRectEmpty(&m_rcScrollLeft);
		::SetRectEmpty(&m_rcScrollRight);

		m_dwState |=  ((40 << ectcScrollDeltaShift) & ectcScrollDeltaMask);
		m_dwState |=  ectcScrollRepeat_Normal;

		m_dwState |= ectcEnableRedraw;
	}

// Implementation
protected:

	void InitializeTooltips(void)
	{
		ATLASSERT(!m_tooltip.IsWindow());
		if(!m_tooltip.IsWindow())
		{
			// Be sure InitCommonControlsEx is called before this,
			//  with one of the flags that includes the tooltip control
			m_tooltip.Create(m_hWnd, NULL, NULL, WS_POPUP | TTS_NOPREFIX | TTS_ALWAYSTIP /* | TTS_BALLOON */, WS_EX_TOOLWINDOW);
			if(m_tooltip.IsWindow())
			{
				m_tooltip.SetWindowPos(HWND_TOPMOST, 0, 0, 0, 0,
					 SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE);

				m_tooltip.SetDelayTime(TTDT_INITIAL, ::GetDoubleClickTime());
				m_tooltip.SetDelayTime(TTDT_AUTOPOP, ::GetDoubleClickTime() * 20);
				m_tooltip.SetDelayTime(TTDT_RESHOW, ::GetDoubleClickTime() / 5);
			}
		}
	}

	void ActivateTooltips(BOOL bActivate = TRUE)
	{
		ATLASSERT(m_tooltip.IsWindow());
		if(m_tooltip.IsWindow())
		{
			m_tooltip.Activate(bActivate);
		}
	}

	void ClearCurrentHotTracking(bool bRedrawEffectedArea = true)
	{
		switch(m_dwState & ectcHotTrack)
		{

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产一区二区三区免费看| 亚洲黄色性网站| 91国内精品野花午夜精品| 国产精品一区免费视频| 久久久www免费人成精品| 国产精品国产自产拍在线| 日韩欧美一二区| 久久综合九色综合欧美亚洲| 日韩一区二区三区视频在线| 欧美另类高清zo欧美| 日韩欧美一二区| 一区二区三区在线播| 日韩电影在线免费看| 国产成人av电影在线| 色综合久久久久久久久久久| 欧美日韩在线电影| 国产亚洲一二三区| 一区二区理论电影在线观看| 久久精品国产99国产| 99国产精品久久久久| 日韩欧美一级二级三级| 国产精品996| 6080yy午夜一二三区久久| 欧美激情一区二区| 久国产精品韩国三级视频| 欧美色电影在线| 亚洲精品福利视频网站| 美女精品一区二区| 欧美日韩精品一区二区三区 | 91黄色激情网站| 久久精品视频一区二区| 色婷婷国产精品久久包臀| 日本一区二区三区电影| 狠狠色狠狠色合久久伊人| 在线成人免费视频| 亚洲色图.com| 国产午夜亚洲精品不卡| 国产午夜精品美女毛片视频| 国产一区二区导航在线播放| 亚洲精品一区二区三区四区高清 | 色婷婷激情一区二区三区| 国产精品的网站| 欧美中文一区二区三区| 亚洲一区二区五区| 91精品久久久久久久久99蜜臂| 亚洲一区av在线| 精品欧美一区二区久久| 国产精品亚洲а∨天堂免在线| 中文字幕不卡在线观看| 成人性生交大片免费看中文| 一区二区三区在线视频观看| 欧美精品自拍偷拍| 一区二区三区四区五区视频在线观看| 亚洲香肠在线观看| www久久精品| 欧美乱妇一区二区三区不卡视频| 日韩国产欧美在线视频| 国产情人综合久久777777| 欧美日韩国产中文| 国产乱码精品一区二区三| 日韩国产成人精品| 亚洲女与黑人做爰| 久久久久久久久蜜桃| 日韩亚洲欧美高清| 欧美日韩国产成人在线91 | 亚洲人成影院在线观看| 欧美成人官网二区| 91麻豆精品国产91久久久资源速度| 国产大陆精品国产| 亚洲女女做受ⅹxx高潮| 91精品国产色综合久久不卡电影| 99久久99久久精品国产片果冻 | 国产精品77777竹菊影视小说| 一区二区高清视频在线观看| 亚洲乱码精品一二三四区日韩在线| 884aa四虎影成人精品一区| 欧美三级视频在线| 91精品国产综合久久久久久| 91精品国产综合久久久久久漫画| 欧美视频一区二区三区在线观看| 一道本成人在线| 欧美久久久影院| 久久精品免视看| 亚洲欧美日韩系列| 亚洲午夜免费电影| 麻豆极品一区二区三区| 欧美一区二区播放| 久久久亚洲精品一区二区三区| 久久这里只有精品6| 亚洲精品乱码久久久久久| 图片区小说区区亚洲影院| 国产成人av电影在线观看| 欧美日韩精品一二三区| 日韩精品一区二区三区视频播放 | 国产色综合一区| 午夜视频在线观看一区二区三区| 激情综合色播激情啊| 成人午夜又粗又硬又大| 日韩亚洲国产中文字幕欧美| 成人精品视频网站| 欧美视频精品在线| 亚洲人精品一区| 国产高清一区日本| 2023国产精华国产精品| 视频在线观看一区| 在线欧美日韩国产| 亚洲欧洲美洲综合色网| 国产精品一区二区在线播放| 日韩一级大片在线观看| 亚洲一卡二卡三卡四卡无卡久久| 成人高清视频在线观看| 国产精品久久久久一区| 国产成人啪午夜精品网站男同| 91精品黄色片免费大全| 午夜私人影院久久久久| 欧美电影影音先锋| 免费看欧美女人艹b| 久久久久久毛片| 一本色道久久综合亚洲91| 精品sm在线观看| 一区二区三区免费看视频| 91国产精品成人| 久久99国产精品久久99果冻传媒| 欧美一区二区日韩一区二区| 国产精品99久| 亚洲成av人片在线观看无码| 日韩一区二区不卡| 成人精品鲁一区一区二区| 一区二区三区自拍| 久久嫩草精品久久久精品一| 成人激情黄色小说| 国内外成人在线视频| 亚洲精品一卡二卡| 久久久国产综合精品女国产盗摄| 欧美妇女性影城| 成人免费va视频| 精油按摩中文字幕久久| 日韩毛片在线免费观看| 欧美精品一区二区三区蜜臀 | 日韩精品影音先锋| 成人av资源在线观看| 视频一区欧美日韩| 亚洲制服欧美中文字幕中文字幕| 国产精品人成在线观看免费| 91.com视频| 欧美一区二区三区在线观看| 成人动漫一区二区三区| 国产99久久久国产精品潘金| 午夜av一区二区三区| 视频在线观看一区二区三区| 亚洲国产精品av| 精品国精品国产尤物美女| 精品国产区一区| 精品国产精品一区二区夜夜嗨| 欧美成人一区二区三区在线观看| 欧美色图天堂网| 欧美精品在欧美一区二区少妇| 色av综合在线| 在线播放/欧美激情| 欧美精选午夜久久久乱码6080| 久久精品噜噜噜成人88aⅴ| 亚洲精品国产一区二区三区四区在线 | 欧美激情综合五月色丁香小说| 国产性做久久久久久| 亚洲小说欧美激情另类| 久久精品久久综合| 国产福利不卡视频| 欧美少妇一区二区| 亚洲欧美综合色| 奇米精品一区二区三区四区| 国产在线不卡一卡二卡三卡四卡| 在线观看av一区| 欧美精品欧美精品系列| 日韩一区在线播放| 国产精品亚洲人在线观看| 精品视频在线免费观看| 欧美mv日韩mv国产| 亚洲黄一区二区三区| 国产黄色精品网站| 337p粉嫩大胆色噜噜噜噜亚洲| 一区二区三区精品在线观看| 麻豆久久久久久久| 亚洲国产精品久久人人爱蜜臀| 国产在线日韩欧美| 欧美福利电影网| 五月天视频一区| 欧美日韩成人一区二区| 亚洲国产精品一区二区www| 在线免费av一区| 亚洲一区二区三区小说| 欧美色精品在线视频| 国产日韩欧美一区二区三区乱码| 国模少妇一区二区三区| 亚洲精品一区二区精华| 国产高清精品久久久久| 亚洲色图欧洲色图| 91精品国产全国免费观看| 激情久久五月天| 中文字幕一区二区三| 在线观看精品一区|