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

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

?? ellepticalbutton.cpp

?? 一個功能挺多的
?? CPP
字號:
///
//Modify by 徐景周 2000.10
//功能:橢圓按鈕顯示效果
//
/////////////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "math.h"
#include "EllepticalButton.h"

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

// prototypes
COLORREF GetColour(double dAngle, COLORREF crBright, COLORREF crDark);

void DrawEllipse(CDC* pDC, CPoint p, LONG lHorizontalRadius,LONG lVerticalRadius, COLORREF crColour, BOOL bDashed = FALSE);
void DrawEllipse(CDC* pDC, CPoint p, LONG lHorizontalRadius, LONG lVerticalRadius,COLORREF crBright, COLORREF crDark);

// Calculate colour for a point at the given angle by performing a linear
// interpolation between the colours crBright and crDark based on the cosine
// of the angle between the light source and the point.
//
// Angles are measured from the +ve x-axis (i.e. (1,0) = 0 degrees, (0,1) = 90 degrees )
// But remember: +y points down!

COLORREF GetColour(double dAngle, COLORREF crBright, COLORREF crDark)
{
#define Rad2Deg	180.0/3.1415 
#define LIGHT_SOURCE_ANGLE	-2.356		// -2.356 radians = -135 degrees, i.e. From top left

	ASSERT(dAngle > -3.1416 && dAngle < 3.1416);
	double dAngleDifference = LIGHT_SOURCE_ANGLE - dAngle;

	if (dAngleDifference < -3.1415) dAngleDifference = 6.293 + dAngleDifference;
	else if (dAngleDifference > 3.1415) dAngleDifference = 6.293 - dAngleDifference;

	double Weight = 0.5*(cos(dAngleDifference)+1.0);

	BYTE Red	 = (BYTE) (Weight*GetRValue(crBright) + (1.0-Weight)*GetRValue(crDark));
	BYTE Green = (BYTE) (Weight*GetGValue(crBright) + (1.0-Weight)*GetGValue(crDark));
	BYTE Blue	= (BYTE) (Weight*GetBValue(crBright) + (1.0-Weight)*GetBValue(crDark));

	//TRACE("LightAngle = %0.0f, Angle = %3.0f, Diff = %3.0f, Weight = %0.2f, RGB %3d,%3d,%3d\n", 
	//		LIGHT_SOURCE_ANGLE*Rad2Deg, dAngle*Rad2Deg, dAngleDifference*Rad2Deg, Weight,Red,Green,Blue);

	return RGB(Red, Green, Blue);
}

void DrawEllipse(CDC* pDC, CPoint p, LONG lHorizontalRadius,LONG lVerticalRadius, COLORREF crColour, BOOL bDashed)
{
	const int nDashLength = 1;
	LONG lXoffset, lYoffset;
	int	nDash = 0;
	BOOL bDashOn = TRUE;

	//Check to see that the coordinates are valid
	ASSERT( (p.x + lHorizontalRadius <= LONG_MAX) && (p.y + lVerticalRadius <= LONG_MAX) );
	ASSERT( (p.x - lHorizontalRadius	>= LONG_MIN) && (p.y - lVerticalRadius	>= LONG_MIN) );

	long d1,d2; 
	long t1,t2,t3,t4,t5,t6,t7,t8,t9; 
	lXoffset = lHorizontalRadius; 
	lYoffset= 0; 
	t1 = lHorizontalRadius*lHorizontalRadius; t2 = 4*t1; t3 = 2*t2;
	t4 = lVerticalRadius*lVerticalRadius; 
	t5 = 4*t4; 
	t6 = 2*t5; 
	t7 = lHorizontalRadius*t5; t8 = 2*t7; 
	t9 = 0; d1 = t2 - t7 + t4; 
	d2 = t1 - t8 + t5;
	
	

	while (d2 < 0) 
	{/* region 1 of ellipse*/
		if (bDashOn) {
			pDC->SetPixelV(p.x + lXoffset, p.y + lYoffset, crColour);
			pDC->SetPixelV(p.x + lXoffset, p.y - lYoffset, crColour);
			pDC->SetPixelV(p.x - lXoffset, p.y + lYoffset, crColour);
			pDC->SetPixelV(p.x - lXoffset, p.y - lYoffset, crColour);
		}

		//Advance the error term and the constant X axis step
	
		 lYoffset++; 
		 t9 = t9 + t3; 
		 if (d1 < 0) { d1 = d1 + t9 + t2; d2 = d2 + t9; }
		 else 
		 { lXoffset --; t8 = t8 - t6; d1 = d1 - t8 + t9 + t2; d2 = d2 - t8 + t9 + t5; 
		 } 
		
		
		if (bDashed && (++nDash == nDashLength)) {
			nDash = 0;
			bDashOn = !bDashOn;
		}

	} 


	do
	{
		if (bDashOn) 
		{
			pDC->SetPixelV(p.x + lXoffset, p.y + lYoffset, crColour);
			pDC->SetPixelV(p.x + lXoffset, p.y - lYoffset, crColour);
			pDC->SetPixelV(p.x - lXoffset, p.y + lYoffset, crColour);
			pDC->SetPixelV(p.x - lXoffset, p.y - lYoffset, crColour);
		}

		lXoffset--;
		t8 = t8 - t6; 
		if (d2 < 0) 
		{ 
			lYoffset ++; t9 = t9 + t3; d2 = d2 - t8 + t5 + t9; 
		}
		else 
			d2 = d2 - t8 + t5; 
		
		if (bDashed && (++nDash == nDashLength)) {
			nDash = 0;
			bDashOn = !bDashOn;
		}

	} while (lXoffset>=0);	//Continue until halfwaX point

} 



void DrawEllipse(CDC* pDC, CPoint p, LONG lHorizontalRadius,LONG lVerticalRadius, COLORREF crBright, COLORREF crDark)
{
	LONG lXoffset, lYoffset;
	double	 dAngle ;
	const double Pi = 3.141592654, 
				 Pi_on_2 = Pi * 0.5,
				 Three_Pi_on_2 = Pi * 1.5;
	COLORREF crColour;

	//Check to see that the coordinates are valid
	ASSERT( (p.x + lHorizontalRadius <= LONG_MAX) && (p.y + lVerticalRadius <= LONG_MAX) );
	ASSERT( (p.x - lHorizontalRadius	>= LONG_MIN) && (p.y - lVerticalRadius	>= LONG_MIN) );

	long d1,d2; 
	long t1,t2,t3,t4,t5,t6,t7,t8,t9; 
	lXoffset = lHorizontalRadius; 
	lYoffset= 0; 
	t1 = lHorizontalRadius*lHorizontalRadius; t2 = 4*t1; t3 = 2*t2;
	t4 = lVerticalRadius*lVerticalRadius; 
	t5 = 4*t4; 
	t6 = 2*t5; 
	t7 = lHorizontalRadius*t5; t8 = 2*t7; 
	t9 = 0; d1 = t2 - t7 + t4; 
	d2 = t1 - t8 + t5;
	
	
	while (d2 < 0) 
	{
		dAngle = atan2(lYoffset, lXoffset);

		//Draw the current pixel, reflected across all eight arcs
		crColour = GetColour(dAngle, crBright, crDark);
		pDC->SetPixelV(p.x + lXoffset, p.y + lYoffset, crColour);

		crColour = GetColour(Pi_on_2 - dAngle, crBright, crDark);
		//pDC->SetPixelV(p.x + lYoffset, p.y + lXoffset, crColour);

		crColour = GetColour(Pi_on_2 + dAngle, crBright, crDark);
//		pDC->SetPixelV(p.x - lYoffset, p.y + lXoffset, crColour);

		crColour = GetColour(Pi - dAngle, crBright, crDark);
		pDC->SetPixelV(p.x - lXoffset, p.y + lYoffset, crColour);

		crColour = GetColour(-Pi + dAngle, crBright, crDark);
		pDC->SetPixelV(p.x - lXoffset, p.y - lYoffset, crColour);

		crColour = GetColour(-Pi_on_2 - dAngle, crBright, crDark);
		//pDC->SetPixelV(p.x - lYoffset, p.y - lXoffset, crColour);

		crColour = GetColour(-Pi_on_2 + dAngle, crBright, crDark);
//		pDC->SetPixelV(p.x + lYoffset, p.y - lXoffset, crColour);

		crColour = GetColour(-dAngle, crBright, crDark);
		pDC->SetPixelV(p.x + lXoffset, p.y - lYoffset, crColour);

		 lYoffset++; 
		 t9 = t9 + t3; 
		 if (d1 < 0) { d1 = d1 + t9 + t2; d2 = d2 + t9; }
		 else 
		 { 
			 lXoffset --; t8 = t8 - t6; d1 = d1 - t8 + t9 + t2; d2 = d2 - t8 + t9 + t5; 
		 } 

	} 


	do {

		dAngle = atan2(lYoffset, lXoffset);

		//Draw the current pixel, reflected across all eight arcs
		crColour = GetColour(dAngle, crBright, crDark);
		pDC->SetPixelV(p.x + lXoffset, p.y + lYoffset, crColour);

		crColour = GetColour(Pi_on_2 - dAngle, crBright, crDark);
		//pDC->SetPixelV(p.x + lYoffset, p.y + lXoffset, crColour);

		crColour = GetColour(Pi_on_2 + dAngle, crBright, crDark);
//		pDC->SetPixelV(p.x - lYoffset, p.y + lXoffset, crColour);

		crColour = GetColour(Pi - dAngle, crBright, crDark);
		pDC->SetPixelV(p.x - lXoffset, p.y + lYoffset, crColour);

		crColour = GetColour(-Pi + dAngle, crBright, crDark);
		pDC->SetPixelV(p.x - lXoffset, p.y - lYoffset, crColour);

		crColour = GetColour(-Pi_on_2 - dAngle, crBright, crDark);
		//pDC->SetPixelV(p.x - lYoffset, p.y - lXoffset, crColour);

		crColour = GetColour(-Pi_on_2 + dAngle, crBright, crDark);
//		pDC->SetPixelV(p.x + lYoffset, p.y - lXoffset, crColour);

		crColour = GetColour(-dAngle, crBright, crDark);
		pDC->SetPixelV(p.x + lXoffset, p.y - lYoffset, crColour);

		

	lXoffset--;
		t8 = t8 - t6; 
		if (d2 < 0) 
		{ 
			lYoffset ++; t9 = t9 + t3; d2 = d2 - t8 + t5 + t9; 
		}
		else 
			d2 = d2 - t8 + t5; 
	

	} while (lXoffset >=0);

} 

/////////////////////////////////////////////////////////////////////////////
// CEllepticalButton

CEllepticalButton::CEllepticalButton()
{
	m_bDrawDashedFocusCircle = TRUE;
}

CEllepticalButton::~CEllepticalButton()
{
	m_rgn.DeleteObject();
}

BEGIN_MESSAGE_MAP(CEllepticalButton, CButton)
	//{{AFX_MSG_MAP(CEllepticalButton)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CEllepticalButton message handlers

void CEllepticalButton::PreSubclassWindow() 
{
	CButton::PreSubclassWindow();

	m_bDefault=GetStyle() & (DWORD)BS_DEFPUSHBUTTON; //this is necessary as 
	// the default button style gets removed when u make it ownerdrawn

	ModifyStyle(0, BS_OWNERDRAW);


	CRect rect;
	GetClientRect(rect);
	// Resize the window to make it square
	//commented by Raghav
	//rect.bottom = rect.right = min(rect.bottom,rect.right);


	// Get the vital statistics of the window
	m_ptCentre = rect.CenterPoint();
	m_nHorizontalRadius	= rect.right/2-1;
	m_nVerticalRadius	= rect.bottom/2-1;

	// Set the window region so mouse clicks only activate the round section 
	// of the button
	m_rgn.DeleteObject(); 
	SetWindowRgn(NULL, FALSE);
	m_rgn.CreateEllipticRgnIndirect(rect);
	SetWindowRgn(m_rgn, TRUE);

	// Convert client coords to the parents client coords
	ClientToScreen(rect);
	CWnd* pParent = GetParent();
	if (pParent) pParent->ScreenToClient(rect);

	// Resize the window
	MoveWindow(rect.left, rect.top, rect.Width(), rect.Height(), TRUE);
}

void CEllepticalButton::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct) 
{
	ASSERT(lpDrawItemStruct != NULL);
	
	CDC* pDC	 = CDC::FromHandle(lpDrawItemStruct->hDC);
	CRect rect = lpDrawItemStruct->rcItem;
	UINT state = lpDrawItemStruct->itemState;
	UINT nStyle = GetStyle();
	int nHorizontalRadius = m_nHorizontalRadius;
	int nVerticalRadius = m_nVerticalRadius;
	int nSavedDC = pDC->SaveDC();

	pDC->SelectStockObject(NULL_BRUSH);
	pDC->FillSolidRect(rect, RGB(240,200,90)); //設置按鈕的背景色

	// Draw the focus circle around the button either if it has the focus
	//or if it is the default button
	if ((state & ODS_FOCUS || m_bDefault)	&& m_bDrawDashedFocusCircle)
		 DrawEllipse(pDC, m_ptCentre, nHorizontalRadius--, nVerticalRadius--, RGB(0,0,0)); 
	


	// Draw the raised/sunken edges of the button (unless flat)
	if (nStyle & BS_FLAT) {
			DrawEllipse(pDC, m_ptCentre, nHorizontalRadius--, nVerticalRadius--, RGB(0,0,0));
			DrawEllipse(pDC, m_ptCentre, nHorizontalRadius--, nVerticalRadius--, ::GetSysColor(COLOR_3DHIGHLIGHT));
			
	} else {
		if ((state & ODS_SELECTED))	{
			DrawEllipse(pDC, m_ptCentre, nHorizontalRadius--, nVerticalRadius--, 
						 ::GetSysColor(COLOR_3DDKSHADOW), ::GetSysColor(COLOR_3DHIGHLIGHT));
			
			DrawEllipse(pDC, m_ptCentre, nHorizontalRadius--, nVerticalRadius--, 
						 ::GetSysColor(COLOR_3DSHADOW), ::GetSysColor(COLOR_3DLIGHT));
		} else {
			DrawEllipse(pDC, m_ptCentre, nHorizontalRadius--, nVerticalRadius--, 
						 ::GetSysColor(COLOR_3DHIGHLIGHT), ::GetSysColor(COLOR_3DDKSHADOW));
							//RGB(255,255,255), ::GetSysColor(COLOR_3DDKSHADOW));
			DrawEllipse(pDC, m_ptCentre, nHorizontalRadius--, nVerticalRadius--, 
						 ::GetSysColor(COLOR_3DHIGHLIGHT), ::GetSysColor(COLOR_3DSHADOW));
			
		}
	}
	
	// draw the text if there is any
	CString strText;
	GetWindowText(strText);

	if (!strText.IsEmpty())
	{
		CRgn rgn;
		rgn.CreateEllipticRgn(m_ptCentre.x-nHorizontalRadius, m_ptCentre.y-nVerticalRadius, 
								m_ptCentre.x+nHorizontalRadius, m_ptCentre.y+nVerticalRadius);
		pDC->SelectClipRgn(&rgn);

		CSize Extent = pDC->GetTextExtent(strText);
		CPoint pt = CPoint( m_ptCentre.x - Extent.cx/2, m_ptCentre.y - Extent.cy/2 );

		if (state & ODS_SELECTED) pt.Offset(1,1);

		pDC->SetBkMode(TRANSPARENT);

		if (state & ODS_DISABLED)
			pDC->DrawState(pt, Extent, strText, DSS_DISABLED, TRUE, 0, (HBRUSH)NULL);
		else
			pDC->TextOut(pt.x, pt.y, strText);

		pDC->SelectClipRgn(NULL);
		rgn.DeleteObject();
	}

	// Draw the focus circle on the inside of the button
	if ((state & ODS_FOCUS) && m_bDrawDashedFocusCircle)
		DrawEllipse(pDC, m_ptCentre, nHorizontalRadius-2, nVerticalRadius-2, RGB(0,0,0), TRUE);
		


	pDC->RestoreDC(nSavedDC);
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人app下载| aaa亚洲精品| 亚洲成人动漫在线免费观看| 亚洲视频资源在线| 国产精品美女一区二区| 国产午夜精品在线观看| 欧美精品一区二区久久婷婷| 精品国精品国产| 精品精品国产高清一毛片一天堂| 国产日韩影视精品| 久久久国产午夜精品| 欧美激情一区二区三区全黄| 国产精品久久久久久福利一牛影视| 国产99久久久精品| 成人免费观看男女羞羞视频| 成人免费电影视频| 91香蕉国产在线观看软件| 91视频在线观看| 欧美性生活大片视频| 91精品国产色综合久久不卡蜜臀| 国产精品夜夜爽| 成人精品小蝌蚪| 色综合激情久久| 91精品国产一区二区三区蜜臀| 国产一区二区三区美女| 国产成人99久久亚洲综合精品| 午夜久久久久久久久久一区二区| 久久色在线视频| 国产精品久久午夜夜伦鲁鲁| 亚洲精品第1页| 免费人成在线不卡| 成人三级在线视频| 在线观看www91| 日韩精品一区二区三区视频| 久久精品视频在线看| 亚洲美女精品一区| 日韩不卡免费视频| 福利电影一区二区三区| 色国产综合视频| 91精品久久久久久蜜臀| 久久久久久99精品| 亚洲精品日韩综合观看成人91| 久久久国产一区二区三区四区小说| 欧美精品日韩精品| 精品成人免费观看| 中文字幕中文字幕一区| 丝袜亚洲另类丝袜在线| 国产精品99久久久久久似苏梦涵| 日韩电影在线观看电影| 国产成人免费视频一区| 欧美视频一区二区在线观看| 久久久噜噜噜久噜久久综合| 亚洲精品视频一区二区| 久久国产精品露脸对白| 91行情网站电视在线观看高清版| 国产999精品久久久久久绿帽| 久久精品国产第一区二区三区| 亚洲成a天堂v人片| 国产成人av网站| 欧美日韩国产高清一区二区三区 | 一区二区三区电影在线播| 日韩在线卡一卡二| 成a人片国产精品| 欧美一区2区视频在线观看| 中文无字幕一区二区三区| 亚洲一区国产视频| 成人妖精视频yjsp地址| 日韩视频123| 亚洲精品免费电影| 成人涩涩免费视频| 精品国产一区二区精华| 亚洲成人动漫在线免费观看| 成人h精品动漫一区二区三区| 成人福利在线看| 日韩欧美久久久| 亚洲午夜久久久久久久久电影网| 亚洲一区免费在线观看| 成人一级黄色片| 久久久久久久久岛国免费| 久久97超碰色| 欧美色男人天堂| 亚洲精品自拍动漫在线| 成人av午夜电影| 久久精品男人天堂av| 精品一区二区三区在线播放视频 | 欧美久久久久久久久| 亚洲日本护士毛茸茸| 丰满岳乱妇一区二区三区| 久久这里只精品最新地址| 青草国产精品久久久久久| 欧美视频三区在线播放| 一区二区三区中文字幕| av在线播放一区二区三区| 日本一区二区三区视频视频| 国产一区二区精品久久99| 欧美日韩国产在线观看| 欧美成人在线直播| 亚洲欧洲日产国产综合网| 丁香一区二区三区| 亚洲精品在线免费观看视频| 婷婷国产v国产偷v亚洲高清| 91成人免费在线视频| 亚洲男人的天堂在线观看| 成人在线综合网| 久久先锋影音av| 老鸭窝一区二区久久精品| 欧美在线观看18| 亚洲精品视频在线看| 99国产精品99久久久久久| 久久综合成人精品亚洲另类欧美| 欧美激情资源网| 国产曰批免费观看久久久| 日韩一级高清毛片| 日本 国产 欧美色综合| 欧美精品日韩一区| 亚洲蜜臀av乱码久久精品| 欧美日韩中文字幕一区| 一区二区三区 在线观看视频| 天堂久久久久va久久久久| 欧美在线小视频| 亚洲已满18点击进入久久| 一本久久a久久免费精品不卡| 日韩写真欧美这视频| 蜜臀精品久久久久久蜜臀| 777午夜精品免费视频| 日韩精品免费专区| 91精品国产全国免费观看| 日韩电影免费在线观看网站| 欧美v国产在线一区二区三区| 国产精品久久久久久久岛一牛影视 | 成人免费毛片app| 中文字幕av一区二区三区免费看| 亚洲国产精品影院| 欧美乱妇15p| 国产美女精品人人做人人爽 | 欧美日韩视频第一区| 亚洲国产一区二区三区| 在线观看国产91| 亚洲一区成人在线| 精品动漫一区二区三区在线观看| 亚洲一区在线播放| 欧美一区三区四区| 精一区二区三区| 国产亚洲欧美一区在线观看| 国产91丝袜在线播放| 一区二区三区久久| 欧美日本国产视频| 韩国一区二区三区| 中文字幕不卡在线播放| 欧美在线视频日韩| 美女视频一区二区| 国产精品毛片久久久久久| 91成人国产精品| 国产一区二区毛片| 一区二区三区在线影院| 欧美亚洲国产一区在线观看网站 | 日韩欧美国产一区二区在线播放| 亚洲精品国产无天堂网2021| 欧美一级国产精品| 粉嫩av一区二区三区在线播放| 欧美电影在哪看比较好| 国产乱妇无码大片在线观看| 亚洲欧洲在线观看av| 欧美日韩成人综合| 国产乱码精品一区二区三| 亚洲欧美一区二区不卡| 在线成人免费视频| 99久久夜色精品国产网站| 青青草伊人久久| 日本一区二区视频在线| 欧美日本韩国一区| 成人视屏免费看| 蜜臀久久久久久久| 亚洲精品免费在线播放| 精品国产免费一区二区三区香蕉| 奇米影视7777精品一区二区| 久久久亚洲欧洲日产国码αv| 青青草伊人久久| 中文字幕在线播放不卡一区| 欧美大片国产精品| 在线观看91精品国产入口| 国产乱码精品一区二区三区av| 精品噜噜噜噜久久久久久久久试看 | www国产成人| 欧美美女网站色| 91麻豆视频网站| 国产成人欧美日韩在线电影| 日本色综合中文字幕| 亚洲精品亚洲人成人网| 国产亚洲欧美在线| 91.com视频| 国产99久久久国产精品潘金网站| 国产精品三级在线观看| 欧美电视剧在线看免费| 欧美日韩免费高清一区色橹橹| 亚洲成a人片在线观看中文| 精品国产免费一区二区三区四区| av高清久久久| 国产精品亚洲а∨天堂免在线| 国产欧美日韩中文久久|