⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 logo.cpp

📁 这是一个用VC++编写的FLSHPLAYER
💻 CPP
字号:
// Logo.cpp : implementation file
//

#include "stdafx.h"
#include "Logo.h"

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

namespace
{
	const UINT nLogoTimer = 1;
}


//namespace
//{
	LONG GetRegKey(HKEY key, LPCTSTR subkey, LPTSTR retdata)
	{
		HKEY hkey;
		LONG retval = RegOpenKeyEx(key, subkey, 0, KEY_QUERY_VALUE, &hkey);

		if (retval == ERROR_SUCCESS) 
		{
			long datasize = MAX_PATH;
			TCHAR data[MAX_PATH];
			RegQueryValue(hkey, NULL, data, &datasize);
			lstrcpy(retdata,data);
			RegCloseKey(hkey);
		}

		return retval;
	}
//}


/////////////////////////////////////////////////////////////////////////////
// CLogo

CLogo::CLogo()
{
}

CLogo::~CLogo()
{
}


BEGIN_MESSAGE_MAP(CLogo, CBitmapButton)
	//{{AFX_MSG_MAP(CLogo)
	ON_WM_MOUSEMOVE()
	ON_WM_LBUTTONUP()
	ON_WM_TIMER()
	ON_WM_CREATE()
	ON_WM_DESTROY()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CLogo message handlers

void CLogo::SetPosition()
{
	if(!::IsWindow(m_hWnd))
		return;

	CDockBar* pTopDockBar = GetParentDockBar();
	if(!pTopDockBar)
		return;

	CRect TopDockBarRect;
	pTopDockBar->GetClientRect(TopDockBarRect);

	CRect LogoRect;
	GetWindowRect(LogoRect);
	pTopDockBar->ScreenToClient(LogoRect);	

	int nLeft = TopDockBarRect.right-LogoRect.Width()-::GetSystemMetrics(SM_CXEDGE);
	int nTop = TopDockBarRect.top;

	if(nLeft != LogoRect.left ||
	   nTop != LogoRect.top)
		SetWindowPos(NULL, 
					 nLeft,
					 nTop,
					 0,
					 0,
					 SWP_NOZORDER|SWP_NOACTIVATE|SWP_NOSIZE);

	CRect UnionToolbarRect;

	for(int nI=0;nI<pTopDockBar->m_arrBars.GetSize();nI++)
	{
		CWnd* pWnd = static_cast<CWnd*>(pTopDockBar->m_arrBars[nI]);
		if(!pWnd ||
		   !AfxIsValidAddress(pWnd,sizeof(CWnd)) || 
		   !::IsWindow(*pWnd))
				continue;

		CRect ToolBarRect;
		pWnd->GetWindowRect(&ToolBarRect);
		UnionToolbarRect.UnionRect(UnionToolbarRect,ToolBarRect);
	}

	GetWindowRect(LogoRect);

	UnionToolbarRect.IntersectRect(UnionToolbarRect,LogoRect);
	if(UnionToolbarRect.IsRectEmpty())
	{
		if(!IsWindowVisible())
			ShowWindow(SW_SHOW);
	}
	else
	{
		if(IsWindowVisible())
			ShowWindow(SW_HIDE);
	}
}

CDockBar* CLogo::GetParentDockBar()
{
	CWnd* pParentWnd =GetParent();
	if(!pParentWnd ||
	   !pParentWnd->IsKindOf(RUNTIME_CLASS(CDockBar)))
		return NULL;

	return static_cast<CDockBar*>(pParentWnd);
}

void CLogo::OnMouseMove(UINT nFlags, CPoint point) 
{	
	CBitmapButton::OnMouseMove(nFlags, point);

	TRACKMOUSEEVENT TrackMouseEventStructure;
	ZeroMemory(&TrackMouseEventStructure,sizeof(TrackMouseEventStructure));
	TrackMouseEventStructure.cbSize = sizeof(TrackMouseEventStructure);
	TrackMouseEventStructure.hwndTrack = m_hWnd;
	TrackMouseEventStructure.dwFlags = TME_LEAVE;
	TrackMouseEventStructure.dwHoverTime = HOVER_DEFAULT;

	_TrackMouseEvent(&TrackMouseEventStructure);

	if ((nFlags & MK_LBUTTON)!=0 ||
		(nFlags & MK_RBUTTON)!=0) 
	  return;
	
	CString MessageLine;
	if(MessageLine.LoadString(GetDlgCtrlID()))
	{
		int nDelPos = MessageLine.Find(_T('\n'));
		if(nDelPos != -1)
			MessageLine = MessageLine.Left(nDelPos);
	}

	CWnd*  pMainWnd = ::AfxGetMainWnd();
	if(pMainWnd)
		pMainWnd->SendMessage(WM_SETMESSAGESTRING,0,LPARAM(LPCTSTR(MessageLine)));
}

LRESULT CLogo::DefWindowProc(UINT message, WPARAM wParam, LPARAM lParam) 
{
	if(message == WM_MOUSELEAVE)
	{
		CWnd*  pMainWnd = ::AfxGetMainWnd();
		if(pMainWnd)
			pMainWnd->SendMessage(WM_POPMESSAGESTRING, AFX_IDS_IDLEMESSAGE);
	}

	return CBitmapButton::DefWindowProc(message, wParam, lParam);
}

int CLogo::OnToolHitTest(CPoint point, TOOLINFO *pTI) const
{
	CString ToolTipText;

	if(::IsWindow(m_hWnd) && ToolTipText.LoadString(GetDlgCtrlID()))
	{
		int nDelPos = ToolTipText.Find(_T('\n'));
		if(nDelPos != -1)
			ToolTipText = ToolTipText.Right(ToolTipText.GetLength()-nDelPos-1);
	}

	if(ToolTipText.IsEmpty())
		return -1;

	int nLen = ToolTipText.GetLength();
	PTCHAR pText = PTCHAR(::malloc((nLen+1)*sizeof(TCHAR)));
	if(!pText)
		return -1;

	::_tcscpy(pText,ToolTipText.LockBuffer());
	ToolTipText.UnlockBuffer();
	pTI->lpszText = pText;
	pTI->hwnd = m_hWnd;

	CRect ClientRect;
	GetClientRect(ClientRect);
	pTI->rect.left = ClientRect.left;
	pTI->rect.top = ClientRect.top;
	pTI->rect.right = ClientRect.right;
	pTI->rect.bottom = ClientRect.bottom;

	return 1;
}

void CLogo::OnLButtonUp(UINT nFlags, CPoint point) 
{
	CBitmapButton::OnLButtonUp(nFlags, point);

	CWnd* pMainWnd = ::AfxGetMainWnd();
	if(pMainWnd)
		pMainWnd->SendMessage(ON_LOGO_CLICK);
}

void CLogo::OnTimer(UINT nIDEvent) 
{
	if(nIDEvent == nLogoTimer)
		SetPosition();
	
	CBitmapButton::OnTimer(nIDEvent);
}

int CLogo::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{
	if (CBitmapButton::OnCreate(lpCreateStruct) == -1)
		return -1;
	
	ASSERT(GetParentDockBar());

	SetTimer(nLogoTimer,100,NULL);

	EnableToolTips();
		
	return 0;
}

void CLogo::OnDestroy() 
{
	KillTimer(nLogoTimer);

	CBitmapButton::OnDestroy();
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -