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

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

?? ftab.cpp

?? 一種簡單的股票軟件源代碼,編譯后可以實時顯示證券行情
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
////////////////////////////////////////////////////////////////
// If this code works, it was written by Paul DiLascia.
// If not, I don't know who wrote it.
// Compiles with Visual Studio 6.0 on Windows XP. Tab size=3.
//
#include "stdafx.h"
#include "ftab.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

//////////////////
// Private class to represent one folder tab
//
class CFolderTab {
private:
	CString	m_sText; // tab text
	CRect		m_rect;			// bounding rect
	CRgn		m_rgn;			// polygon region to fill (trapezoid)

	int		ComputeRgn(CDC& dc, int x);
	int		Draw(CDC& dc, CFont& font, BOOL bSelected);
	BOOL		HitTest(CPoint pt)			{ return m_rgn.PtInRegion(pt); }
	CRect		GetRect() const				{ return m_rect; }
	void		GetTrapezoid(const CRect& rc, CPoint* pts) const;

	friend class CFolderTabCtrl;

public:
	CFolderTab(LPCTSTR lpszText) : m_sText(lpszText) { }
	LPCTSTR	GetText() const				{ return m_sText; }
	void  	SetText(LPCTSTR lpszText)	{ m_sText = lpszText; }
};

const CXOFFSET = 8;		// defined pitch of trapezoid slant
const CXMARGIN = 2;		// left/right text margin
const CYMARGIN = 1;		// top/bottom text margin
const CYBORDER = 1;		// top border thickness
const CXBUTTON = GetSystemMetrics(SM_CXVSCROLL);

//////////////////
// Compute the the points, rect and region for a tab.
// Input x is starting x pos.
//
int CFolderTab::ComputeRgn(CDC& dc, int x)
{
	m_rgn.DeleteObject();

	CRect& rc = m_rect;
	rc.SetRectEmpty();

	// calculate desired text rectangle
	dc.DrawText(m_sText, &rc, DT_CALCRECT);
	rc.right  += 2*CXOFFSET + 2*CXMARGIN;						// add margins
	rc.bottom = rc.top + GetSystemMetrics(SM_CYHSCROLL);	// ht = scrollbar ht
	rc += CPoint(x,0);												// shift right

	// create trapezoid region
	CPoint pts[4];
	GetTrapezoid(rc, pts);
	m_rgn.CreatePolygonRgn(pts, 4, WINDING);

	return rc.Width();
}

//////////////////
// Given the boundint rect, compute trapezoid region.
// Note that the right and bottom edges not included in rect or
// trapezoid; these are normal rules of geometry. 
//
void CFolderTab::GetTrapezoid(const CRect& rc, CPoint* pts) const
{
	pts[0] = rc.TopLeft();
	pts[1] = CPoint(rc.left + CXOFFSET,   rc.bottom);
	pts[2] = CPoint(rc.right- CXOFFSET-1, rc.bottom);
	pts[3] = CPoint(rc.right-1, rc.top);
}


//////////////////
// Draw tab in normal or highlighted state
//
int CFolderTab::Draw(CDC& dc, CFont& font, BOOL bSelected)
{
	COLORREF bgColor = GetSysColor(bSelected ? COLOR_WINDOW     : COLOR_3DFACE);
	COLORREF fgColor = GetSysColor(bSelected ? COLOR_WINDOWTEXT : COLOR_BTNTEXT);

	CBrush brush(bgColor);					 // background brush
	dc.SetBkColor(bgColor);					 // text background
	dc.SetTextColor(fgColor);				 // text color = fg color

	CPen blackPen(PS_SOLID, 1, RGB(0,0,0));	// black
	CPen shadowPen(PS_SOLID, 1, GetSysColor(COLOR_3DSHADOW));

	// Fill trapezoid
	CPoint pts[4];
	CRect rc = m_rect;
	GetTrapezoid(rc, pts);
	CPen* pOldPen = dc.SelectObject(&blackPen);
	dc.FillRgn(&m_rgn, &brush);

	// Draw edges. This is requires two corrections:
	// 1) Trapezoid dimensions don't include the right and bottom edges,
	// so must use one pixel less on bottom (cybottom)
	// 2) the endpoint of LineTo is not included when drawing the line, so
	// must add one pixel (cytop)
	//
	pts[1].y--;			// correction #1: true bottom edge y-coord
	pts[2].y--;			// ...ditto
	pts[3].y--;			// correction #2:	extend final LineTo
	dc.MoveTo(pts[0]);						// upper left
	dc.LineTo(pts[1]);						// bottom left
	dc.SelectObject(&shadowPen);			// bottom line is shadow color
	dc.MoveTo(pts[1]);						// line is inside trapezoid bottom
	dc.LineTo(pts[2]);						// ...
	dc.SelectObject(&blackPen);			// upstroke is black
	dc.LineTo(pts[3]);						// y-1 to include endpoint
	if (!bSelected) {
		// if not highlighted, upstroke has a 3D shadow, one pixel inside
		pts[2].x--;		// offset left one pixel
		pts[3].x--;		// ...ditto
		dc.SelectObject(&shadowPen);
		dc.MoveTo(pts[2]);
		dc.LineTo(pts[3]);
	}
	dc.SelectObject(pOldPen);

	// draw text
	rc.DeflateRect(CXOFFSET + CXMARGIN, CYMARGIN);
	CFont* pOldFont = dc.SelectObject(&font);
	dc.DrawText(m_sText, &rc, DT_CENTER|DT_VCENTER|DT_SINGLELINE);
	dc.SelectObject(pOldFont);

	return m_rect.right;
}

//////////////////////////////////////////////////////////////////
// CFolderTabCtrl

IMPLEMENT_DYNAMIC(CFolderTabCtrl, CWnd)
BEGIN_MESSAGE_MAP(CFolderTabCtrl, CWnd)
	ON_WM_CREATE()
	ON_WM_PAINT()
	ON_WM_SIZE()
	ON_WM_LBUTTONDOWN()
	ON_BN_CLICKED(FTBPREV,OnPrevTab)
	ON_BN_CLICKED(FTBNEXT,OnNextTab)
END_MESSAGE_MAP()

CFolderTabCtrl::CFolderTabCtrl()
{
	m_iCurItem =
	m_dwFtabStyle =
	m_cxDesired =
	m_cxButtons =
	m_iFirstTab = 0;
}

CFolderTabCtrl::~CFolderTabCtrl()
{
	while (!m_lsTabs.IsEmpty())
		delete (CFolderTab*)m_lsTabs.RemoveHead();
}

//////////////////
// Create folder tab control from static control.
// Destroys the static control. This is convenient for dialogs
//
BOOL CFolderTabCtrl::CreateFromStatic(UINT nID, CWnd* pParent)
{
	CStatic wndStatic;
	if (!wndStatic.SubclassDlgItem(nID, pParent))
		return FALSE;
	CRect rc;
	wndStatic.GetWindowRect(&rc);
	pParent->ScreenToClient(&rc);
	wndStatic.DestroyWindow();
	rc.bottom = rc.top + GetDesiredHeight();
	return Create(WS_CHILD|WS_VISIBLE, rc, pParent, nID);
}

//////////////////
// Create folder tab control.
//
BOOL CFolderTabCtrl::Create(DWORD dwStyle, const RECT& rc,
	CWnd* pParent, UINT nID, DWORD dwFtabStyle)
{
	ASSERT(pParent);
	ASSERT(dwStyle & WS_CHILD);

	m_dwFtabStyle = dwFtabStyle;

	static LPCTSTR lpClassName = _T("PDFolderTab");
	static BOOL bRegistered = FALSE; // registered?
	if (!bRegistered) {
		WNDCLASS wc;
		memset(&wc, 0, sizeof(wc));
		wc.style = CS_HREDRAW | CS_VREDRAW | CS_GLOBALCLASS;
		wc.lpfnWndProc = (WNDPROC)::DefWindowProc; // will get hooked by MFC
		wc.hInstance = AfxGetInstanceHandle();
      wc.hCursor = LoadCursor(NULL, IDC_ARROW);
      wc.hbrBackground = CreateSolidBrush(GetSysColor(COLOR_3DFACE));
      wc.lpszMenuName = NULL;
      wc.lpszClassName = lpClassName;
		if (!AfxRegisterClass(&wc)) {
			TRACE("*** CFolderTabCtrl::AfxRegisterClass failed!\n");
			return FALSE;
		}
		bRegistered = TRUE;
	}
	if (!CWnd::CreateEx(0, lpClassName, NULL, dwStyle, rc, pParent, nID))
		return FALSE;

	// initialize fonts
	LOGFONT lf;
	memset(&lf, 0, sizeof(lf));
	lf.lfHeight = GetSystemMetrics(SM_CYHSCROLL)-CYMARGIN;
	lf.lfWeight = FW_NORMAL;
	lf.lfCharSet = DEFAULT_CHARSET;
	_tcscpy(lf.lfFaceName, _T("Arial"));
	m_fontNormal.CreateFontIndirect(&lf);
	lf.lfHeight -= 2;
	m_fontSelected.CreateFontIndirect(&lf);

	return TRUE;
}

//////////////////
// Folder tab was created: create scroll buttons if style says so.
//
int CFolderTabCtrl::OnCreate(LPCREATESTRUCT lpcs)
{
	if (CWnd::OnCreate(lpcs)!=0)
		return -1;

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

//////////////////
// Get folder tab text
//
LPCTSTR CFolderTabCtrl::GetItemText(int iItem)
{
	CFolderTab* pft = GetTab(iItem);
	return pft ? pft->GetText() : NULL;
}

//////////////////
// Set folder tab text
//
void CFolderTabCtrl::SetItemText(int iItem, LPCTSTR lpText)
{
	CFolderTab* pft = GetTab(iItem);
	if (pft) {
		pft->SetText(lpText);
	}
}

//////////////////
// copy a font
//
static void CopyFont(CFont& dst, CFont& src)
{
	dst.DeleteObject();
	LOGFONT lf;
	VERIFY(src.GetLogFont(&lf));
	dst.CreateFontIndirect(&lf);
}

//////////////////
// Set normal, selected fonts
//
void CFolderTabCtrl::SetFonts(CFont& fontNormal, CFont& fontSelected)
{
	CopyFont(m_fontNormal, fontNormal);
	CopyFont(m_fontSelected, fontSelected);
}

//////////////////
// Paint function
//
void CFolderTabCtrl::OnPaint() 
{
	CPaintDC dc(this); // device context for painting

	int xOrigin = m_cxButtons - GetTab(m_iFirstTab)->GetRect().left;
	dc.SetViewportOrg(xOrigin,0);

	CRect rc;
	GetClientRect(&rc);

	CFolderTab* pCurTab = NULL;

	// draw all the normal (non-selected) tabs
	int n = GetItemCount();
	for (int i=0; i<n; i++) {
		CFolderTab* pTab = GetTab(i);
		ASSERT(pTab);
		if (i==m_iCurItem) {
			pCurTab = pTab;
		} else {
			pTab->Draw(dc, m_fontNormal, FALSE);
		}
	}
	// draw selected tab last so it will be "on top" of the others
	if (pCurTab)
		pCurTab->Draw(dc, m_fontSelected, TRUE);

	// draw border: line along the top edge, excluding seleted tab
	CRect rcCurTab(0,0,0,0);
	if (pCurTab)
		rcCurTab = pCurTab->GetRect();

	rc.right -= xOrigin;
	CPen blackPen(PS_SOLID, 1, RGB(0,0,0));	// black
	CPen* pOldPen = dc.SelectObject(&blackPen);
	dc.MoveTo(rcCurTab.right, rcCurTab.top);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲成人第一页| 午夜成人免费电影| 欧美精品久久久久久久久老牛影院| 日韩精品电影一区亚洲| 国产亚洲精品资源在线26u| 91麻豆精品一区二区三区| 奇米亚洲午夜久久精品| 亚洲欧洲在线观看av| 欧美日韩一区二区在线观看| 国产精品资源网站| 亚洲精品高清视频在线观看| 日韩免费视频线观看| 91一区二区在线| 九九热在线视频观看这里只有精品 | 美女一区二区视频| 亚洲欧洲在线观看av| 国产亚洲一二三区| 日韩午夜三级在线| 色婷婷av一区| 99久久精品一区| 日韩va欧美va亚洲va久久| 亚洲精品自拍动漫在线| 国产精品污www在线观看| 欧美大胆人体bbbb| 777亚洲妇女| 欧美午夜不卡视频| 91在线免费看| 波多野结衣中文字幕一区| 国产一区二区免费在线| 天天综合天天综合色| 亚洲一二三四区| 亚洲欧美综合色| 亚洲国产精品成人综合色在线婷婷| 欧美大胆人体bbbb| 日韩一级高清毛片| 欧美日韩精品欧美日韩精品一综合| av在线播放成人| 国产精品一二三四五| 精品一区二区三区视频 | 不卡电影一区二区三区| 国产一区二区三区四区五区美女| 亚洲自拍与偷拍| 亚洲男人的天堂av| 国产精品毛片a∨一区二区三区| 久久久久97国产精华液好用吗| 欧美日韩精品专区| 欧美亚男人的天堂| 欧洲视频一区二区| 国产精品亚洲午夜一区二区三区| 国产一区在线视频| 精品影院一区二区久久久| 老鸭窝一区二区久久精品| 亚洲成人精品在线观看| 亚洲大片精品永久免费| 亚洲永久精品国产| 午夜伦理一区二区| 亚洲v中文字幕| 视频一区二区三区入口| 亚洲一区在线观看网站| 一区二区欧美视频| 亚洲va中文字幕| 午夜精品久久久久影视| 日本va欧美va瓶| 麻豆精品久久精品色综合| 精品综合免费视频观看| 久久国产三级精品| 国产成人在线看| 国产iv一区二区三区| av不卡免费在线观看| 日本久久精品电影| 欧美少妇性性性| 欧美裸体一区二区三区| 色婷婷综合久久久中文字幕| 欧美日韩一区二区不卡| 7777精品伊人久久久大香线蕉经典版下载| 91麻豆精品国产91久久久久久久久| 6080国产精品一区二区| 国产网站一区二区| 国产精品不卡视频| 日韩精品一卡二卡三卡四卡无卡| 青草av.久久免费一区| 成人激情动漫在线观看| 91久久精品一区二区三区| 91精品国产高清一区二区三区| 久久伊人蜜桃av一区二区| 欧美欧美午夜aⅴ在线观看| 精品久久国产老人久久综合| 久久综合丝袜日本网| 亚洲卡通动漫在线| 日韩电影免费在线| 不卡av电影在线播放| 欧美日韩一区二区不卡| 国产午夜精品一区二区| 国产日韩三级在线| 天天色天天操综合| 国产精品自拍在线| 欧美亚洲尤物久久| 精品国精品自拍自在线| 自拍视频在线观看一区二区| 日韩国产高清影视| 91一区二区三区在线观看| 91精选在线观看| 亚洲视频图片小说| 日韩高清国产一区在线| 成人av网址在线| 欧美另类变人与禽xxxxx| 国产色91在线| 亚洲电影第三页| 国产经典欧美精品| 91行情网站电视在线观看高清版| 精品久久久久香蕉网| 一区二区三区日韩精品| 国内精品伊人久久久久影院对白| 99久久国产免费看| 26uuu色噜噜精品一区| 亚洲v精品v日韩v欧美v专区| 国产91丝袜在线18| 精品国产不卡一区二区三区| 亚洲尤物在线视频观看| 91美女在线视频| 久久久久久日产精品| 美女视频免费一区| 在线观看免费一区| 亚洲欧美偷拍另类a∨色屁股| 久久er99精品| 欧美一区二区免费| 亚洲影院免费观看| 色综合视频一区二区三区高清| 日韩精品一区二区三区在线观看| 午夜精品福利一区二区三区av| 北条麻妃一区二区三区| 精品日产卡一卡二卡麻豆| 婷婷中文字幕综合| 日本久久精品电影| 亚洲一区二区三区在线| 99精品桃花视频在线观看| 久久久亚洲国产美女国产盗摄| 亚洲www啪成人一区二区麻豆| 日本电影亚洲天堂一区| 日韩伦理免费电影| 99精品在线免费| 国产农村妇女毛片精品久久麻豆| 国产成人在线免费| 久久精品亚洲麻豆av一区二区 | 精品精品欲导航| 九九热在线视频观看这里只有精品| 欧美乱妇15p| 人人精品人人爱| 欧美喷潮久久久xxxxx| 亚洲欧美视频一区| ww久久中文字幕| www.综合网.com| 日韩国产欧美在线播放| 欧美v日韩v国产v| 日韩av高清在线观看| 欧美视频三区在线播放| 免费高清视频精品| 日韩女优制服丝袜电影| 九九在线精品视频| 久久久久久夜精品精品免费| 丁香天五香天堂综合| 国产网红主播福利一区二区| 91蜜桃视频在线| 亚洲综合在线观看视频| 7777精品伊人久久久大香线蕉| 免费高清在线一区| 国产精品乱人伦| 91美女在线视频| 日韩电影在线一区| 久久综合九色综合97婷婷女人 | 亚洲欧洲美洲综合色网| 99在线精品观看| 水野朝阳av一区二区三区| 51午夜精品国产| 国模少妇一区二区三区| 国产欧美一区二区精品忘忧草| 91丨国产丨九色丨pron| 亚洲图片欧美色图| 91精品国产欧美一区二区成人| 国内精品国产成人国产三级粉色| 精品国产髙清在线看国产毛片| 国产精品一区二区在线播放| 亚洲激情五月婷婷| www.日韩在线| 日本特黄久久久高潮| 日韩一二三区视频| 91亚洲精品乱码久久久久久蜜桃| 日本不卡中文字幕| 日本一区二区视频在线| 欧美伦理视频网站| 成人性生交大片免费| 水野朝阳av一区二区三区| 久久久噜噜噜久久人人看 | 日韩免费观看高清完整版| 国产一区二区中文字幕| 国产精品成人网| 91精品免费观看| av电影在线观看一区| 天天做天天摸天天爽国产一区 | 中文字幕不卡在线|