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

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

?? flyingtabs.h

?? 一款最完整的工業組態軟源代碼
?? H
字號:
// Copyright (c) 2002
// Sergey Klimov (kidd@ukr.net)

#ifndef __WTL_DW__FLYING_TABS_H__
#define __WTL_DW__FLYING_TABS_H__

#pragma once

#include <cassert>
#include <vector>
#include <queue>
#include <algorithm>
#include <functional>

#include "DDTracker.h"

//#include <atlgdix.h>
#ifndef __ATLGDIX_H__
	#error FlyingTabs.h requires atlgdix.h to be included first
#endif

// NOTE: See CustomTabCtrl.h and DotNetTabCtrl.h for copyright information.
// Please download the latest versions of these files from from The Codeproject article
// "Custom Tab Controls, Tabbed Frame and Tabbed MDI" by Daniel Bowen (dbowen@es.com)
// http://www.codeproject.com/wtl/TabbingFramework.asp
//#include <CustomTabCtrl.h>
//#include <DotNetTabCtrl.h>
#ifndef __CUSTOMTABCTRL_H__
	#error FlyingTabs.h requires CustomTabCtrl.h to be included first
#endif
#ifndef __DOTNET_TABCTRL_H__
	#error FlyingTabs.h requires DotNetTabCtrl.h to be included first
#endif

namespace dockwins{

#define CTCN_TABLEAVCTRL CTCN_LAST-1

#ifndef CTCS_VERTICAL
#define CTCS_VERTICAL TCS_VERTICAL
#endif

class CFlyingTabCtrl :
	public CDotNetTabCtrlImpl<CFlyingTabCtrl, CTabViewTabItem>
{
	typedef CDotNetTabCtrlImpl<CFlyingTabCtrl, CTabViewTabItem>	baseClass;
	typedef CFlyingTabCtrl										thisClass;
protected:
	class CTabMoveTracker : public CDDTrackerBaseT<CTabMoveTracker>
	{
		typedef thisClass CTabCtrl;
	public:
		CTabMoveTracker(CTabCtrl& ctrlTab,int index)
			:m_ctrlTab(ctrlTab),m_curItem(index),m_prevItem(-1)
		{
			DWORD style = ctrlTab.GetWindowLong(GWL_STYLE);
			m_bHorizontal=(style&CTCS_VERTICAL)==0;
		}
		bool IsHorisontal() const
		{
			return m_bHorizontal;
		}
		void OnMove(long x, long y)
		{
			int pos = IsHorisontal() ? x : y;
			CTCHITTESTINFO tchti = { 0 };
			tchti.pt.x = x;
			tchti.pt.y = y;
			int index=m_ctrlTab.HitTest(&tchti);
			if(index!=-1)
			{
				if(( index!=m_curItem)
					&&
					 !( ( index==m_prevItem)
						&& ( (pos-m_prevPos)*(m_prevItem-m_curItem) <=0) ) )
				{
					m_ctrlTab.SwapItemPositions(m_curItem,index, false, false);
//					m_ctrlTab.MoveItem(m_curItem,index);
					m_curItem=index;
					m_ctrlTab.SetCurSel(m_curItem);
					m_prevItem=m_ctrlTab.HitTest(&tchti);
				}
			}
			else
				::ReleaseCapture();
/*
			{
				NMHDR nmh;
				nmh.hwndFrom = m_ctrlTab.m_hWnd;
				nmh.idFrom=m_ctrlTab.GetDlgCtrlID();
				nmh.code=CTCN_TABLEAVCTRL;
				if(!::SendMessage(m_ctrlTab.GetParent(), WM_NOTIFY, nmh.idFrom, (LPARAM)&nmh))
																				::ReleaseCapture();
			}
*/
			m_prevPos = pos;
		}
	protected:
		CTabCtrl&	m_ctrlTab;
		int			m_curItem;
		int			m_prevItem;
		int			m_prevPos;
		bool		m_bHorizontal;
	};
protected:
    void UpdateTabAreaHeight()
    {
        // Take into consideration system metrics when determining
        //  the height of the tab area
        const int nNominalHeight = 24;
        const int nNominalFontLogicalUnits = 11;        // 8 point Tahoma with 96 DPI

        // Use the actual font of the tab control
        assert(IsWindow());
        HFONT hFont = GetFont();
        if(hFont != NULL)
        {
            CDC dc = GetDC();
            CFontHandle hFontOld = dc.SelectFont(hFont);
            TEXTMETRIC tm = {0};
            dc.GetTextMetrics(&tm);
            dc.SelectFont(hFontOld);
			m_tabBarHeight = (BYTE)(nNominalHeight + (nNominalHeight * ((double)tm.tmAscent / (double)nNominalFontLogicalUnits) - nNominalHeight) / 2);
        }
		else
			m_tabBarHeight = 24;
    }
	void AdjustTabRect(LPRECT pRc) const
	{
		int tabHeight = m_tabBarHeight ;
		DWORD style = GetWindowLong(GWL_STYLE);
		if(style&CTCS_VERTICAL)
		{
			if(style&CTCS_BOTTOM)
				pRc->left=pRc->right - tabHeight;
			else
				pRc->right=pRc->left + tabHeight;
		}
		else
		{
			if(style&CTCS_BOTTOM)
				pRc->top=pRc->bottom - tabHeight;
			else
				pRc->bottom=pRc->top + tabHeight;
		}
	}
public:
	bool GetTabsRect(LPRECT pRc) const
	{
		return (GetClientRect(pRc)!=FALSE);
	}
/*
    int InsertItem(int nItem, LPCTSTR sText = NULL, int nImage = -1, HWND hWndTabView = NULL, LPCTSTR sToolTip = NULL, bool bSelectItem = false)
    {
		return baseClass::InsertItem(nItem, sText, nImage, hWndTabView, sToolTip, bSelectItem);
	}
	int InsertItem(int nItem, CTabViewTabItem* pItem, bool bSelectItem = false)
	{
		return baseClass::InsertItem(nItem, pItem, bSelectItem);
	}
*/
	int InsertItem(int index, LPCTSTR ptxt = NULL, int image = -1, DWORD param=0)
	{
		CTabViewTabItem* pItem = baseClass::CreateNewItem();
		if(pItem)
		{
			pItem->SetText(ptxt);
			pItem->SetImageIndex(image);
			pItem->SetTabView(reinterpret_cast<HWND>(param));
			pItem->SetToolTip(ptxt);

			return baseClass::InsertItem(index,pItem,true);
		}
		return -1;
	}
	DWORD GetItemData(int index) const
	{
		return reinterpret_cast<DWORD>(GetItem(index)->GetTabView());
	}

	void DeleteItem(CTabViewTabItem* pItem)
	{
		baseClass::DeleteItem(pItem);
	}
	BOOL DeleteItem(size_t nItem, bool bUpdateSelection = true, bool bNotify = true)
	{
		return baseClass::DeleteItem(nItem, bUpdateSelection, bNotify);
	}

	BOOL DeleteItem(int index,bool bUpdateSelection = true)
	{
		return DeleteItem(index, bUpdateSelection , false);
	}
    BOOL SetWindowPos(HWND hWndInsertAfter, LPCRECT lpRect, UINT nFlags)
    {
		CRect rc(lpRect);
		AdjustTabRect(rc);
		BOOL bRes=baseClass::SetWindowPos(hWndInsertAfter,&rc,nFlags);
		return bRes;
	}

	BOOL AdjustRect( BOOL bLarger, LPRECT pRc) const
	{
		int tabHeight = bLarger ? -m_tabBarHeight : m_tabBarHeight ;
		DWORD style = GetWindowLong(GWL_STYLE);
		if(style&CTCS_VERTICAL)
		{
			if(style&CTCS_BOTTOM)
				pRc->right-=tabHeight;
			else
				pRc->left+=tabHeight;
		}
		else
		{
			if(style&CTCS_BOTTOM)
				pRc->bottom-=tabHeight;
			else
				pRc->top+=tabHeight;

		}
		return TRUE;
	}

	DECLARE_WND_CLASS(_T("CFlyingTabCtrl"))
	BEGIN_MSG_MAP(thisClass)
		MESSAGE_HANDLER(WM_CREATE, OnCreate)
		MESSAGE_HANDLER(WM_SETFONT, OnSetFont)
		MESSAGE_HANDLER(WM_LBUTTONDOWN, OnLButtonDown)
		MESSAGE_HANDLER(WM_LBUTTONDBLCLK, OnLButtonDblClk)
		CHAIN_MSG_MAP(baseClass)
	END_MSG_MAP()

	LRESULT OnCreate(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& bHandled)
	{
		UpdateTabAreaHeight();
		bHandled=FALSE;
		return NULL;
	}

	LRESULT OnSetFont(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& bHandled)
	{
		UpdateTabAreaHeight();
		bHandled=FALSE;
		return NULL;
	}

	LRESULT OnLButtonDown(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
	{
		LRESULT lRes=baseClass::OnLButtonDown(uMsg,wParam,lParam,bHandled);
		bHandled=TRUE;
		CTCHITTESTINFO tchti = { 0 };
		tchti.pt.x = GET_X_LPARAM(lParam);
		tchti.pt.y = GET_Y_LPARAM(lParam);
		int index=HitTest(&tchti);
		if(index!=-1)
		{
			ClientToScreen(&tchti.pt);
			if(DragDetect(m_hWnd,tchti.pt))
			{
				CTabMoveTracker tracker(*this,index);
				if(TrackDragAndDrop(tracker,m_hWnd))
				{
					CTCHITTESTINFO tchti = { 0 };
					::GetCursorPos(&tchti.pt);
					ScreenToClient(&tchti.pt);
					int index=HitTest(&tchti);
					if(index==-1)
					{
						MSG msg;
						while(PeekMessage(&msg, NULL, NULL, NULL, PM_REMOVE))
							DispatchMessage(&msg);
						NMHDR nmh;
						nmh.hwndFrom = m_hWnd;
						nmh.idFrom=GetDlgCtrlID();
						nmh.code=CTCN_TABLEAVCTRL;
						::SendMessage(GetParent(), WM_NOTIFY, nmh.idFrom, (LPARAM)&nmh);
					}
				}
			}
		}
		return lRes;
	}

	LRESULT OnLButtonDblClk(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM lParam, BOOL& /*bHandled*/)
	{
		CTCHITTESTINFO tchti = { 0 };
		tchti.pt.x = GET_X_LPARAM(lParam);
		tchti.pt.y = GET_Y_LPARAM(lParam);
		int index=HitTest(&tchti);
		if(index!=-1)
		{
			NMHDR nmh;
			nmh.hwndFrom = m_hWnd;
			nmh.idFrom=GetDlgCtrlID();
			nmh.code=NM_DBLCLK;
			::SendMessage(GetParent(), WM_NOTIFY, nmh.idFrom, (LPARAM)&nmh);
		}
		return 0;
	}
protected:
	int m_tabBarHeight;
};
}//namespace dockwins
#endif // __WTL_DW__FLYING_TABS_H__

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩精品一区二区三区四区视频| 欧美日本免费一区二区三区| 日韩激情在线观看| 自拍偷拍亚洲激情| 成人国产精品免费| 日韩经典一区二区| 亚洲免费av网站| 国产嫩草影院久久久久| 欧美日韩国产不卡| 91麻豆文化传媒在线观看| 伦理电影国产精品| 亚洲成人av福利| 亚洲欧美在线视频| 久久久精品日韩欧美| 91精品国产麻豆| 欧美三级欧美一级| 色婷婷综合久久久| 国产高清精品网站| 老司机精品视频导航| 亚洲成人激情社区| 亚洲日本一区二区| 中日韩免费视频中文字幕| 日韩免费性生活视频播放| 欧美三级韩国三级日本三斤| 成人开心网精品视频| 国产资源精品在线观看| 另类小说欧美激情| 奇米影视一区二区三区| 视频一区二区国产| 亚洲国产精品一区二区www| 亚洲免费视频成人| 亚洲卡通欧美制服中文| 国产精品嫩草久久久久| 国产午夜精品美女毛片视频| 久久你懂得1024| 欧美岛国在线观看| 精品国产一区a| 精品卡一卡二卡三卡四在线| 欧美成人一区二区三区片免费| 91精品国产综合久久精品性色| 欧美亚洲日本国产| 日本欧美一区二区三区乱码| 日韩精品一二区| 欧美日韩中文精品| 日韩综合小视频| 日韩中文字幕av电影| 亚洲成人黄色小说| 日本欧美一区二区三区乱码| 丝瓜av网站精品一区二区| 天天色 色综合| 日日骚欧美日韩| 免费久久99精品国产| 美女视频网站黄色亚洲| 久久精品国产99久久6| 韩国三级在线一区| 国产乱码精品一区二区三区忘忧草| 国产一区在线精品| 成人av先锋影音| 色激情天天射综合网| 欧美无乱码久久久免费午夜一区 | 精品电影一区二区| 久久伊99综合婷婷久久伊| 久久久综合视频| 国产精品久久久久影院老司| 亚洲蜜臀av乱码久久精品| 亚州成人在线电影| 国产一区 二区| 99久久伊人精品| 精品视频在线视频| 欧美精品一区二区三区视频| 中文字幕国产一区| 亚洲一区中文在线| 久久国产综合精品| 成人免费看片app下载| 欧美性猛片xxxx免费看久爱| 日韩欧美中文字幕精品| 欧美高清在线精品一区| 亚洲成人精品在线观看| 国产精品一区二区视频| 色综合天天综合在线视频| 7777精品伊人久久久大香线蕉最新版 | 欧美国产日韩亚洲一区| 一区二区三区在线免费观看 | 蜜乳av一区二区三区| 成人综合日日夜夜| 欧美性猛交xxxx黑人交| 久久精品人人做| 亚洲欧美日韩国产中文在线| 捆绑调教一区二区三区| 不卡的电影网站| 91精品国产欧美一区二区| 综合久久综合久久| 精品影院一区二区久久久| 91免费视频网| 26uuu国产电影一区二区| 一区二区免费在线播放| 国内精品久久久久影院色| 在线看日本不卡| 久久九九99视频| 视频一区视频二区在线观看| 成年人国产精品| 精品久久久久久久久久久久久久久久久| 国产精品久久久久久久久免费桃花| 日日欢夜夜爽一区| 色八戒一区二区三区| 国产亚洲精品中文字幕| 蜜桃精品在线观看| 欧美三级乱人伦电影| 亚洲色图清纯唯美| 福利电影一区二区三区| 欧美成人一级视频| 图片区小说区区亚洲影院| 99麻豆久久久国产精品免费优播| 日韩欧美电影一区| 午夜不卡av免费| 91美女在线看| 最近中文字幕一区二区三区| 国产乱码精品1区2区3区| 日韩欧美黄色影院| 天涯成人国产亚洲精品一区av| 91玉足脚交白嫩脚丫在线播放| 欧美高清在线视频| 国产精品一区二区果冻传媒| 日韩一级二级三级| 日韩黄色小视频| 在线成人小视频| 亚洲一区二区三区四区在线观看| 99精品久久免费看蜜臀剧情介绍| 久久久久久9999| 国内精品久久久久影院色| 欧美mv日韩mv国产网站| 日韩av二区在线播放| 精品视频在线免费看| 亚洲午夜精品网| 欧美日韩日日摸| 亚洲a一区二区| 欧美老肥妇做.爰bbww视频| 亚洲影院理伦片| 欧美日本一区二区在线观看| 亚洲综合一区二区三区| 在线观看日韩一区| 亚洲第一av色| 在线成人av影院| 久久激情综合网| 久久综合久久综合九色| 韩国午夜理伦三级不卡影院| 久久久亚洲高清| 成人性生交大片| 一区在线中文字幕| 色婷婷亚洲综合| 午夜精品久久久久久久久久久 | 懂色av一区二区三区蜜臀| 国产日韩在线不卡| av动漫一区二区| 亚洲综合小说图片| 日韩欧美综合在线| 国产剧情一区在线| 亚洲欧洲国产专区| 欧美综合视频在线观看| 日本美女视频一区二区| 国产亚洲一区二区三区在线观看| 成人免费福利片| 亚洲黄色av一区| 91精品国产乱| 国产成人免费在线| 亚洲一区二区精品久久av| 91精品国产综合久久精品麻豆| 国产精品一区在线观看你懂的| 最新热久久免费视频| 欧美日韩日日骚| 国产精品自拍网站| 亚洲欧美成人一区二区三区| 777xxx欧美| 成人av在线一区二区| 亚洲国产精品自拍| 久久久久久久性| 91黄色免费版| 国产精品中文字幕欧美| 亚洲免费av观看| 欧美精品一区在线观看| 91日韩一区二区三区| 久久草av在线| 亚洲欧美视频在线观看视频| 日韩欧美自拍偷拍| 色偷偷久久一区二区三区| 精品在线视频一区| 亚洲一二三四在线| 国产亚洲精品福利| 91精品中文字幕一区二区三区| 国产91在线观看丝袜| 亚洲成人av福利| 国产欧美日韩激情| 欧美一级黄色录像| 色婷婷综合久久久久中文 | 色综合久久中文字幕综合网| 奇米色777欧美一区二区| 亚洲色图制服丝袜| 久久久精品免费网站| 欧美人狂配大交3d怪物一区| 成人av一区二区三区|