SkinButton.cpp
上传用户:xuzhiwei76
上传日期:2022-07-10
资源大小:2k
文件大小:4k
- // SkinButton.cpp : implementation file
- //
- #include "stdafx.h"
- #include "MyPlayer.h"
- #include "SkinButton.h"
- #ifdef _DEBUG
- #define new DEBUG_NEW
- #undef THIS_FILE
- static char THIS_FILE[] = __FILE__;
- #endif
- #define TIP_ID 1
- /////////////////////////////////////////////////////////////////////////////
- // CSkinButton
- CSkinButton::CSkinButton()
- {
- }
- CSkinButton::~CSkinButton()
- {
- }
- BEGIN_MESSAGE_MAP(CSkinButton, CButton)
- //{{AFX_MSG_MAP(CSkinButton)
- ON_WM_SETCURSOR()
- ON_WM_MOUSEMOVE()
- ON_WM_TIMER()
- //}}AFX_MSG_MAP
- END_MESSAGE_MAP()
- /////////////////////////////////////////////////////////////////////////////
- // CSkinButton message handlers
- void CSkinButton::Init(UINT nNormalID, UINT nMouseOverID,CString strTipText)
- {
- m_nNormalID=nNormalID;
- m_nMouseOverID=nMouseOverID;
- m_ToolTip.UpdateTipText(strTipText,this,TIP_ID);
- pWndParent=this->GetParent();
- AdjustPosition();
- m_bMouseOver=FALSE;
-
- Invalidate();
- }
- void CSkinButton::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
- {
- // TODO: Add your code to draw the specified item
- UINT nID;
- CDC*pDC;
- pDC=CDC::FromHandle(lpDrawItemStruct->hDC);
- UINT nState=lpDrawItemStruct->itemState;
- if(m_bMouseOver&&(!(nState & ODS_SELECTED)))
- nID=m_nMouseOverID;
- else
- nID=m_nNormalID;
-
- CBitmap bitmap;
- BITMAP m_Bitmap;
- CDC MemDC;
-
- bitmap.LoadBitmap(nID);
- MemDC.CreateCompatibleDC(pDC);
- MemDC.SelectObject(&bitmap);
- bitmap.GetBitmap(&m_Bitmap);
- pDC->BitBlt(0,0,m_Bitmap.bmWidth,m_Bitmap.bmHeight,&MemDC,0,0,SRCCOPY);
-
- bitmap.DeleteObject();
- MemDC.DeleteDC();
-
- }
- BOOL CSkinButton::SetButtonCursor(HCURSOR hCursor)
- {
- m_hCursor=hCursor;
- if(m_hCursor==NULL){
- SetDefaultCursor();
- return FALSE;
- }
- return TRUE;
- }
- void CSkinButton::SetDefaultCursor()
- {
- m_hCursor=LoadCursor(NULL,MAKEINTRESOURCE(32649));
- }
- void CSkinButton::SetToolTipText(CString strText)
- {
- m_ToolTip.UpdateTipText(strText,this,TIP_ID);
- }
- BOOL CSkinButton::SetBitmap(UINT nNormalID, UINT nMouseOverID)
- {
- m_nNormalID=nNormalID;
- m_nMouseOverID=nMouseOverID;
- AdjustPosition();
- Invalidate();
- return TRUE;
- }
- void CSkinButton::PreSubclassWindow()
- {
- // TODO: Add your specialized code here and/or call the base class
- SetDefaultCursor();
- CRect rect;
- GetClientRect(&rect);
- m_ToolTip.Create(this);
- m_ToolTip.SetDelayTime(100);
- m_ToolTip.SetMaxTipWidth(200);
- m_ToolTip.AddTool(this,"",rect,TIP_ID);
- CButton::PreSubclassWindow();
- }
- BOOL CSkinButton::PreTranslateMessage(MSG* pMsg)
- {
- // TODO: Add your specialized code here and/or call the base class
- m_ToolTip.RelayEvent(pMsg);
- return CButton::PreTranslateMessage(pMsg);
- }
- BOOL CSkinButton::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message)
- {
- // TODO: Add your message handler code here and/or call default
- if (m_hCursor) //如果设置了光标,就使用新设置的 光标
- {
- ::SetCursor(m_hCursor);
- return TRUE;
- }
- return FALSE;
- }
- void CSkinButton::OnMouseMove(UINT nFlags, CPoint point)
- {
- // TODO: Add your message handler code here and/or call default
- m_bMouseOver=TRUE;
- SetTimer(1,100,NULL);
- Invalidate();
- OnTimer(1);
- CButton::OnMouseMove(nFlags, point);
- }
- void CSkinButton::OnTimer(UINT nIDEvent)
- {
- // TODO: Add your message handler code here and/or call default
- POINT point;
- GetCursorPos(&point);
- ScreenToClient(&point);
- CRect rect;
- GetClientRect(&rect);
- if(!rect.PtInRect(point)){
- KillTimer(1);
- m_bMouseOver=FALSE;
- Invalidate();
- }
- CButton::OnTimer(nIDEvent);
- }
- void CSkinButton::AdjustPosition()
- {
- CBitmap bitmap;
- BITMAP m_Bitmap;
- CRect rect;
- bitmap.LoadBitmap(m_nNormalID);
- bitmap.GetBitmap(&m_Bitmap);
- GetWindowRect(&rect);//根据图象的大小调整按钮大小
- pWndParent->ScreenToClient(&rect);
- rect.right=rect.left+m_Bitmap.bmWidth;
- rect.bottom=rect.top+m_Bitmap.bmHeight;
- MoveWindow(&rect,TRUE);
- }