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

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

?? macbuttons.cpp

?? 這是我仿照串口助手(龔建偉)作的一個例子并修正了其中的一些bug
?? CPP
?? 第 1 頁 / 共 5 頁
字號:
/////////////////////////////////////////////////////////////////////////////
//
// MacButtons.cpp : implementation file
//
// Feel free to modifiy and/or distribute this file, but
// do not remove this header.
//
// I would appreciate a notification of any bugs discovered or 
// improvements that could be made.
//
// This file is provided "as is" with no expressed or implied warranty.
//
/////////////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "MacButtons.h"

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


/////////////////////////////////////////////////////////////////////////////
//
//	CMacButton class, version 2.0
//
//	Copyright (c) 1999 Paul Meidinger (pmmeidinger@yahoo.com)
//
//	History:
//		PMM	12/13/1999		Initial implementation.		
//
//		PMM	12/29/1999		Minor changes made.
//
/////////////////////////////////////////////////////////////////////////////

//-------------------------------------------------------------------
//
CMacButton::CMacButton()
//
// Return Value:	None.
//
// Parameters	:	None.
//
// Remarks		:	Standard constructor.
//
{
	m_nType = TYPE_STANDARD;

	m_nCheck = 0;
	m_bMouseDown = FALSE;

	m_bBold = FALSE;

	m_hIcon = NULL;
	m_hBitmap = NULL;
	m_sizeImage = CSize(0, 0);

	m_nImageEffect = 0;

	GetColors();
	CreatePens();
}	// CMacButton

//-------------------------------------------------------------------
//
CMacButton::~CMacButton()
//
// Return Value:	None.
//
// Parameters	:	None.
//
// Remarks		:	Destructor.
//
{
	DeletePens();
}	// ~CMacButton


BEGIN_MESSAGE_MAP(CMacButton, CButton)
	//{{AFX_MSG_MAP(CMacButton)
	ON_WM_SYSCOLORCHANGE()
	ON_WM_LBUTTONDBLCLK()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CMacButton message handlers

//-------------------------------------------------------------------
//
void CMacButton::PreSubclassWindow() 
//
// Return Value:	None.
//
// Parameters	:	None.
//
// Remarks		:	This member function is called by the framework to 
//						allow other necessary subclassing to occur before the 
//						window is subclassed. Adds the BS_OWNERDRAW style.
//
{
	CButton::PreSubclassWindow();
	ModifyStyle(0, BS_OWNERDRAW);
}	// PreSubclassWindow

//-------------------------------------------------------------------
//
void CMacButton::DrawItem(LPDRAWITEMSTRUCT lpDIS) 
//
// Return Value:	None.
//
// Parameters	:	lpDIS - A long pointer to a DRAWITEMSTRUCT structure.
//
// Remarks		:	Called by the framework when a visual aspect of an 
//						owner-drawn button has changed.
//
{
	DrawButton(lpDIS);
}	// DrawItem

//-------------------------------------------------------------------
//
void CMacButton::DrawButton(LPDRAWITEMSTRUCT lpDIS)
//
// Return Value:	None.
//
// Parameters	:	lpDIS - A long pointer to a DRAWITEMSTRUCT structure.
//
// Remarks		:	Draws a Mac button.
//
{
	CDC* pDC = CDC::FromHandle(lpDIS->hDC);
	CRect rectItem(lpDIS->rcItem);

	UINT nState = lpDIS->itemState;
	UINT nStyle = GetStyle();
	BOOL bPushLike = BOOL(nStyle & BS_PUSHLIKE);

	// Create a mem DC for drawing
	CDC dcMem;
	dcMem.CreateCompatibleDC(pDC);
	CBitmap bmp;
	bmp.CreateCompatibleBitmap(pDC, rectItem.Width(), rectItem.Height());
	CBitmap *pOldBmp = dcMem.SelectObject(&bmp);

	int nSaveDC = dcMem.SaveDC();

	CBrush *pOldBrush = (CBrush *)dcMem.SelectStockObject(NULL_BRUSH);
	dcMem.FillSolidRect(rectItem, m_crFace);

	// If the button is standard or pushlike, draw it now.
	// Wait until after drawing the text/image and focus to draw
	//	the radio button or check box. This way, the text or image
	// will not cover the radio or check.
	if (m_nType == TYPE_STANDARD)
		DrawStandardButton(&dcMem, rectItem, nStyle, nState);
	else if (bPushLike)
		DrawPushLikeButton(&dcMem, rectItem, nStyle, nState);

	CRect rectText(rectItem);
	CRect rectImage(rectItem);
	CString sText;
	GetWindowText(sText);

	// Draw an image or the text.
	if (m_hIcon || m_hBitmap)
		DrawImage(&dcMem, rectImage, nStyle, nState);
	else
		DrawButtonText(&dcMem, rectText, sText, nStyle, nState);

	// Draw the focus rect.
	if (nState & ODS_FOCUS)
	{
		if ((m_nType == TYPE_STANDARD) || bPushLike)
		{
			rectText = lpDIS->rcItem;
			rectText.DeflateRect(4, 4, 4, 4);
			dcMem.DrawFocusRect(rectText);
		}
		else if (m_hIcon || m_hBitmap)
		{
			rectImage.InflateRect(1, 1, 1, 1);
			if (rectImage.top < rectItem.top)
				rectImage.top = rectItem.top;
			if (rectImage.bottom > rectItem.bottom)
				rectImage.bottom = rectItem.bottom;
			if (rectImage.left < rectItem.left)
				rectImage.left = rectItem.left;
			if (rectImage.right > rectItem.right)
				rectImage.right = rectItem.right;

			dcMem.DrawFocusRect(rectImage);
		}
		else
		{
			rectText.InflateRect(1, 1, 1, 2);
			if (rectText.top < rectItem.top)
				rectText.top = rectItem.top;
			if (rectText.bottom > rectItem.bottom)
				rectText.bottom = rectItem.bottom;
			if (rectText.left < rectItem.left)
				rectText.left = rectItem.left;
			if (rectText.right > rectItem.right)
				rectText.right = rectItem.right;

			dcMem.DrawFocusRect(rectText); 
		}
	}	// if the button has focus

	// Draw the check box or radio button now.
	if (!bPushLike)
	{
		// Determine the rect for the check mark.
		CRect rectCheck = GetCheckRect(rectItem, nStyle);

		if (m_nType == TYPE_CHECKBOX)
			DrawCheckBox(&dcMem, rectCheck, nStyle, nState);
		else if (m_nType == TYPE_RADIO)
			DrawRadioButton(&dcMem, rectCheck, nStyle, nState);
	}

	pDC->BitBlt(rectItem.left, rectItem.top, rectItem.Width(), rectItem.Height(), &dcMem, rectItem.left, rectItem.top, SRCCOPY);

	// Clean up.
	dcMem.SelectObject(pOldBrush);
	dcMem.SelectObject(pOldBmp);
	dcMem.RestoreDC(nSaveDC);
	dcMem.DeleteDC();
	bmp.DeleteObject();
}	// DrawButton

//-------------------------------------------------------------------
//
void CMacButton::DrawStandardButton(CDC *pDC, const CRect &rect, UINT nStyle, UINT nState)
//
// Return Value:	None.
//
// Parameters	:	pDC - A pointer to the DC to draw on.
//						rect - The button rectangle.
//						nStyle - The button's style.
//						nState - The button's state.
//
// Remarks		:	Draws the button.
//
{
	// Draw a flat button.
	if (nStyle & BS_FLAT)
	{
		COLORREF crFill = ::GetSysColor(COLOR_WINDOW);
		CBrush brFill(nState & ODS_SELECTED ? ~crFill : crFill);
		CBrush *pOldBrush = (CBrush *)pDC->SelectObject(&brFill);
		CPen pen;
		if (nState & ODS_DISABLED)
			pen.CreatePen(PS_SOLID, 1, m_crShadow);
		else if (m_nCheck || m_bMouseDown)
			pen.CreatePen(PS_SOLID, 1, crFill);
		else
			pen.CreatePen(PS_SOLID, 1, ~crFill);
		CPen *pOldPen = (CPen *)pDC->SelectObject(&pen);
		pDC->RoundRect(rect, CPoint(6, 6));
		pDC->SelectObject(pOldBrush);
		pDC->SelectObject(pOldPen);
		pen.DeleteObject();
		return;
	}	// if flat
	
	CBrush brFill(nState & ODS_SELECTED ? m_crLiteShadow : m_crFace);
	CBrush *pOldBrush	= (CBrush *)pDC->SelectObject(&brFill);
	CPen penFrame(PS_SOLID, 1, ::GetSysColor(COLOR_WINDOWFRAME));
	CPen *pOldPen = (CPen *)pDC->SelectObject(nState & ODS_DISABLED ? &m_penShadow : &penFrame);

	// Draw a 3D button.
	if (nState & ODS_DISABLED)
		pDC->RoundRect(rect, CPoint(6, 6));
	else if (nState & ODS_SELECTED)
		DrawPressedPushButton(pDC, rect);
	else
		DrawUnpressedPushButton(pDC, rect);

	pDC->SelectObject(pOldBrush);
	pDC->SelectObject(pOldPen);
}	// DrawStandardButton

//-------------------------------------------------------------------
//
void CMacButton::DrawCheckBox(CDC *pDC, CRect rect, UINT nStyle, UINT nState)
//
// Return Value:	None.
//
// Parameters	:	pDC - A pointer to the DC to draw on.
//						rect - The check mark's rectangle.
//						nStyle - The button's style.
//						nState - The button's state.
//
// Remarks		:	Draws the check mark.
//
{
	BOOL bDisabled = nState & ODS_DISABLED;
	
	// Deflate the rect by two on the right (for the check mark's shadow).
	rect.DeflateRect(0, 0, 2, 0);

	CPen *pOldPen = pDC->GetCurrentPen();
	CBrush *pOldBrush = pDC->GetCurrentBrush();

	// Draw a flat checkbox.
	if (nStyle & BS_FLAT)
	{
		COLORREF crFrame = ::GetSysColor(COLOR_WINDOW);
		CPen penFrame(PS_SOLID, 1, ::GetSysColor(COLOR_WINDOWFRAME));
		CBrush brFill(crFrame);
		pDC->SelectObject(&penFrame);
		pDC->SelectObject(&brFill);

		pDC->Rectangle(rect);

		if (bDisabled)
		{
			for (int i = rect.left + 1, j = rect.top + 1; i < rect.right; i += 2, j += 2)
			{
				pDC->SetPixel(i, rect.top, crFrame);
				pDC->SetPixel(i - 1, rect.bottom - 1, crFrame);
				pDC->SetPixel(rect.left, j, crFrame);
				pDC->SetPixel(rect.right - 1, j - 1, crFrame);
			}
		}

		rect.DeflateRect(1, 1, 1, 1);

		if (m_bMouseDown)
			pDC->Rectangle(rect);

		// Inflate the rect by two on the right (for the check mark's shadow).
		rect.InflateRect(0, 0, 2, 0);

		int nLeft = rect.left;
		int nTop = rect.top;

		CPen penDkShadow(PS_SOLID, 1, m_crDkShadow);
		pDC->SelectObject(&penDkShadow);

		// Draw the check, cross, or tri-state mark.
		if (m_nCheck == 1)
		{
			if (m_nCheckStyle == CHECK_STYLE_CHECK)
			{
				if (!bDisabled)
				{
					pDC->MoveTo(nLeft + 1, nTop + 4);
					pDC->LineTo(nLeft + 4, nTop + 7);
					pDC->LineTo(nLeft + 12,nTop - 1);
				}
				pDC->MoveTo(nLeft + 2, nTop + 4);
				pDC->LineTo(nLeft + 4, nTop + 6);
				pDC->LineTo(nLeft + 11, nTop -1);
			}
			else if (m_nCheckStyle == CHECK_STYLE_CROSS)
			{
				pDC->MoveTo(nLeft, nTop);
				pDC->LineTo(nLeft + 10, nTop + 10);

				int nAdjust = bDisabled ? 1 : 0;
				pDC->MoveTo(nLeft + nAdjust, nTop + 9 - nAdjust);
				pDC->LineTo(nLeft + 10 - nAdjust, nTop - 1 + nAdjust);
			}
		}
		else if (m_nCheck == 2)
		{
			pDC->SelectObject(&m_penDkShadow);
			pDC->MoveTo(nLeft + 2, nTop + 4);
			pDC->LineTo(nLeft + 8, nTop + 4);
			pDC->MoveTo(nLeft + 2, nTop + 5);
			pDC->LineTo(nLeft + 8, nTop + 5);
		}

	}	// if flat
	// Else draw a 3D checkbox.
	else
	{
		CBrush brFrame(bDisabled ? m_crShadow : ::GetSysColor(COLOR_WINDOWFRAME));
		pDC->FrameRect(rect, &brFrame);
		rect.DeflateRect(1, 1);

		if (m_bMouseDown)
		{								
			CBrush brShadow(m_crLiteShadow);
			pDC->FillRect(rect, &brShadow);
			pDC->Draw3dRect(rect, m_crShadow, m_crLiteFace);
		}
		else
		{
			pDC->FillSolidRect(rect, m_crFace);

			if (!bDisabled)
				pDC->Draw3dRect(rect, m_crHilight, m_crShadow);
		}

		pDC->SetPixel(CPoint(rect.right - 1, rect.top), m_crFace);
		pDC->SetPixel(CPoint(rect.left, rect.bottom - 1), m_crFace);

		// Inflate the rect by two on the right (for the check mark's shadow).
		rect.InflateRect(0, 0, 2, 0);

		int nLeft = rect.left;
		int nTop = rect.top;

		// Draw the check, cross, or tri-state mark.
		if (m_nCheck == 1)
		{
			// Draw the check mark's shadow
			if (m_nCheckStyle == CHECK_STYLE_CHECK)
			{
				// Draw the check mark's shadow
				pDC->SelectObject(bDisabled ? &m_penLiteShadow : &m_penShadow);
				pDC->MoveTo(nLeft + 4, nTop + 8);
				pDC->LineTo(nLeft + 9, nTop + 3);
				pDC->LineTo(nLeft + 9, nTop + 5);

				pDC->SelectObject(&m_penLiteShadow);
				pDC->MoveTo(nLeft + 2, nTop + 6);
				pDC->LineTo(nLeft + 4, nTop + 8);
				pDC->MoveTo(nLeft + 5, nTop + 8);
				pDC->LineTo(nLeft + 9, nTop + 4);

				pDC->SetPixel(nLeft + 11, nTop + 1, bDisabled ? m_crLiteShadow : m_crShadow);
				pDC->SetPixel(nLeft + 12, nTop + 1, m_crLiteShadow);
				pDC->SetPixel(nLeft + 11, nTop + 2, m_crLiteShadow);

				// Draw the check mark.
				pDC->SelectObject(bDisabled ? &m_penShadow : &m_penDkShadow);
				pDC->MoveTo(nLeft + 1, nTop + 4);
				pDC->LineTo(nLeft + 4, nTop + 7);
				pDC->LineTo(nLeft + 12,nTop - 1);
				pDC->MoveTo(nLeft + 2, nTop + 4);
				pDC->LineTo(nLeft + 4, nTop + 6);
				pDC->LineTo(nLeft + 11, nTop -1);
			}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久精品国产一区二区三| 成人美女视频在线看| 豆国产96在线|亚洲| 在线视频你懂得一区二区三区| 欧美电影在线免费观看| 日本一区二区综合亚洲| 性久久久久久久| 色女孩综合影院| 国产偷国产偷亚洲高清人白洁| 亚洲美女一区二区三区| 国内不卡的二区三区中文字幕| 色菇凉天天综合网| 自拍偷自拍亚洲精品播放| 国模冰冰炮一区二区| 91麻豆精品国产91久久久使用方法 | 亚洲精品欧美二区三区中文字幕| 另类综合日韩欧美亚洲| 欧美色成人综合| 亚洲欧美日韩久久| eeuss鲁片一区二区三区 | 欧美福利电影网| 亚洲免费视频中文字幕| 国产+成+人+亚洲欧洲自线| 精品日韩99亚洲| 日韩成人伦理电影在线观看| 欧美视频在线观看一区| 一区二区三区资源| 99精品国产99久久久久久白柏| 久久久久久综合| 国产精品一区二区91| 欧美va亚洲va| 国产一区二区视频在线| 26uuu欧美| 久久91精品久久久久久秒播| 日韩西西人体444www| 日本不卡的三区四区五区| 欧美日本乱大交xxxxx| 午夜精品久久久久久久蜜桃app| 欧美在线播放高清精品| 亚洲精品视频免费观看| 色噜噜狠狠一区二区三区果冻| 亚洲综合在线五月| 91豆麻精品91久久久久久| 一区二区理论电影在线观看| 色屁屁一区二区| 石原莉奈一区二区三区在线观看 | 成+人+亚洲+综合天堂| 国产精品久久一卡二卡| 成人动漫中文字幕| 亚洲激情欧美激情| 欧美日韩国产综合视频在线观看| 石原莉奈在线亚洲二区| 精品免费一区二区三区| 国产91富婆露脸刺激对白| 一区二区三区四区在线| 欧美日韩免费视频| 久草中文综合在线| 国产精品无人区| 欧美日韩一区久久| 经典一区二区三区| 亚洲精品视频在线观看免费| 欧美日韩国产免费| 国产成人在线视频网址| 综合激情网...| 3d动漫精品啪啪1区2区免费| 极品少妇xxxx精品少妇偷拍| 国产精品亲子伦对白| 欧美日韩精品欧美日韩精品 | 日韩精品一区二区三区中文精品| 国产乱子轮精品视频| 国产精品久久久久精k8 | 天天操天天色综合| 精品999在线播放| 日本乱码高清不卡字幕| 美腿丝袜亚洲一区| 亚洲欧美电影一区二区| 日韩欧美中文字幕制服| 色综合久久中文字幕| 麻豆国产欧美一区二区三区| 最新成人av在线| 精品日韩成人av| 欧美日韩一区二区三区在线 | 美女mm1313爽爽久久久蜜臀| 中日韩av电影| 日韩欧美一区二区久久婷婷| 91色婷婷久久久久合中文| 国产自产视频一区二区三区| 亚洲一区二区三区三| 中文字幕永久在线不卡| 日韩亚洲欧美一区二区三区| 日本高清不卡在线观看| 国产成人精品1024| 久久精品国产亚洲aⅴ| 一区二区三区在线视频观看| 中文幕一区二区三区久久蜜桃| 3d动漫精品啪啪一区二区竹菊| 日本道色综合久久| 处破女av一区二区| 国产一区二区免费在线| 久久精品国产99国产精品| 亚洲综合激情网| 中文字幕在线一区免费| 国产亚洲精品免费| 欧美大白屁股肥臀xxxxxx| 欧美日韩一二三| 欧美亚洲禁片免费| 欧美视频在线不卡| 欧美色手机在线观看| 91免费版在线| 日本道色综合久久| 欧美写真视频网站| 欧美视频在线观看一区| 在线视频国产一区| 91黄色免费看| 欧美性猛交xxxx乱大交退制版| 色乱码一区二区三区88| 91福利国产精品| 欧美日韩专区在线| 欧美日韩免费观看一区三区| 欧美日本在线一区| 日韩欧美黄色影院| 精品国产123| 久久久精品一品道一区| 日本一区二区在线不卡| 国产精品欧美一区喷水| 亚洲色图.com| 一区二区三区在线免费视频| 亚洲一二三四在线观看| 午夜精品福利视频网站| 肉肉av福利一精品导航| 免费看欧美女人艹b| 国产很黄免费观看久久| 成人在线一区二区三区| 色婷婷亚洲精品| 欧美一区2区视频在线观看| 日韩欧美成人一区| 国产欧美日韩精品在线| 中文字幕在线不卡一区二区三区| 亚洲日本乱码在线观看| 亚洲国产精品久久久久秋霞影院 | www国产成人| 国产欧美日韩另类一区| 亚洲精品国产无天堂网2021| 日日夜夜免费精品| 国产乱码字幕精品高清av| 99久久综合色| 欧美精品免费视频| 国产欧美一区二区精品秋霞影院| 中文字幕欧美一| 日韩精品亚洲一区| av一本久道久久综合久久鬼色| 欧美在线观看视频在线| 久久精品一区四区| 午夜日韩在线电影| 懂色av中文字幕一区二区三区 | 色播五月激情综合网| 日韩一区二区免费电影| 国产精品毛片久久久久久久| 亚洲成av人片在线观看| 国产伦精品一区二区三区免费| 在线免费不卡视频| 久久九九久久九九| 亚洲午夜久久久久久久久久久 | 欧美中文字幕一区二区三区亚洲| 91精品国产乱码| 中文字幕日韩av资源站| 极品少妇xxxx精品少妇偷拍| 在线精品视频一区二区三四| 日韩欧美国产电影| 亚洲国产婷婷综合在线精品| 国产电影精品久久禁18| 欧美丰满一区二区免费视频| 亚洲天堂中文字幕| 国产一区二区免费在线| 51精品视频一区二区三区| 亚洲色欲色欲www在线观看| 国产精品456| 这里只有精品视频在线观看| 亚洲精品日韩综合观看成人91| 国产精品资源在线看| 日韩一区二区三区视频| 亚洲综合激情网| 日本精品一区二区三区四区的功能| 久久久久久免费网| 久久99久久久欧美国产| 欧美男人的天堂一二区| 一区二区三区91| 91蜜桃免费观看视频| 国产精品免费久久| 国产成人aaa| 国产欧美综合色| 成人午夜在线视频| 国产日产亚洲精品系列| 韩国精品久久久| 久久中文娱乐网| 国内精品视频666| 国产日韩一级二级三级| 国产在线精品一区二区夜色| 亚洲精品一区二区三区蜜桃下载| 蜜桃一区二区三区在线观看|