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

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

?? transparentbutton.cpp

?? evc 實現透明的按鈕
?? CPP
字號:
// TransParentButton.cpp : implementation file
//

#include "stdafx.h"
#include "TransParentButton.h"

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

/////////////////////////////////////////////////////////////////////////////
// CTransParentButton

CTransParentButton::CTransParentButton()
{
	m_bBkTransparent=true;
	m_bIsFlat=true;
	m_bHasFocus=false;
	m_bIsEnabled=true;
	m_bMove=false;
	m_bDCStored=false;
	m_hMouseInIcon=NULL;
	m_hNormalIcon=NULL;
	m_IconAlign=AL_LEFT;
	m_DrawState=ST_MOVEOUT;
	m_IconYPos=5;
	m_IconXPos=5;
	m_bUseIcon=false;
	m_clNormalText=::GetSysColor(COLOR_WINDOWTEXT);
	m_clActiveText=::GetSysColor(COLOR_HIGHLIGHT);
	m_clMouseDownText=::GetSysColor(COLOR_WINDOWTEXT);
	m_clText=m_clNormalText;
}

CTransParentButton::~CTransParentButton()
{
}


BEGIN_MESSAGE_MAP(CTransParentButton, CButton)
	//{{AFX_MSG_MAP(CTransParentButton)
	ON_WM_ERASEBKGND()
	ON_WM_MOUSEMOVE()
	ON_WM_LBUTTONDOWN()
	ON_WM_TIMER()
	ON_WM_LBUTTONUP()
	ON_WM_SETCURSOR()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CTransParentButton message handlers

void CTransParentButton::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct) 
{
	// TODO: Add your code to draw the specified item
	if(lpDrawItemStruct->itemState & ODS_DISABLED )
	{
		m_bIsEnabled=false;
		m_DrawState=ST_MOVEOUT;
	}
	if(!(lpDrawItemStruct->itemState & ODS_DISABLED) )
	{
		m_bIsEnabled=true;
	}
	if(lpDrawItemStruct->itemState & ODS_FOCUS)
	{
		m_bHasFocus=true;
	}
	if( !(lpDrawItemStruct->itemState & ODS_FOCUS) )
	{
		m_bHasFocus=false;
	}
	Draw();
}

void CTransParentButton::PreSubclassWindow() 
{
	// TODO: Add your specialized code here and/or call the base class
    SetButtonStyle(GetButtonStyle() | BS_OWNERDRAW);	
	//CButton::PreSubclassWindow();
}

BOOL CTransParentButton::OnEraseBkgnd(CDC* pDC) 
{
	// TODO: Add your message handler code here and/or call default
	// First we should save our DC.
	if(!m_bDCStored)
	{
    	CRect  clientRect;
	    GetClientRect(&clientRect);
	    int cx=clientRect.Width ();
	    int cy=clientRect.Height ();
		// Store our orignal DC.
		CBitmap	bitmap;
		memDC.CreateCompatibleDC (pDC);
		bitmap.CreateCompatibleBitmap (pDC,cx,cy);
		memDC.SelectObject (&bitmap);
		memDC.BitBlt (0,0,cx,cy,pDC,0,0,SRCCOPY);
		m_bDCStored=true;
	}
	// We'll not erase our button's back ground.
	return TRUE;
}

void CTransParentButton::OnMouseMove(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default
	if (nFlags & MK_LBUTTON)
		return;
	if(!m_bMove && m_bIsEnabled)
	{
		// We'll not draw this button's borders more than one time.
		m_bMove=true;
		m_DrawState=ST_MOVEIN;
		Draw();
		SetTimer(1,10,NULL);
	}
	CButton::OnMouseMove(nFlags, point);
}

void CTransParentButton::OnLButtonDown(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default
	m_DrawState=ST_MOUSEDOWN;
    Draw();
	CButton::OnLButtonDown(nFlags, point);
}

void CTransParentButton::DrawBorders()
{
	CClientDC	dc(this);
	CRect	clientRect;
	GetClientRect(&clientRect);

	COLORREF  clBtnHiLight=::GetSysColor(20);
	COLORREF  clBtnShadow=::GetSysColor(COLOR_BTNSHADOW);
	COLORREF  clBtnBlack=RGB(0,0,0);

	if(!m_bIsFlat)
	{
		// Draw a ordinary-look button.
		CRect  drawRect=clientRect;
		switch(m_DrawState)
		{
			case ST_MOUSEUP:
			case ST_MOVEOUT:
			case ST_MOVEIN:
				dc.Draw3dRect (&drawRect,clBtnHiLight,clBtnBlack);
				drawRect.DeflateRect(1, 1);
				dc.Draw3dRect (&drawRect,clBtnHiLight,clBtnShadow);
				drawRect.InflateRect(1, 1);
				break;
			case ST_MOUSEDOWN:
				dc.Draw3dRect (&drawRect,clBtnBlack,clBtnHiLight);
				drawRect.DeflateRect(1, 1);
				dc.Draw3dRect (&drawRect,clBtnShadow,clBtnHiLight);
				drawRect.InflateRect(1, 1);
				break;
			default:
				break;
		}
		if(m_bHasFocus)
		{
		    CBrush br(RGB(0,0,0));  
			dc.FrameRect(&drawRect, &br);
			CPen  pen(PS_SOLID,0,clBtnBlack);
			dc.SelectObject (&pen);
			dc.MoveTo(drawRect.right-2,drawRect.top );
			dc.LineTo(drawRect.right-2,drawRect.bottom-2 );
			dc.LineTo(drawRect.left,drawRect.bottom-2 );
			drawRect.DeflateRect(4, 4);
			dc.DrawFocusRect(&drawRect);
		}
	}
	else
	// We'll draw a flat button.
	{
		if(!m_bIsEnabled)
			return;
		switch(m_DrawState)
		{
			case ST_MOUSEUP:
			case ST_MOVEIN:
				dc.Draw3dRect (&clientRect,
					::GetSysColor(20),
					::GetSysColor(COLOR_BTNSHADOW) );
				break;
			case ST_MOUSEDOWN:
				dc.Draw3dRect (&clientRect,
					::GetSysColor(COLOR_BTNSHADOW),
					::GetSysColor(20) );
				break;
			default:
				break;
		}
	}
}


void CTransParentButton::OnTimer(UINT nIDEvent) 
{
	// TODO: Add your message handler code here and/or call default
	if(nIDEvent!=1)
		return;
	CPoint	point;
	CRect	rect;
	GetWindowRect(&rect);	
	GetCursorPos(&point);
	// If the mouse left our button,redraw it.
	if (!rect.PtInRect(point) && m_bMove && m_bIsEnabled)
	{
		KillTimer (1);
		m_DrawState=ST_MOVEOUT;
		m_bMove=false;
		Draw();
	}
	CButton::OnTimer(nIDEvent);
}

void CTransParentButton::Refresh()
{
	CRect	rect;
	GetClientRect(&rect);	
	CClientDC  dc(this);
	if(m_bBkTransparent==false)
		dc.FillRect(&rect,&CBrush(::GetSysColor(COLOR_BTNFACE)) );
	else
		dc.BitBlt (0,0,rect.Width (),rect.Height (),&memDC,0,0,SRCCOPY);
}

void CTransParentButton::OnLButtonUp(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default
	m_DrawState=ST_MOUSEUP;

/*	CString  str;
	str.Format ("%d",m_IconXPos);
	MessageBox(str);
*/
    Draw();
	CButton::OnLButtonUp(nFlags, point);
}

void CTransParentButton::DrawText()
{
	CString		itemString;
	CRect  clientRect;
	CClientDC  dc(this);
	GetClientRect(&clientRect);
	GetWindowText(itemString);
	// Draw text depend on different state.
	if(itemString)
	{
		// First Get some necessary infomation.
		CSize size=dc.GetTextExtent (itemString);
		int rectwidth=clientRect.Width();
		int rectheight=clientRect.Height();
		int textwidth=size.cx ;
		int textheight=size.cy ;
		int iconwidth=::GetSystemMetrics(SM_CXICON);
		int iconheight=::GetSystemMetrics(SM_CYICON);
		int x,y; // the position of the text.
		// Next caculate the text output position.
		switch(m_IconAlign)
		{
			case AL_LEFT:
			{
				if(m_bUseIcon==true)
				{
					x=m_IconXPos+iconwidth+
						(rectwidth-textwidth-m_IconXPos-iconwidth)/2;
				}
				else
				{
					x=(rectwidth-textwidth)/2;
				}
				y=(rectheight-textheight)/2;
				break;
			}
			case AL_TOP:
			{
				if(m_bUseIcon==true)
				{
					y=m_IconYPos+iconheight+
						(rectheight-textheight-m_IconYPos-iconheight)/2;
				}
				else
				{
					y=(rectheight-textheight)/2;
				}
				x=(rectwidth-textwidth)/2;
				break;
			}
			default:
				break;
		}
		// Should we draw the text as if it is disabled?
		if(!m_bIsEnabled)
		{
			// .. Yes.Now draw the text disabled.
//liu			dc.DrawState(CPoint(x,y),CSize(0,0),itemString,0x0001 | 0x0020,FALSE,0,(HBRUSH)NULL);
		}
		else
		{
			switch(m_DrawState)
			{
				case ST_MOVEIN:
				{
					m_clText=m_clActiveText;
				}
					break;
				case ST_MOVEOUT:
				{
					m_clText=m_clNormalText;
				}
					break;
				case ST_MOUSEUP:
				{
					m_clText=m_clActiveText;
				}
					break;
				case ST_MOUSEDOWN:
				{
					m_clText=m_clNormalText;
				}
					break;
				default:
					break;
			}
			// Draw the text,as if it is pressed
			if(m_DrawState==ST_MOUSEDOWN)
			{
				x++;
				y++;
			}
			dc.SetTextColor(m_clText);
			dc.SetBkMode(TRANSPARENT);
//liu			dc.TextOut (x,y,itemString);
//			dc.ExTextOut (x,y,itemString);
		}
	}
}

void CTransParentButton::SetIcon(HICON  hNormal,HICON hMouseIn)
{
	m_hNormalIcon=hNormal;
	m_hMouseInIcon=hMouseIn;
	m_bUseIcon=true;
}

void CTransParentButton::DrawIcon()
{
	if(m_bIsEnabled)
	{
		switch(m_DrawState)
		{
			case ST_MOVEIN:
			case ST_MOUSEDOWN:
			case ST_MOUSEUP:
				{
					if(m_hMouseInIcon!=NULL)
					{
						DrawIcon(m_hMouseInIcon);
					}
				}
				break;
			case ST_MOVEOUT:
				{
					if(m_hNormalIcon!=NULL)
						DrawIcon(m_hNormalIcon);
				}
				break;
			default:
				break;
		}
	}
	else
	{
	    DrawIcon(m_hNormalIcon,TRUE);
	}
}

void CTransParentButton::DrawIcon(HICON hIcon,BOOL bDisabled)
{
	CRect	clientrect;
	CClientDC	dc(this);
	int cx=::GetSystemMetrics(SM_CXICON);
	int cy=::GetSystemMetrics(SM_CYICON);
	int x,y; // the icon's output position.
	int rectwidth,rectheight;
	GetClientRect(&clientrect);
	rectwidth=clientrect.Width ();
	rectheight=clientrect.Height ();

	CString		itemString;
	GetWindowText(itemString);

	if(itemString!="")
	{
		switch(m_IconAlign)
		{
			case AL_LEFT:
			// draw the icon left.
			{
				x=m_IconXPos;
				y=(rectheight-cy)/2;
				break;
			}
			case AL_TOP:
			{
				x=(rectwidth-cx)/2;
				y=m_IconYPos;
				break;
			}
			default:
				break;
		}
	}
	else
	// If there is not any text,we'll center the icon.
	{
		x=(rectwidth-cx)/2;
		y=(rectheight-cy)/2;
	}
	// Draw the icon,as if it is pressed
	if(m_DrawState==ST_MOUSEDOWN)
	{
		x++;
		y++;
	}
	// Draw the icon.
	if(!bDisabled)
	{
	    dc.DrawIcon (x,y,hIcon);
	}
	else
	{
//liu    	dc.DrawState(CPoint(x,y),CSize(32,32),hIcon,0x0003 | 0x0020,(HBRUSH)NULL);
	}
}

void CTransParentButton::Draw()
{
	Refresh();
	DrawBorders();
	DrawIcon();
	DrawText();
}

void CTransParentButton::SetIconXPos(int x)
{
	m_IconXPos=x;
	Draw();
}

void CTransParentButton::SetAlign(int nAlign)
{
	m_IconAlign=nAlign;
	Draw();
}

void CTransParentButton::SetIconYPos(int y)
{
	m_IconYPos=y;
	Draw();
}

void CTransParentButton::SetActiveTextColor(COLORREF color)
{
	m_clActiveText=color;
	Draw();
}

void CTransParentButton::SetNormalTextColor(COLORREF color)
{
	m_clNormalText=color;
	Draw();
}

void CTransParentButton::SetMouseDownTextColor(COLORREF color)
{
	m_clMouseDownText=color;
	Draw();
}

void CTransParentButton::SetBkMode(bool bTransparent)
{
	m_bBkTransparent=bTransparent;
}

void CTransParentButton::SetStyle(bool bIsflat)
{
	m_bIsFlat=bIsflat;
}

BOOL CTransParentButton::SetCursor(UINT nCursorID)
{
	HINSTANCE hInstResource;
	// Destroy any previous cursor
	if (m_hCursor != NULL) ::DestroyCursor(m_hCursor);
	m_hCursor = NULL;

	// If we want a cursor
	if (nCursorID != -1)
	{
		hInstResource = AfxFindResourceHandle(MAKEINTRESOURCE(nCursorID),
											RT_GROUP_CURSOR);
		// Load icon resource
		m_hCursor = (HCURSOR)::LoadImage(hInstResource/*AfxGetApp()->m_hInstance*/, MAKEINTRESOURCE(nCursorID), IMAGE_CURSOR, 0, 0, 0);
		// If something wrong then return FALSE
		if (m_hCursor == NULL) return FALSE;
	}

	return TRUE;
}

BOOL CTransParentButton::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message) 
{
	// TODO: Add your message handler code here and/or call default
	if (m_hCursor != NULL)
	{
		::SetCursor(m_hCursor);
		return TRUE;
	}	
	return CButton::OnSetCursor(pWnd, nHitTest, message);
}

void CTransParentButton::SetIcon(UINT  nNormal,UINT nMouseIn)
{
	m_hNormalIcon=AfxGetApp()->LoadIcon(nNormal);
	m_hMouseInIcon=AfxGetApp()->LoadIcon(nMouseIn);
	m_bUseIcon=true;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲一区二区三区精品在线| 成人黄色电影在线| 性欧美大战久久久久久久久| 亚洲精品va在线观看| 亚洲欧美日韩久久精品| 国产精品国产三级国产a| 中文字幕一区二区三区不卡在线| 国产精品丝袜一区| 国产精品国产三级国产专播品爱网| 中文一区在线播放| 中文字幕综合网| 亚洲一区二区精品3399| 亚洲一二三四在线| 日韩专区欧美专区| 激情久久久久久久久久久久久久久久| 看电影不卡的网站| 高清国产一区二区| 97精品久久久午夜一区二区三区| 91麻豆精东视频| 欧美日韩一级二级三级| 在线电影一区二区三区| 欧美一区二区观看视频| 久久久不卡网国产精品二区| 国产精品热久久久久夜色精品三区 | 91香蕉视频mp4| 欧美在线看片a免费观看| 制服丝袜一区二区三区| 精品国产凹凸成av人导航| 日本一区免费视频| 亚洲午夜免费视频| 久久激情综合网| 国产ts人妖一区二区| 在线中文字幕一区二区| 日韩一二三区不卡| 国产精品久久久久久亚洲毛片| 亚洲美女电影在线| 久久精品国产久精国产| 成人免费毛片片v| 欧美日韩亚州综合| 久久免费电影网| 一区二区三区精品久久久| 免费精品99久久国产综合精品| 国产麻豆成人传媒免费观看| 日本高清不卡aⅴ免费网站| 91精品国产欧美一区二区18| 狠狠色丁香久久婷婷综| 色偷偷一区二区三区| 久久一区二区三区国产精品| 91老师国产黑色丝袜在线| 日韩欧美高清在线| 一区二区三区在线高清| 激情av综合网| 欧美日韩国产大片| 国产精品久久久久影视| 欧美bbbbb| 色综合一个色综合| 精品福利一二区| 香蕉成人伊视频在线观看| 国产盗摄一区二区| 欧美一区二区黄| 一区二区三区欧美视频| 丁香六月综合激情| 日韩亚洲欧美在线观看| 一区二区三区欧美亚洲| 粉嫩av一区二区三区| 欧美日韩免费高清一区色橹橹| 久久伊人中文字幕| 日本欧洲一区二区| 欧美伊人久久大香线蕉综合69| 中文一区在线播放| 韩国av一区二区三区在线观看| 欧美绝品在线观看成人午夜影视| 一区在线中文字幕| 国产一区二区三区av电影 | 成人欧美一区二区三区1314| 日本成人在线网站| 欧美无砖砖区免费| 亚洲欧美电影院| 成人午夜免费av| 国产香蕉久久精品综合网| 美国十次综合导航| 在线成人高清不卡| 亚洲国产综合色| 91蜜桃在线免费视频| 国产精品久久久久久久久久久免费看| 日韩高清不卡一区二区| 欧美在线999| 亚洲美女偷拍久久| 色偷偷久久一区二区三区| 国产精品盗摄一区二区三区| 国产精品1区2区3区在线观看| 欧美一级精品大片| 日本欧美一区二区| 91精品欧美综合在线观看最新| 亚洲第一激情av| 欧美三级中文字| 亚洲国产毛片aaaaa无费看 | 国产精品福利一区二区| 国产传媒一区在线| 欧美激情中文不卡| 成人伦理片在线| 成人免费视频在线观看| 99久久精品免费看国产免费软件| 国产精品激情偷乱一区二区∴| 成人免费毛片嘿嘿连载视频| 国产精品麻豆网站| www.日韩av| 夜夜揉揉日日人人青青一国产精品| 99re66热这里只有精品3直播 | 五月天欧美精品| 欧美精品v日韩精品v韩国精品v| 亚洲午夜av在线| 欧美放荡的少妇| 久久99精品久久久| 亚洲国产精品黑人久久久| 99久久er热在这里只有精品66| 成人高清视频在线| 亚洲精品va在线观看| 欧美精品久久一区| 精品无人区卡一卡二卡三乱码免费卡 | 久久久99免费| 成人毛片视频在线观看| 亚洲黄色免费网站| 欧美夫妻性生活| 精品一区二区三区欧美| 中文字幕+乱码+中文字幕一区| 91麻豆免费在线观看| 天天综合网 天天综合色| 精品国产第一区二区三区观看体验| 国产一二三精品| 亚洲人成网站影音先锋播放| 欧美日韩一区高清| 国产在线精品一区在线观看麻豆| 国产精品丝袜91| 欧美三级蜜桃2在线观看| 蜜桃精品视频在线| 国产精品久久久久一区| 欧美日韩国产美| 国产在线看一区| 日本aⅴ亚洲精品中文乱码| 精品久久久久av影院| 成人国产一区二区三区精品| 亚洲成人在线网站| 国产亚洲欧美日韩俺去了| 在线亚洲一区观看| 韩国视频一区二区| 自拍av一区二区三区| 日韩欧美成人激情| 色综合久久久久久久| 久久精品国产亚洲高清剧情介绍 | 欧美激情在线看| 欧美亚洲自拍偷拍| 国产在线视频精品一区| 一区二区成人在线| 久久综合成人精品亚洲另类欧美 | 2023国产精品自拍| 91一区二区在线| 久久99久久99| 亚洲一区二区三区四区五区黄| 久久精品亚洲精品国产欧美| 国产一区在线精品| 亚洲综合一区二区三区| 久久日一线二线三线suv| 欧洲精品视频在线观看| 成人午夜激情影院| 免费观看一级特黄欧美大片| 中文字幕一区二区视频| 日韩欧美国产wwwww| 欧美亚洲综合在线| 91在线视频播放| 激情文学综合网| 三级欧美在线一区| 亚洲精品中文字幕在线观看| 久久精品亚洲精品国产欧美 | 香港成人在线视频| 国产精品不卡一区二区三区| 日韩欧美一区二区免费| 欧美色综合网站| 99久久免费视频.com| 国产一区不卡视频| 久久国产尿小便嘘嘘尿| 日韩在线卡一卡二| 一区二区三区免费在线观看| 中文字幕av一区二区三区免费看 | 久久综合九色综合97婷婷| 欧美欧美欧美欧美首页| 91精彩视频在线| av中文字幕不卡| 成人黄色在线网站| 国产另类ts人妖一区二区| 蜜桃久久久久久久| 蜜桃在线一区二区三区| 亚洲va欧美va人人爽| 亚洲国产精品久久一线不卡| 亚洲精品乱码久久久久久| 亚洲欧美怡红院| 亚洲欧洲成人精品av97| 国产精品麻豆99久久久久久| 国产午夜精品一区二区三区四区| 精品电影一区二区|