封装按钮

转载 2015年07月07日 22:19:25
// SkinButton.cpp : 实现文件
//
#include "stdafx.h"
#include "project.h"
#include "SkinButton.h"


// SkinButton
IMPLEMENT_DYNAMIC(SkinButton, CButton)
SkinButton::SkinButton()
{
 m_bMouseLeave = FALSE;
 m_BitmapNormal = NULL;
 m_BitmapHot = NULL;
 m_BitmapPress = NULL;
 m_BitmapDisnable = NULL;
}
SkinButton::~SkinButton()
{
}


BEGIN_MESSAGE_MAP(SkinButton, CButton)
 ON_MESSAGE(WM_MOUSELEAVE, OnMouseLeave)
 ON_MESSAGE(WM_MOUSEHOVER, OnMouseHover)
 ON_WM_MOUSEMOVE()
END_MESSAGE_MAP()
 
// SkinButton 消息处理程序
LRESULT SkinButton::OnMouseLeave(WPARAM Wparam, LPARAM Lparam)
{
 Invalidate();
 m_bMouseLeave = FALSE;
 return 0;
}
LRESULT SkinButton::OnMouseHover(WPARAM Wparam, LPARAM Lparam)
{
 Invalidate();
 m_bMouseLeave = TRUE;
 return 0;
}
void SkinButton::LoadBitmaps(HBITMAP hLeave, HBITMAP hHonver, HBITMAP hClick, HBITMAP hDisable)
{
 m_BitmapNormal = hLeave;
 m_BitmapHot = hHonver;
 m_BitmapPress = hClick;
 m_BitmapDisnable = hDisable;
}
void SkinButton::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{
 // TODO:  添加您的代码以绘制指定项
 if ( GetStyle() == WS_VISIBLE )
 {
  return ;
 }
 HBITMAP bitmap;
 if (lpDrawItemStruct->itemState == ODS_DISABLED)
 {
  bitmap = m_BitmapDisnable;
 } 
 else if( lpDrawItemStruct->itemState == ODS_SELECTED)
 {
  bitmap = m_BitmapPress;
 }
 else
 {
  if (!m_bMouseLeave)
  {
   bitmap = m_BitmapNormal;
  }
  else
  {
   bitmap = m_BitmapHot;
  }
 }
  HDC dc = CreateCompatibleDC(lpDrawItemStruct->hDC);
  HBITMAP OldBitmap = (HBITMAP)SelectObject(dc, bitmap);
  RECT rect = lpDrawItemStruct->rcItem;
  //BitBlt(lpDrawItemStruct->hDC, rect.left, rect.top, rect.right - rect.left, rect.bottom - rect.top, dc, 0, 0, SRCCOPY);


  BITMAP bmp;
  ::GetObject(bitmap, sizeof(BITMAP), &bmp);
  SetStretchBltMode(lpDrawItemStruct->hDC,COLORONCOLOR/*HALFTONE*/);
  StretchBlt(lpDrawItemStruct->hDC,rect.left, rect.top,rect.right-rect.left,rect.bottom-rect.top, dc,0,0,bmp.bmWidth,bmp.bmHeight,SRCCOPY);
  CString text;
  GetWindowText(text);
  SetBkMode(lpDrawItemStruct->hDC, TRANSPARENT);
 
 DrawText(lpDrawItemStruct->hDC, text, text.GetLength(), &rect, DT_CENTER|DT_VCENTER|DT_SINGLELINE);
 
 SelectObject(dc, OldBitmap);
 DeleteDC(dc);
}
void SkinButton::OnMouseMove(UINT nFlags, CPoint point)
{
 // TODO: 在此添加消息处理程序代码和/或调用默认值
 if (!m_bMouseLeave)
 {
  Invalidate();
  TRACKMOUSEEVENT tme = {sizeof(TRACKMOUSEEVENT), TME_LEAVE, m_hWnd, 0};
  m_bMouseLeave = TrackMouseEvent(&tme); 
 }
 CButton::OnMouseMove(nFlags, point);
}

相关文章推荐

自定义4方向按钮-封装类

  • 2015年08月06日 08:59
  • 3KB
  • 下载

WPF-文字按钮的封装

  • 2014年05月16日 13:28
  • 188KB
  • 下载

iOS开发 - 封装一个自己的按钮

有时候,你会看到设计出来的界面某个位置可点击,但是直接用按钮又无法控制几个元素的关系,这个时候与其用多个控件组合出来这样的按钮不如自己封装一个来的快,还可以重复使用。虽然也需要计算元素的位置大小,但是...

VC++ 不规则按钮 封装类

  • 2009年11月27日 19:43
  • 36KB
  • 下载

wince c# 图形按钮封装

  • 2013年09月29日 16:09
  • 6KB
  • 下载

简单封装按钮-调整内部label和imageView的相对位置

#import "QHTitleButton.h" #import "UIView+Extension.h" @implementation QHTitleButton - (id)initWit...

WPF图片按钮的封装

  • 2014年05月16日 15:32
  • 300KB
  • 下载

点击按钮控制div前后运动——函数封装1

点击按钮控制div前后运动——函数封装1 #div1{ width: 100px; height: 100px; background: #ccc; position: absolute; le...

iOS——分享自己封装的验证码按钮控件CFSecurityCodeButton

写了一个验证码按钮的控件,简约好用,希望大家喜欢。 github地址:https://github.com/summertian4/iOS-CFSecurityCodeButton简介CFSecur...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:封装按钮
举报原因:
原因补充:

(最多只允许输入30个字)