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

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

?? tabbedframe.h

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

		TTabCtrl::TItem* pItem = m_TabCtrl.CreateNewItem();
		if(pItem)
		{
			pItem->SetText(sTabText);
			pItem->SetImageIndex(nImageIndex);
			// NOTE: You must use a tab item class derived off of CCustomTabCtrl
			//  that tracks a view HWND, such as CTabViewTabItem
			pItem->SetTabView(hWnd);

			// The tab control takes ownership of the new item
			return m_TabCtrl.InsertItem(m_TabCtrl.GetItemCount(), pItem);
		}

		return -1;
	}

	int DisplayTab(HWND hWnd, BOOL bAddIfNotFound = TRUE, BOOL bUseIcon = FALSE)
	{
		int nTab = -1;
		if(hWnd)
		{
			size_t nOldCount = m_TabCtrl.GetItemCount();

			TTabCtrl::TItem tcItem;
			tcItem.SetTabView(hWnd);

			nTab = m_TabCtrl.FindItem(&tcItem, CTFI_TABVIEW);
			if((bAddIfNotFound == TRUE) && (nTab < 0))
			{
				// The corresponding tab doesn't exist yet. Create it.

				LPTSTR sWindowText = NULL;
				size_t cchWindowText = ::GetWindowTextLength(hWnd);
				if(cchWindowText > 0)
				{
					sWindowText = new TCHAR[cchWindowText + 1];
					if(sWindowText != NULL)
					{
						::GetWindowText(hWnd, sWindowText, cchWindowText+1);

						HICON hIcon = NULL;
						if(bUseIcon)
						{
							if(hIcon == NULL)
							{
								hIcon = (HICON) ::SendMessage(hWnd, WM_GETICON, ICON_SMALL, 0);
							}
							if(hIcon == NULL)
							{
								hIcon = (HICON) LongToHandle(::GetClassLong(hWnd, GCL_HICONSM));
							}
							if(hIcon == NULL)
							{
								hIcon = (HICON) ::SendMessage(hWnd, WM_GETICON, ICON_BIG, 0);
							}
							if(hIcon == NULL)
							{
								hIcon = (HICON) LongToHandle(::GetClassLong(hWnd, GCL_HICON));
							}
						}

						if(hIcon == NULL)
						{
							nTab = AddTab(hWnd, sWindowText);
						}
						else
						{
							nTab = AddTabWithIcon(hWnd, sWindowText, hIcon);
						}

						delete [] sWindowText;
					}
				}

				if(nTab < 0)
				{
					// We had trouble getting the window text
					// TODO: What should we put for the text and/or icon
					//  in this case?
					ATLASSERT(0 && "Adding a tab where no name was provided");
					nTab = AddTab(hWnd, _T("Untitled"));
				}
			}

			if(nTab >= 0)
			{
				m_TabCtrl.SetCurSel(nTab);

				if((nOldCount == 0) && (m_TabCtrl.GetItemCount() == 1))
				{
					T* pT = static_cast<T*>(this);
					pT->OnAddFirstTab();
				}
			}

		}

		return nTab;
	}

	BOOL RemoveTab(HWND hWnd)
	{
		BOOL bSuccess = FALSE;

		TTabCtrl::TItem tcItem;
		tcItem.SetTabView(hWnd);

		int nTab = m_TabCtrl.FindItem(&tcItem, CTFI_TABVIEW);
		if(nTab >= 0)
		{
			bSuccess = m_TabCtrl.DeleteItem(nTab);

			if(m_TabCtrl.GetItemCount() < 1)
			{
				T* pT = static_cast<T*>(this);
				pT->OnRemoveLastTab();
			}
		}

		return bSuccess;
	}

	BOOL UpdateTabText(HWND hWnd, LPCTSTR sText = NULL)
	{
		BOOL bSuccess = FALSE;

		TTabCtrl::TItem tcItem;
		tcItem.SetTabView(hWnd);

		int nTab = m_TabCtrl.FindItem(&tcItem, CTFI_TABVIEW);
		if(nTab >= 0)
		{
			TTabCtrl::TItem* pItem = m_TabCtrl.GetItem(nTab);
			CString sCurrentTabText = pItem->GetText();

			if(sText != NULL)
			{
				if(sCurrentTabText != sText)
				{
					bSuccess = pItem->SetText(sText);
					m_TabCtrl.UpdateLayout();
					m_TabCtrl.Invalidate();
				}
			}
			else
			{
				LPTSTR sWindowText = NULL;
				size_t cchWindowText = ::GetWindowTextLength(hWnd);
				if(cchWindowText > 0)
				{
					sWindowText = new TCHAR[cchWindowText + 1];
					if(sWindowText != NULL)
					{
						::GetWindowText(hWnd, sWindowText, cchWindowText+1);

						if(sWindowText != NULL &&
							sCurrentTabText != sWindowText)
						{
							bSuccess = pItem->SetText(sWindowText);
							m_TabCtrl.UpdateLayout();
							m_TabCtrl.Invalidate();
						}

						delete [] sWindowText;
					}
				}
			}
		}

		return bSuccess;
	}

	BOOL UpdateTabImage(HWND hWnd, int nImageIndex = -1)
	{
		BOOL bSuccess = FALSE;

		TTabCtrl::TItem tcItem;
		tcItem.SetTabView(hWnd);

		int nTab = m_TabCtrl.FindItem(&tcItem, CTFI_TABVIEW);
		if(nTab >= 0)
		{
			TTabCtrl::TItem* pItem = m_TabCtrl.GetItem(nTab);
			int nCurrentImageIndex = pItem->GetImageIndex();
			if(nCurrentImageIndex != nImageIndex)
			{
				bSuccess = pItem->SetImageIndex(nImageIndex);
				m_TabCtrl.UpdateLayout();
				m_TabCtrl.Invalidate();
			}
		}

		return bSuccess;
	}

	BOOL UpdateTabToolTip(HWND hWnd, LPCTSTR sToolTip = NULL)
	{
		BOOL bSuccess = FALSE;

		TTabCtrl::TItem tcItem;
		tcItem.SetTabView(hWnd);

		int nTab = m_TabCtrl.FindItem(&tcItem, CTFI_TABVIEW);
		if(nTab >= 0)
		{
			TTabCtrl::TItem* pItem = m_TabCtrl.GetItem(nTab);
			CString sCurrentToolTip = pItem->GetToolTip();
			if(sCurrentToolTip != sToolTip)
			{
				bSuccess = pItem->SetToolTip(sToolTip);
			}
		}

		return bSuccess;
	}

	BOOL HighlightTab(HWND hWnd, bool bHighlight = true)
	{
		BOOL bSuccess = FALSE;

		TTabCtrl::TItem tcItem;
		tcItem.SetTabView(hWnd);

		int nTab = m_TabCtrl.FindItem(&tcItem, CTFI_TABVIEW);
		if(nTab >= 0)
		{
			bSuccess = m_TabCtrl.HighlightItem((size_t)nTab, bHighlight);
		}

		return bSuccess;
	}

	BOOL UpdateTabCanClose(HWND hWnd, bool bCanClose = true)
	{
		BOOL bSuccess = FALSE;

		TTabCtrl::TItem tcItem;
		tcItem.SetTabView(hWnd);

		int nTab = m_TabCtrl.FindItem(&tcItem, CTFI_TABVIEW);
		if(nTab >= 0)
		{
			TTabCtrl::TItem* pItem = m_TabCtrl.GetItem(nTab);
			bool bCurrentCanClose = pItem->CanClose();
			if(bCurrentCanClose != bCanClose)
			{
				bSuccess = pItem->SetCanClose(bCanClose);
				m_TabCtrl.UpdateLayout();
				m_TabCtrl.Invalidate();
			}
		}

		return bSuccess;
	}
};

/////////////////////////////////////////////////////////////////////////////
//
// CTabbedFrameImpl
//
/////////////////////////////////////////////////////////////////////////////

#define CHAIN_ACTIVETABVIEW_COMMANDS() \
	if(uMsg == WM_COMMAND && m_hWndActive != NULL) \
		::SendMessage(m_hWndActive, uMsg, wParam, lParam);

#define CHAIN_ACTIVETABVIEW_CHILD_COMMANDS(tabClass) \
	if(uMsg == WM_COMMAND) \
	{ \
		HWND hWndChild = tabClass.GetActiveView(); \
		if(hWndChild != NULL) \
			::SendMessage(hWndChild, uMsg, wParam, lParam); \
	}

// Use this if forwarding to an ActiveX control.
#define CHAIN_ACTIVETABVIEW_CHILD_COMMANDS2(tabClass) \
	if(uMsg == WM_COMMAND) \
	{ \
		HWND hWndChild = tabClass.GetActiveView(); \
		if(hWndChild != NULL) \
			::SendMessage(hWndChild, uMsg, wParam, 0); \
	}

template <
	class T,
	class TTabCtrl = CDotNetTabCtrl<CTabViewTabItem>,
	class TBase = CFrameWindowImpl<T, CWindow, CFrameWinTraits> >
class CTabbedFrameImpl :
	public TBase,
	public CCustomTabOwnerImpl< CTabbedFrameImpl<T, TTabCtrl, TBase>, TTabCtrl>
{
protected:
	typedef CTabbedFrameImpl<T, TTabCtrl, TBase> thisClass;
	typedef TBase baseClass;
	typedef CCustomTabOwnerImpl< CTabbedFrameImpl<T, TTabCtrl, TBase>, TTabCtrl> customTabOwnerClass;

// Member variables
protected:
	bool m_bReflectNotifications, m_bForwardNotifications;
	DWORD m_nTabStyles;
	HWND m_hWndActive;

// Constructors
public:
	CTabbedFrameImpl(bool bReflectNotifications = false, bool bForwardNotifications = false) :
		m_bReflectNotifications(bReflectNotifications),
		m_bForwardNotifications(bForwardNotifications),
		m_nTabStyles(CTCS_BOTTOM | CTCS_TOOLTIPS),
		m_hWndActive(NULL)
	{
	}

// Methods
public:
	void SetReflectNotifications(bool bReflectNotifications = true)
	{
		m_bReflectNotifications = bReflectNotifications;
	}

	bool GetReflectNotifications(void) const
	{
		return m_bReflectNotifications;
	}

	void SetForwardNotifications(bool bForwardNotifications = true)
	{
		m_bForwardNotifications = bForwardNotifications;
	}

	bool GetForwardNotifications(void) const
	{
		return m_bForwardNotifications;
	}

	void SetTabStyles(DWORD nTabStyles)
	{
		m_nTabStyles = nTabStyles;
	}

	DWORD GetTabStyles(void) const
	{
		return m_nTabStyles;
	}

	HWND GetActiveView(void) const
	{
		return m_hWndActive;
	}

	virtual void OnFinalMessage(HWND /*hWnd*/)
	{
		// TODO: Have support both for "new"ing an
		//  instance of this class, or having
		//  a member variable of this class.
		//  Currently, we don't support deleting our
		//  instance because someone created us with "new"
		//delete this;
	}

// Message Handling
public:
	// The class that derives from this class should set an appropriate background brush
	DECLARE_FRAME_WND_CLASS_EX(_T("TabbedFrame"), 0, 0, COLOR_APPWORKSPACE)

	BEGIN_MSG_MAP(thisClass)
		MESSAGE_HANDLER(WM_CREATE, OnCreate)
		MESSAGE_HANDLER(WM_DESTROY, OnDestroy)
		MESSAGE_HANDLER(WM_SETTINGCHANGE, OnSettingChange)
		MESSAGE_HANDLER(WM_ERASEBKGND, OnEraseBackground)
		MESSAGE_HANDLER(WM_SETFOCUS, OnSetFocus)
		MESSAGE_HANDLER(WM_FORWARDMSG, OnForwardMsg)

		NOTIFY_CODE_HANDLER(NM_CLICK, OnClick)
		NOTIFY_CODE_HANDLER(CTCN_ACCEPTITEMDRAG, OnAcceptItemDrag)
		NOTIFY_CODE_HANDLER(CTCN_CANCELITEMDRAG, OnCancelItemDrag)
		NOTIFY_CODE_HANDLER(CTCN_DELETEITEM, OnDeleteItem)
		NOTIFY_CODE_HANDLER(CTCN_SELCHANGING, OnSelChanging)
		NOTIFY_CODE_HANDLER(CTCN_SELCHANGE, OnSelChange)

		CHAIN_MSG_MAP(baseClass)

		// If there are key messages that haven't been handled yet,
		// pass those along to the active child window
		if(uMsg >= WM_KEYFIRST && uMsg <= WM_KEYLAST)
		{
			if(m_hWndActive != NULL && ::IsWindow(m_hWndActive))
			{
				lResult = ::SendMessage(m_hWndActive, uMsg, wParam, lParam);

				return TRUE;
			}
		}

		CHAIN_ACTIVETABVIEW_COMMANDS()
		if(m_bReflectNotifications)
		{
			REFLECT_NOTIFICATIONS()
		}
		if(m_bForwardNotifications)
		{
			FORWARD_NOTIFICATIONS()
		}
	END_MSG_MAP()

	LRESULT OnCreate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
	{
		// "baseClass::OnCreate()"
		LRESULT lRet = DefWindowProc(uMsg, wParam, lParam);
		bHandled = TRUE;
		if(lRet == -1)
		{
			return -1;
		}

		// The derived C++ class should set the background brush for
		// the window class (DECLARE_FRAME_WND_CLASS_EX)
		//::SetClassLongPtr(m_hWnd, GCLP_HBRBACKGROUND, COLOR_APPWORKSPACE+1);

		this->CreateTabWindow(m_hWnd, rcDefault, m_nTabStyles);

		return 0;
	}

	LRESULT OnDestroy(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& bHandled)
	{
		DestroyTabWindow();

		// Say that we didn't handle it so that anyone else
		//  interested gets to handle the message
		bHandled = FALSE;
		return 0;
	}

	LRESULT OnSettingChange(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
	{
		// Be sure tab gets message before we recalculate the tab area height,
		//  so that it can adjust its font metrics first.

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产一区二区中文字幕| 国产a区久久久| 首页国产欧美日韩丝袜| 日韩中文字幕麻豆| 国产一区美女在线| 国产精品综合网| 日韩欧美电影一二三| 亚洲国产精品传媒在线观看| 亚洲裸体xxx| 激情综合色综合久久| 成人激情午夜影院| 欧美一区二区三区免费| 日韩欧美久久一区| 一区二区不卡在线播放 | 国产一区二区三区日韩| 91网站在线观看视频| 精品国产乱码久久久久久图片| 国产精品美女久久久久av爽李琼 | 国产不卡视频在线播放| 欧美日韩在线播放三区四区| 国产无一区二区| 奇米影视在线99精品| 色婷婷综合久久久| 精品乱码亚洲一区二区不卡| 国产精品毛片久久久久久| 天天色天天操综合| 91一区二区三区在线观看| 欧美一区二区免费| 亚洲精品视频在线观看免费| 亚洲午夜久久久久中文字幕久| 亚洲精品在线三区| 有码一区二区三区| 在线亚洲一区观看| 精品av久久707| 成人精品高清在线| 中文字幕第一区综合| 91亚洲国产成人精品一区二区三 | 麻豆成人91精品二区三区| 国产毛片精品国产一区二区三区| 国产成人免费在线| 日韩一区二区免费在线电影| 亚洲第一搞黄网站| 欧美主播一区二区三区| 亚洲欧洲综合另类| 色综合夜色一区| 亚洲欧美日韩国产成人精品影院 | 欧美美女一区二区在线观看| 一区二区三区中文字幕| av一区二区久久| 亚洲综合视频网| 日韩一区二区精品| 天天做天天摸天天爽国产一区| 欧美一区二区三区在线| 美美哒免费高清在线观看视频一区二区| 欧美一区二区三区小说| 久久国产精品色| 欧美r级电影在线观看| 成人国产一区二区三区精品| 中文字幕日韩精品一区 | 中文字幕国产一区| 91福利精品视频| 亚洲免费观看视频| 久久九九国产精品| 91偷拍与自偷拍精品| 亚洲高清久久久| 国产精品麻豆网站| 91捆绑美女网站| 免费日本视频一区| 成人欧美一区二区三区黑人麻豆 | 91网站在线观看视频| 1024精品合集| 精品处破学生在线二十三| 国产凹凸在线观看一区二区| 一区二区三区波多野结衣在线观看| 色偷偷成人一区二区三区91| 国产成人啪午夜精品网站男同| 亚洲成人精品一区| 亚洲福利电影网| 视频一区二区三区入口| 国产精品乱子久久久久| 69堂亚洲精品首页| 成人国产视频在线观看| 国产精品一区二区免费不卡| 久久国产剧场电影| 免费黄网站欧美| 亚洲va欧美va国产va天堂影院| 国产精品美女久久久久久久久久久 | 久久久久国产精品麻豆| 久久综合av免费| 久久久夜色精品亚洲| 欧美日韩和欧美的一区二区| 99久久国产综合色|国产精品| 国产成人亚洲综合a∨猫咪| 国产一区二区三区精品欧美日韩一区二区三区| 亚洲欧美偷拍卡通变态| 亚洲成人777| 久久久久久久久久电影| 国产成a人亚洲| 国产91精品一区二区麻豆网站 | 欧美日本一区二区三区四区| 岛国精品在线观看| 91亚洲国产成人精品一区二区三| 色综合视频一区二区三区高清| 99国产精品久久久久久久久久| 色偷偷久久一区二区三区| 国产精品一区二区黑丝| 97久久精品人人澡人人爽| 欧美日韩一区高清| 国产视频不卡一区| 亚洲国产一区二区视频| 一区二区三区四区高清精品免费观看 | 国产成人在线视频免费播放| 国产成人免费视频一区| 欧美日本在线一区| 久久精品一级爱片| 午夜私人影院久久久久| 国产成人免费av在线| 国产91精品入口| 欧美剧情片在线观看| 国产精品久久久一本精品| 日韩福利视频导航| 99精品在线观看视频| 欧美激情资源网| 国产精一品亚洲二区在线视频| 欧美人狂配大交3d怪物一区| 国产日韩欧美麻豆| 蜜桃在线一区二区三区| 欧美在线一二三| 亚洲视频一区二区在线| 国产乱码精品一区二区三区忘忧草| 欧美电影一区二区三区| 一区二区三区在线高清| 色综合一区二区| 国产精品久久二区二区| 国产精品一区二区不卡| 午夜在线电影亚洲一区| 精品亚洲成a人| 欧美酷刑日本凌虐凌虐| 一区二区国产视频| 欧美图片一区二区三区| 亚洲免费观看视频| 色综合久久99| 曰韩精品一区二区| 91精品国产高清一区二区三区 | 久久久91精品国产一区二区精品 | 欧美大片在线观看一区| 久久91精品久久久久久秒播| 日韩一级欧美一级| 国产69精品久久777的优势| 中文字幕在线一区免费| 日本高清不卡aⅴ免费网站| 亚洲福利视频一区| 久久久国产一区二区三区四区小说 | 日韩电影在线一区二区| 精品免费一区二区三区| 一本色道久久综合精品竹菊| 日韩精品色哟哟| 国产精品久久久久久福利一牛影视| 在线视频你懂得一区二区三区| 日韩成人一级大片| 一区二区日韩电影| 国产女人18毛片水真多成人如厕| 欧美三级中文字| 99国产精品久久久久| 国产一区亚洲一区| 视频一区欧美日韩| 一区二区三区日韩精品| 国产三级欧美三级日产三级99| 欧美日韩日日骚| 风间由美中文字幕在线看视频国产欧美| 亚洲欧美激情小说另类| 亚洲国产日韩一区二区| 免费观看日韩电影| 成人avav影音| 91麻豆精品91久久久久久清纯 | 亚洲精品中文字幕在线观看| 午夜精品成人在线| 大尺度一区二区| 91麻豆精品国产91久久久久久久久 | 色综合天天天天做夜夜夜夜做| 337p亚洲精品色噜噜狠狠| 91在线免费看| 色视频成人在线观看免| 欧美三级一区二区| 精品剧情v国产在线观看在线| 日韩一级大片在线| 国产清纯美女被跳蛋高潮一区二区久久w | 亚洲va欧美va人人爽| 精久久久久久久久久久| 成人av集中营| 91精品欧美久久久久久动漫| 2欧美一区二区三区在线观看视频| 亚洲精品一线二线三线无人区| 国产欧美一区二区精品久导航 | 色999日韩国产欧美一区二区| 欧美日韩aaa| 亚洲欧美另类久久久精品| 蜜臀av性久久久久蜜臀aⅴ流畅| 国产精品99久久久久久有的能看| 色综合久久久久综合体桃花网|