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

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

?? ftab.cpp

?? 這是過于VC制作帶有tab選現視圖的源代碼
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
			pParent -> SendMessage (WM_NOTIFY, nm.idFrom, (LPARAM) & nm);
		}
		delete m_editBox;
		m_editBox = NULL;
		DefEditBoxProc = NULL;
		UserPressedEnterOnTheEditBox = false;
	}
}


//////////////////
// Handle right mouse click: Notify parent, of course
//
void CFolderTabCtrl::OnRButtonDown(UINT nFlags, CPoint pt)
{
	int iTab = HitTest(pt);
	if (iTab >= 0) 
	{
		SelectItem (iTab);
	}

		// Create the pop-up menu items.
	HMENU hmenu = CreatePopupMenu ();
	AppendMenu (hmenu, MF_ENABLED | MF_STRING, ID_EDIT_ADDSHEET, "Add");
	AppendMenu (hmenu, MF_ENABLED | MF_STRING, ID_EDIT_DELETESHEET, "Delete");
	AppendMenu (hmenu, MF_ENABLED | MF_STRING, ID_EDIT_RENAMESHEET, "Rename");
	AppendMenu (hmenu, MF_SEPARATOR, NULL, "");
	AppendMenu (hmenu, MF_ENABLED | MF_STRING, ID_EDIT_SHEETS, "Properties...");
		
		// display menu next to the selected tab
	ClientToScreen ( & pt);
	TrackPopupMenuEx (hmenu, TPM_RIGHTBUTTON, pt.x, pt.y, m_hWnd, NULL);
	
		// cleanup   
	DestroyMenu (hmenu);
}


//////////////////
// Find which tab is under mouse, -1 if none
//
int CFolderTabCtrl::HitTest(CPoint pt)
{
	CRect rc;
	GetClientRect(&rc);
	rc.left += m_cxButtons;
	if (rc.PtInRect(pt)) 
	{
		int xOrigin = m_cxButtons - GetTab(m_iFirstTab)->GetRect().left;
		pt.x -= xOrigin;
		int n = GetItemCount();
		for (int i=0; i<n; i++) 
		{
			if (GetTab(i)->HitTest(pt))
				return i;
		}
	}
	return -1;
}


//////////////////
// Select ith tab. Returns index selected
//
int CFolderTabCtrl::SelectItem(int iTab)
{
	int count = GetItemCount();
	if (iTab<0 || iTab>=count)
		return -1;		// bad
	if (iTab == m_iCurItem)
		return iTab;	// already selected

	if (m_iCurItem < count)
		InvalidateTab(m_iCurItem);		// invalidate old tab (repaint)

	m_iCurItem = iTab;				// set new selected tab
	InvalidateTab(m_iCurItem);		// repaint new tab
	
	return m_iCurItem;
}


//////////////////
/// Invalidate a tab: invaldate its rect
//
void CFolderTabCtrl::InvalidateTab(int iTab, BOOL bErase)
{
	CRect rc = GetTab(iTab)->GetRect();
	CFolderTab * tab = GetTab (m_iFirstTab);
	int xOrigin = 0;
	if (tab)
		xOrigin = m_cxButtons - tab -> GetRect().left;
	else
		xOrigin = m_cxButtons;
	rc += CPoint(xOrigin,0);
	InvalidateRect(rc, bErase);
}


BOOL CFolderTabCtrl::Load(UINT nIDRes)
{
	CString s;
	if (!s.LoadString(nIDRes))
		return FALSE;

	CString sTab;
	for (int i=0; AfxExtractSubString(sTab, s, i); i++) {
		AddItem(sTab);
	}
	return TRUE;
}


int CFolderTabCtrl::AddItem(LPCTSTR lpszText)
{
	m_lsTabs.AddTail(new CFolderTab(lpszText));
	RecomputeLayout();
	return m_lsTabs.GetCount() - 1;
}


BOOL CFolderTabCtrl::RemoveItem(int iPos)
{
	POSITION pos = m_lsTabs.FindIndex(iPos);
	if (pos) 
	{
		CFolderTab* pTab = (CFolderTab*)m_lsTabs.GetAt(pos);
		m_lsTabs.RemoveAt(pos);
		delete pTab;
	}
	RecomputeLayout();
	return pos!=NULL;
}


CFolderTab* CFolderTabCtrl::GetTab(int iPos)
{
	POSITION pos = m_lsTabs.FindIndex(iPos);
	return pos ? static_cast<CFolderTab*>(m_lsTabs.GetAt(pos)) : NULL;
}


void CFolderTabCtrl::RecomputeLayout()
{
	CClientDC dc(this);
	int x = 0;
	int n = GetItemCount();
	CFolderTab* pTab = NULL;
	for (int i=0; i<n; i++) 
	{
		pTab = GetTab(i);
		CFont* pOldFont = NULL;
			//  use the bigger of the two fonts for all extents since the 
			//  Selected font is bigger than the Normal font - elsewhise 
			//  some of the displayed selected tab characters are cut
		// if (i == m_iCurItem) 
			pOldFont = dc.SelectObject(&m_fontSelected);
		// else
		//	pOldFont = dc.SelectObject(&m_fontNormal);
		if (pTab) 
			x += pTab->ComputeRgn(dc, x) - CXOFFSET;
		dc.SelectObject(pOldFont);
	}

	m_cxDesired = m_cxButtons;
	if (pTab) 
	{
		CRect rc = pTab->GetRect();
		m_cxDesired += rc.right;
	}
}


int CFolderTabCtrl::OnCreate(LPCREATESTRUCT lpcs)
{
	if (CWnd::OnCreate(lpcs)!=0)
		return -1;

	if (m_dwFtabStyle & FTS_BUTTONS) 
	{
		CRect rc;
		// for (int i=FTBPREV; i<=FTBNEXT; i++) 
		for (int i = FTBFIRST; i <= FTBLAST; i++) 
		{
			VERIFY (m_wndButton[i-1].Create (NULL,
					WS_VISIBLE | WS_CHILD | BS_OWNERDRAW,rc,this,i));
		}
		m_cxButtons = FTS_NUMBUTTONS * CXBUTTON;
	}
	return 0;
}


void CFolderTabCtrl::OnSize(UINT nType, int cx, int cy)
{
	if (m_wndButton[0].m_hWnd) 
	{
		int w = cy;
		CRect rc(0,0,w,cy);
		// for (int i = FTBPREV; i<=FTBNEXT; i++) 
		for (int i = FTBFIRST; i <= FTBLAST; i++) 
		{
			m_wndButton[i-1].MoveWindow(&rc);
			rc += CPoint(w,0);
		}
		UpdateButtons();
	}
}


void CFolderTabCtrl::UpdateButtons()
{
	for (int i = FTBFIRST; i <= FTBLAST; i++) 
	{
		m_wndButton [i - 1].EnableWindow (TRUE);
	}
}


void CFolderTabCtrl::OnFirstTab()
{
	m_iFirstTab = 0;
	Invalidate();
	UpdateButtons();
}


void CFolderTabCtrl::OnNextTab()
{
	if (m_iFirstTab < m_lsTabs.GetCount() - 1) 
	{
		m_iFirstTab++;
		Invalidate();
		UpdateButtons();
	}
}


void CFolderTabCtrl::OnPrevTab()
{
	if (m_iFirstTab > 0) 
	{
		m_iFirstTab--;
		Invalidate();
		UpdateButtons();
	}
}


void CFolderTabCtrl::OnLastTab()
{
	m_iFirstTab = m_lsTabs.GetCount() - 1;
	Invalidate();
	UpdateButtons();
}


void CFolderTabCtrl::OnEditProperties()
{
	NMFOLDERTAB nm;
	nm.hwndFrom = m_hWnd;
	nm.idFrom = GetDlgCtrlID();
	nm.code = FTN_EDITSHEETS;
	nm.iItem = m_iCurItem;
	CWnd* pParent = GetParent();
	pParent->SendMessage(WM_NOTIFY, nm.idFrom, (LPARAM)&nm);
}


void CFolderTabCtrl::OnEditAddSheet()
{
	NMFOLDERTAB nm;
	nm.hwndFrom = m_hWnd;
	nm.idFrom = GetDlgCtrlID();
	nm.code = FTN_ADDSHEET;
	nm.iItem = m_iCurItem;
	CWnd* pParent = GetParent();
		//  note that the parent will need to call the AddItem method
		//  in order to complete this user event
	pParent->SendMessage(WM_NOTIFY, nm.idFrom, (LPARAM)&nm);
}


void CFolderTabCtrl::OnEditDeleteSheet()
{
	NMFOLDERTAB nm;
	nm.hwndFrom = m_hWnd;
	nm.idFrom = GetDlgCtrlID();
	nm.code = FTN_DELETESHEET;
	nm.iItem = m_iCurItem;
	CWnd* pParent = GetParent();
		//  note that the parent will need to call the RemoveItem method
		//  in order to complete this user event
	pParent->SendMessage(WM_NOTIFY, nm.idFrom, (LPARAM)&nm);
}


void CFolderTabCtrl::OnEditRenameSheet()
{
		//  get the position for the proposed edit box
	CRect rc = GetTab (m_iCurItem) -> GetRect ();
		//  make the edit box smaller than the tab trapezoid
	rc.top++;
	rc.left += m_cxButtons + CXOFFSET + CXMARGIN;
	rc.right += m_cxButtons - CXOFFSET - CXMARGIN;
	rc.bottom--;
		//  now throw up the transparent edit control
	if ( ! m_editBox)
	{
		m_editBox = new CEdit;
		m_editBox -> Create ( WS_CHILD | WS_VISIBLE | ES_AUTOHSCROLL, 
								rc, this, EditBoxId );
		CFolderTab * tab = GetTab (m_iCurItem);
		m_editBox -> SetWindowText ( tab -> GetText () );
		m_editBox -> SetFocus ();
			//  the limit on the length of the tab names is 40 characters minus 1
		m_editBox -> SetLimitText (40 - 1);
		int len = strlen (tab -> GetText ());
			//  move the cursor to the end of the text without selecting anything
		m_editBox -> SetSel (len, len);
		HWND EditWnd = m_editBox -> GetSafeHwnd ();
		DefEditBoxProc = (WNDPROC) GetWindowLong (EditWnd, GWL_WNDPROC);
		SetWindowLong (EditWnd, GWL_WNDPROC, (long) MyEditBoxProc);
		UserPressedEnterOnTheEditBox = false;
		EditBoxHandle = EditWnd;
	}
}


////////////////////////////////////////////////////////////////
// CFolderButton
//
IMPLEMENT_DYNAMIC(CFolderButton, CButton)
BEGIN_MESSAGE_MAP(CFolderButton, CButton)
	ON_WM_LBUTTONDOWN()
	ON_WM_LBUTTONUP()
	ON_WM_LBUTTONDBLCLK()
	ON_WM_TIMER()
END_MESSAGE_MAP()


void CFolderButton::DrawItem(LPDRAWITEMSTRUCT lpDis)
{
	DRAWITEMSTRUCT& dis = *lpDis;
	CDC& dc = *CDC::FromHandle(dis.hDC);
	CRect rc;
	GetClientRect(&rc);
	dc.FillSolidRect(&rc,GetSysColor(COLOR_3DFACE));
	BOOL bDown = dis.itemState & ODS_SELECTED;
	if (bDown) {
		rc += CPoint(1,1);
	}

	CPen pen(PS_SOLID,1,
		dis.itemState & ODS_DISABLED ? GetSysColor(COLOR_3DSHADOW) : RGB(0,0,0));
	CPen* pOldPen = dc.SelectObject(&pen);
	dc.MoveTo(rc.TopLeft());
	dc.LineTo(rc.right,rc.top);
	CRect rc2=rc;
	for (int i=0; i<2; i++) 
	{
		dc.Draw3dRect(&rc2,
			GetSysColor(bDown ? COLOR_3DFACE : COLOR_3DHIGHLIGHT),
			GetSysColor(COLOR_3DSHADOW));
		rc2.right--;
		rc2.bottom--;
	}

		//  this number needs to be odd so that will get 1 pixel at the end
		//  Paul had it set to 7 - Excel appears to have 9
	int arrowHeight = 9;  
		//  this number appears to be (arrowHeight / 2 + 1)
		//  Paul had this set to 4 - Excel appears to have 5
	int arrowWidth = 5;
	int cyMargin = (rc.Height() - arrowHeight) / 2;
	int cxMargin = (rc.Width() - arrowWidth) / 2;

		//  draw the arrows (left or right depending on button)
	int x = 0;
	int incr = 0;
	switch (dis.CtlID)
	{
	case FTBFIRST:
		x = rc.right - cxMargin - 1;
		incr = -1;
		break;
	case FTBPREV:
		x = rc.right - cxMargin - 2;
		incr = -1;
		break;
	case FTBNEXT:
		x = rc.left + cxMargin;
		incr = 1;
		break;
	case FTBLAST:
		x = rc.left + cxMargin - 1;
		incr = 1;
		break;
	}
	int y = rc.top + cyMargin;
	int h = arrowHeight;
	for (int j = 0; j < arrowWidth; j++) 
	{
		dc.MoveTo (x, y);
		dc.LineTo (x, y + h);
		h -= 2;
		x += incr;
		y++;
	}
		//  draw the vertical line for the first and last buttons
	if (dis.CtlID == FTBFIRST) 
	{
			//  the vertical line is before the arrow
		x--;
		y = rc.top + cyMargin;
		dc.MoveTo (x, y);
		dc.LineTo (x, y + arrowHeight);
	}
	if (dis.CtlID == FTBLAST) 
	{
			//  the vertical line is after the arrow
		x++;
		y = rc.top + cyMargin;
		dc.MoveTo (x, y);
		dc.LineTo (x, y + arrowHeight);
	}
	dc.SelectObject(pOldPen);
}


void CFolderButton::OnLButtonDown(UINT nFlags, CPoint pt)
{
	Default();
	SetTimer(1,500,NULL);
	m_iState = 0;
}


void CFolderButton::OnLButtonUp(UINT nFlags, CPoint pt)
{
	KillTimer(1);
	Default();
}


void CFolderButton::OnLButtonDblClk(UINT nFlags, CPoint pt)
{
	SendMessage(WM_LBUTTONDOWN,nFlags,MAKELONG(pt.x,pt.y));
}


void CFolderButton::OnTimer(UINT nIDEvent)
{
	if (IsWindowEnabled()) 
	{
		if (m_iState++ == 0) 
		{
			KillTimer(1);
			SetTimer(1,150,NULL);
		}
		GetParent()->SendMessage(WM_COMMAND, GetDlgCtrlID());
	} 
	else 
	{
		KillTimer(1);
	}
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩一区二区三区在线| 国产一区二区在线视频| 狠狠色狠狠色综合| av一区二区不卡| 国产视频一区在线观看| 国产自产v一区二区三区c| 欧美日韩成人综合| 日韩理论片网站| 91亚洲男人天堂| 国产精品二三区| 92国产精品观看| 自拍偷自拍亚洲精品播放| 99久久婷婷国产综合精品| 中文字幕一区二区三区在线不卡| 日韩福利电影在线观看| 91视频国产资源| 伊人一区二区三区| 欧美日韩国产一级二级| 爽好多水快深点欧美视频| 91精品国产欧美一区二区成人| 亚州成人在线电影| 欧美高清精品3d| 舔着乳尖日韩一区| 337p日本欧洲亚洲大胆色噜噜| 韩国三级电影一区二区| 国产精品乱人伦| 国产在线播放一区三区四| 欧美经典一区二区| 色婷婷久久久亚洲一区二区三区 | 亚洲国产视频在线| 欧美日韩国产综合一区二区三区| 视频一区欧美日韩| 久久综合中文字幕| av一本久道久久综合久久鬼色| 亚洲天堂精品视频| 欧美日韩国产免费| 激情小说亚洲一区| 国产精品成人一区二区三区夜夜夜| 精品系列免费在线观看| 国产精品久久久久影视| 欧美性色黄大片| 国产一区二区主播在线| 中文字幕日韩一区二区| 欧美精品视频www在线观看| 国产剧情一区在线| 亚洲一区二区三区四区的| 精品国产免费一区二区三区四区| 成人中文字幕电影| 午夜成人在线视频| 久久网这里都是精品| 91黄色免费观看| 激情欧美日韩一区二区| 亚洲夂夂婷婷色拍ww47| 久久精品一区二区三区av| 欧美特级限制片免费在线观看| 另类专区欧美蜜桃臀第一页| 亚洲欧美日韩一区二区三区在线观看 | 亚洲图片另类小说| 精品日韩99亚洲| 日本乱人伦aⅴ精品| 国产一区高清在线| 日韩国产精品久久| 玉米视频成人免费看| 国产亚洲成av人在线观看导航| 欧美日韩国产综合草草| 国产成人aaaa| 久久激情综合网| 亚洲第一综合色| 亚洲欧美另类小说| 中文字幕免费在线观看视频一区| 久久欧美中文字幕| 精品日韩欧美在线| 日韩精品中文字幕在线不卡尤物| 欧美日韩精品一区二区三区蜜桃| 91蝌蚪porny成人天涯| 国产成人在线网站| 成人午夜看片网址| 国产精品18久久久久久vr| 狠狠网亚洲精品| 狠狠色综合色综合网络| 国产乱码一区二区三区| 国产在线国偷精品免费看| 国精品**一区二区三区在线蜜桃| 蜜桃久久精品一区二区| 老司机精品视频一区二区三区| 日韩精品一区第一页| 青娱乐精品在线视频| 久久精品国产99| 国产精品99久久久久久似苏梦涵| 国产精品综合av一区二区国产馆| 国产精品一二三区| zzijzzij亚洲日本少妇熟睡| 99久久国产综合色|国产精品| www.久久精品| 91激情在线视频| 7777精品久久久大香线蕉| 在线不卡免费欧美| 日韩精品中文字幕一区| 日本一区二区视频在线观看| 中文字幕在线不卡一区二区三区| 亚洲乱码中文字幕综合| 欧美调教femdomvk| 色综合亚洲欧洲| 欧美日韩一区二区三区不卡| 久久免费美女视频| 成人爽a毛片一区二区免费| 国产精品天天看| 国产经典欧美精品| 国产精品无圣光一区二区| 韩国精品在线观看| 日本一区二区三级电影在线观看| 色婷婷久久99综合精品jk白丝| 天堂av在线一区| 久久久国产精品麻豆 | www精品美女久久久tv| 亚洲国产wwwccc36天堂| 一区二区三区在线视频免费观看| 亚洲午夜激情网站| 激情综合色丁香一区二区| 不卡一区二区在线| 7777精品伊人久久久大香线蕉| 欧美日韩视频在线一区二区| 日韩亚洲欧美一区二区三区| 久久综合成人精品亚洲另类欧美 | 欧美专区亚洲专区| 久久www免费人成看片高清| 国产精品久久久99| 中文字幕一区二区不卡| 精品制服美女丁香| 国产综合色精品一区二区三区| 蜜桃视频第一区免费观看| 免费成人av资源网| 国产成人精品亚洲777人妖| 99这里都是精品| 国产精华液一区二区三区| 五月天中文字幕一区二区| 九九九精品视频| 欧美日韩一区二区三区在线| 日韩免费电影一区| 亚洲免费观看在线观看| 美女精品一区二区| 欧美影院午夜播放| 91精品午夜视频| 欧美日韩国产高清一区二区| 国产精品视频yy9299一区| 亚洲一二三四区不卡| 欧美日本一区二区| 日韩电影在线免费看| 日韩免费看的电影| 91一区二区三区在线播放| 日韩一区和二区| 亚洲欧美成aⅴ人在线观看| 免费看黄色91| 色综合一个色综合| 一区二区中文视频| 激情深爱一区二区| 欧美日韩国产精品自在自线| 1024精品合集| 国产精华液一区二区三区| 91精品久久久久久久99蜜桃| 国产精品国产自产拍高清av王其| 日本在线不卡一区| 精品视频一区三区九区| 精品国产免费人成在线观看| 亚洲综合色自拍一区| 国产乱一区二区| 精品日本一线二线三线不卡| 日韩成人一区二区| 欧美艳星brazzers| 丝袜美腿高跟呻吟高潮一区| 欧洲一区在线电影| 亚洲三级电影全部在线观看高清| 国产伦精品一区二区三区免费| 日韩视频免费直播| 日韩精品亚洲专区| 3d动漫精品啪啪1区2区免费 | 国产蜜臀97一区二区三区| 狠狠色狠狠色综合| 91.麻豆视频| 日本在线观看不卡视频| 91麻豆精品91久久久久久清纯| 一区二区三区久久久| www.日韩大片| 久久亚洲精精品中文字幕早川悠里| 国精产品一区一区三区mba视频| 日韩精品最新网址| 老司机午夜精品99久久| 欧美电视剧在线看免费| 日韩**一区毛片| 久久久久99精品一区| 国内国产精品久久| 久久久.com| 高清成人免费视频| 综合分类小说区另类春色亚洲小说欧美| 国产**成人网毛片九色| 国产精品美女久久久久久| 91在线云播放| 依依成人精品视频| 精品捆绑美女sm三区| 国产精品白丝jk黑袜喷水|