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

📄 guilinkbutton.cpp

📁 这是一个串口监视程序
💻 CPP
字号:
//-----------------------------------------------------------------------//
// This is a part of the GuiLib MFC Extention.							 //	
// Autor  :  Francisco Campos											 //
// (C) 2002 Francisco Campos <www.beyondata.com> All rights reserved     //
// This code is provided "as is", with absolutely no warranty expressed  //
// or implied. Any use is at your own risk.								 //		
// You must obtain the author's consent before you can include this code //
// in a software library.												 //
// If the source code in  this file is used in any application			 //
// then acknowledgement must be made to the author of this program		 //	
// fco_campos@tutopia.com												 //
// version : 1.1														 //
// Modified by : Francisco Campos										 //
//-----------------------------------------------------------------------//

#include "stdafx.h"
#include "..\header\GuiLinkButton.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CGuiLinkButton

CGuiLinkButton::CGuiLinkButton()
{
	m_clNormal=RGB(0,0,200);
	m_clover=RGB(0,0,255);
	m_Link="";
	m_cfont.CreateFont(14,0,0,0,400,0,1,0,0,1,2,1,34,"Arial");
	m_iSelected=0;
	m_rectMsg.SetRectEmpty( );
	m_bFirstPas=TRUE;
}

CGuiLinkButton::~CGuiLinkButton()
{
}


BEGIN_MESSAGE_MAP(CGuiLinkButton, CButton)
	//{{AFX_MSG_MAP(CGuiLinkButton)
	ON_WM_ERASEBKGND()
	ON_WM_MOUSEMOVE()
	ON_WM_TIMER()
	ON_WM_LBUTTONDOWN()
	ON_WM_CREATE()
	ON_WM_SETCURSOR()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CGuiLinkButton message handlers

void CGuiLinkButton::SetColorNormal(COLORREF m_clnor)
{
	m_clNormal=m_clnor;
}
void CGuiLinkButton::SetColorSelect(COLORREF m_clselec)
{
	m_clover=m_clselec;
}
void CGuiLinkButton::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct) 
{
	// TODO: Add your code to draw the specified item
	CDC* pDC=CDC::FromHandle(lpDrawItemStruct->hDC);
	CRect m_rect=lpDrawItemStruct->rcItem;
	CSize SizeCad=CSize(0,0);
	int m_iStatus=lpDrawItemStruct->itemState;
	int m_iMode;
	int m_iposx;
	int m_iposy;
	CBrush cb;
	cb.CreateSysColorBrush(COLOR_BTNFACE); 
	static CPoint pt=CPoint(2,1);
	CString m_sCaption;
	GetWindowText(m_sCaption);
	
	//se calcula la posici髇 exacta del texto para que solo se 
	//seleccione cuando se encuentre el puntero en el rectangulo
	SizeCad=pDC->GetTextExtent(m_sCaption);
	if (m_bFirstPas==TRUE)
	{
	if (SizeCad.cx < m_rect.Width())
	{
		pDC->FillRect(m_rect,&cb);
		m_iposx=m_rect.Width()-(SizeCad.cx+10);
		m_iposy=m_rect.Height()-SizeCad.cy;
		m_rectMsg=m_rect;
		m_rectMsg.bottom=m_rect.bottom-(m_iposy-2);
		m_rectMsg.right=m_rect.right-(m_iposx);
		
		SetWindowPos (NULL, m_rectMsg.left, m_rectMsg.top,m_rectMsg.right, m_rectMsg.bottom,
			SWP_NOMOVE | SWP_NOACTIVATE | SWP_NOZORDER);
		m_bFirstPas=FALSE;
		
	}
	}
	m_iMode=pDC->SetBkMode(TRANSPARENT);
	CFont* m_OldFont=pDC->SelectObject(&m_cfont);
	if (m_iSelected==1)
		pDC->SetTextColor(m_clover);
	else
		pDC->SetTextColor(m_clNormal);
	pDC->DrawState(pt, SizeCad, m_sCaption, (m_iStatus==ODS_DISABLED)?DSS_DISABLED:DSS_NORMAL, TRUE, 0, (CBrush*)NULL);
	pDC->SelectObject(m_OldFont);
	pDC->SetBkMode(m_iMode);
}

void CGuiLinkButton::PreSubclassWindow() 
{
	// TODO: Add your specialized code here and/or call the base class
	ModifyStyle(0,BS_OWNERDRAW);
	CButton::PreSubclassWindow();
}

BOOL CGuiLinkButton::PreTranslateMessage(MSG* pMsg) 
{
	// TODO: Add your specialized code here and/or call the base class
	if (GetSafeHwnd() == NULL) return FALSE;
	if (pMsg->message== WM_MOUSEMOVE)
		if (m_ToolTipCtrl.GetSafeHwnd())
			m_ToolTipCtrl.RelayEvent(pMsg);
	return CButton::PreTranslateMessage(pMsg);
}

BOOL CGuiLinkButton::OnEraseBkgnd(CDC* pDC) 
{
	// TODO: Add your message handler code here and/or call default
	
	return TRUE;
}

void CGuiLinkButton::OnMouseMove(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default
	::SetCursor(::LoadCursor(NULL,MAKEINTRESOURCE(32649)));//IDC_HAND));
 	
	CRect m_rect;
	GetClientRect(&m_rect);
	if (m_iSelected == 1) return;
	if (m_rect.PtInRect(point))
	{
		m_iSelected =1;
		Invalidate();
		UpdateWindow();
		SetTimer(1,100,NULL);
		}
	
	CButton::OnMouseMove(nFlags, point);
}

void CGuiLinkButton::OnTimer(UINT nIDEvent) 
{
	// TODO: Add your message handler code here and/or call default
	
	if(nIDEvent== 1)
	{
		CPoint pt=GetMessagePos();
		ScreenToClient(&pt);
		if (!m_rectMsg.PtInRect(pt))
		{
			m_iSelected=0;
			Invalidate();
			UpdateWindow();
			KillTimer(1);
		}
	}
	CButton::OnTimer(nIDEvent);
}

void CGuiLinkButton::SetToolTip(LPCSTR m_lpMsg)
{
	if (GetSafeHwnd()== NULL) return;
	if (m_lpMsg != NULL)
	{
		if (m_ToolTipCtrl.GetSafeHwnd () == NULL) 
		{
			m_ToolTipCtrl.Create(this,TTS_ALWAYSTIP);
			m_ToolTipCtrl.Activate(TRUE);
			m_ToolTipCtrl.AddTool(this,m_lpMsg);
		}
		else
		{
			m_ToolTipCtrl.UpdateTipText(m_lpMsg,this);	
		}
	}
	else
	{
		if (m_ToolTipCtrl.GetSafeHwnd () == NULL) 
		{
			m_ToolTipCtrl.Create(this,TTS_ALWAYSTIP);
			m_ToolTipCtrl.AddTool(this,m_lpMsg);
		}
		else
			m_ToolTipCtrl.UpdateTipText(m_lpMsg,this);	
		m_ToolTipCtrl.Activate(FALSE);
	}
}

void CGuiLinkButton::SetLink(LPCSTR lpMsg)
{
	m_Link=lpMsg;
}
void CGuiLinkButton::OnLButtonDown(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default
	ShellExecute (NULL, "open",m_Link, NULL, NULL, 0) ;
	CButton::OnLButtonDown(nFlags, point);
}

int CGuiLinkButton::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{
	if (CButton::OnCreate(lpCreateStruct) == -1)
		return -1;
	
	
	// TODO: Add your specialized creation code here
	
	return 0;
}


BOOL CGuiLinkButton::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message) 
{
		
		SetCursor(::LoadCursor(NULL,MAKEINTRESOURCE(32649)));	
		return CButton::OnSetCursor(pWnd, nHitTest, message);
		

}

⌨️ 快捷键说明

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