www.gusucode.com > 串口检查源码,VC++工程项目,经典串口通信工具 > 串口检查源码,VC++工程项目,经典串口通信工具/sccomx/GUILIB/SRC/GuiImageLinkButton.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 // //-----------------------------------------------------------------------// #include "stdafx.h" #include "..\header\guiimagelinkbutton.h" IMPLEMENT_DYNAMIC(CGuiImageLinkButton,CGuiToolButton) CGuiImageLinkButton::CGuiImageLinkButton(void) { m_cfontSelect.CreateFont(14,0,0,0,400,0,1,0,0,1,2,1,34,"Arial"); m_cfontNormal.CreateFont(14,0,0,0,400,0,0,0,0,1,2,1,34,"Arial"); rectletra=CRect(0,0,0,0); m_iDent=0; } CGuiImageLinkButton::~CGuiImageLinkButton(void) { } BEGIN_MESSAGE_MAP(CGuiImageLinkButton, CGuiToolButton) ON_WM_SETCURSOR() ON_WM_MOUSEMOVE() END_MESSAGE_MAP() void CGuiImageLinkButton::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct) { CDC* pdc= CDC::FromHandle(lpDrawItemStruct->hDC); CRect rc=lpDrawItemStruct->rcItem; UINT uState=lpDrawItemStruct->itemState; CFont* m_OldFont; CBrush cb; int calculodify; cb.CreateSolidBrush(m_clColor); //deberia ser blanco if (m_bMouserOver) m_OldFont=pdc->SelectObject(&m_cfontSelect); else m_OldFont=pdc->SelectObject(&m_cfontNormal); pdc->FillRect(rc,&cb); calculodify=rc.Height()-(m_SizeImage.cy); calculodify/=2; CPoint m_point=CPoint(12,calculodify+1); rc.left+=8; //identar a la derecha if (m_SizeImage.cx > 2) { pdc->DrawState (m_point, m_SizeImage,m_Icon, (uState==ODS_DISABLED?DSS_DISABLED:DSS_NORMAL),(CBrush*)NULL); } if (m_SizeText.cx > 2) { int nMode = pdc->SetBkMode(TRANSPARENT); COLORREF clOldColor=pdc->SetTextColor(RGB(0,0,200)); rectletra=rc; rectletra.left+=m_iDent+m_SizeImage.cx+8; CPoint pt=CSize(rectletra.top,rectletra.left); if (uState & ODS_DISABLED) pdc->DrawState(pt, m_SizeText, m_szText, DSS_DISABLED, TRUE, 0, (CBrush*)NULL); else pdc->DrawText(m_szText,rectletra,DT_SINGLELINE|DT_LEFT|DT_BOTTOM); pdc->SetBkMode(nMode); pdc->SetTextColor(clOldColor); } pdc->SelectObject(m_OldFont); // TODO: Add your code to draw the specified item } BOOL CGuiImageLinkButton::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message) { // TODO: Add your message handler code here and/or call default // ::SetCursor(::LoadCursor(NULL,IDC_HAND)); return TRUE; //return CGuiToolButton::OnSetCursor(pWnd, nHitTest, message); } void CGuiImageLinkButton::OnMouseMove(UINT nFlags, CPoint point) { // TODO: Add your message handler code here and/or call default //la idea es que solo se muestre el cursor hand si se esta sobre la imagen //o sobre la cadena CRect m_rect; GetClientRect(&m_rect); rectletra.left=m_rect.left+4; if (m_bMouserOver) return; if (rectletra.PtInRect(point)) ::SetCursor(::LoadCursor(NULL,MAKEINTRESOURCE(32649)));//IDC_HAND)); else ::SetCursor(::LoadCursor(NULL,IDC_ARROW)); CGuiToolButton::OnMouseMove(nFlags, point); } //******************************************************************************** BEGIN_MESSAGE_MAP(CGuiScrollButton, CGuiToolButton) ON_WM_MOUSEMOVE() ON_WM_TIMER() END_MESSAGE_MAP() CGuiScrollButton::CGuiScrollButton(void) { } CGuiScrollButton::~CGuiScrollButton(void) { } void CGuiScrollButton::OnMouseMove(UINT nFlags, CPoint point) { // TODO: Add your message handler code here and/or call default CGuiToolButton::OnMouseMove(nFlags, point); if (m_bMouserOvernew) { SetTimer(2,20,0); } } void CGuiScrollButton::OnTimer(UINT nIDEvent) { // TODO: Add your message handler code here and/or call default CGuiToolButton::OnTimer(nIDEvent); // if (!m_bMouserOvernew) return; CRect rc; CPoint pt(GetMessagePos()); ScreenToClient(&pt); GetClientRect(rc); if (rc.PtInRect(pt)) { CWnd* pParent=GetParent(); pParent->SendMessage(WM_COMMAND,GetDlgCtrlID()); } CButton::OnTimer(nIDEvent); }