?? buttonxp.cpp
字號(hào):
// ButtonXp.cpp : implementation file
//
#include "stdafx.h"
#include "PreAlarm.h"
#include "ButtonXp.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CButtonXp
CButtonXp::CButtonXp()
{
}
CButtonXp::~CButtonXp()
{
}
BEGIN_MESSAGE_MAP(CButtonXp, CButton)
//{{AFX_MSG_MAP(CButtonXp)
ON_WM_MOUSEMOVE()
ON_MESSAGE(WM_MOUSELEAVE,OnMouseOut)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CButtonXp message handlers
void CButtonXp::DrawItem(LPDRAWITEMSTRUCT lpDIS)
{
// TODO: Add your code to draw the specified item
CDC *pDC =CDC::FromHandle(lpDIS->hDC);
CRect rtControl(lpDIS->rcItem);
CPen pen,*old_pen;
CBrush brush,*old_brush;
CString strText;
HFONT hOldFont = (HFONT)pDC->SelectObject ((HFONT)::GetStockObject (DEFAULT_GUI_FONT));
UINT state =lpDIS->itemState;
if(state & ODS_FOCUS)
{
rtControl.DeflateRect(1,1); //擁有焦點(diǎn)矩形變小
}
if((state & ODS_DISABLED) ||
(!MouseOver() &&!(state & ODS_SELECTED)))
{
//普通狀態(tài)、禁用、擁有焦點(diǎn)三種情況下
pen.CreatePen (PS_SOLID, 1, ::GetSysColor(COLOR_3DSHADOW));
brush.CreateSolidBrush(HLS_TRANSFORM(::GetSysColor(COLOR_3DFACE),-10,0));
}
else
{
COLORREF crBorder =::GetSysColor(COLOR_HIGHLIGHT);
pen.CreatePen(PS_SOLID, 1, crBorder);
if( state & ODS_SELECTED)
{
//按鈕按下時(shí)
brush.CreateSolidBrush(HLS_TRANSFORM(crBorder,+50,-50));
pDC->SetTextColor(RGB(240,240,240));
}
else
{
//鼠標(biāo)在區(qū)域內(nèi)
brush.CreateSolidBrush(HLS_TRANSFORM(crBorder,+80,-66));
pDC->SetTextColor(::GetSysColor(COLOR_BTNTEXT));
}
}
if(state &ODS_DISABLED)
pDC->SetTextColor(::GetSysColor(COLOR_GRAYTEXT));//灰色字:禁用狀態(tài)
else if(state & ODS_SELECTED)
pDC->SetTextColor(RGB(240,240,240)); //白色字:PUSH狀態(tài)
else if(MouseOver())
pDC->SetTextColor(0); //黑色字:熱感應(yīng)狀態(tài)
else
pDC->SetTextColor(::GetSysColor(COLOR_BTNTEXT)); //黑色字:普通狀態(tài)
old_brush=pDC->SelectObject(&brush);
old_pen =pDC->SelectObject(&pen);
pDC->Rectangle(rtControl);
pDC->SetBkMode(TRANSPARENT);
GetWindowText(strText);
pDC->DrawText(strText,rtControl,DT_SINGLELINE|DT_CENTER|DT_VCENTER);
if(state & ODS_FOCUS)
{
rtControl.DeflateRect(3,3);
pDC->DrawFocusRect(rtControl);
}
pDC->SelectObject(old_pen);
pDC->SelectObject(old_brush);
pDC->SelectObject(hOldFont);
}
void CButtonXp::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
if(m_bOver ==FALSE)
{
//鼠標(biāo)在按鈕之上
m_bOver =TRUE;
//按鈕重繪
InvalidateRect(NULL,FALSE);
//跟蹤鼠標(biāo)
//當(dāng)鼠標(biāo)離開按鈕區(qū)域會(huì)收到WM_MOUSELEAVE,該消息直接調(diào)用OnMouseOut()
TRACKMOUSEEVENT tme;
tme.cbSize =sizeof(TRACKMOUSEEVENT);
tme.dwFlags =TME_LEAVE;
tme.dwHoverTime=0;
tme.hwndTrack =m_hWnd;
::TrackMouseEvent(&tme);
}
CButton::OnMouseMove(nFlags, point);
}
void CButtonXp::PreSubclassWindow()
{
// TODO: Add your specialized code here and/or call the base class
ModifyStyle(0,BS_OWNERDRAW);
CButton::PreSubclassWindow();
}
/////////////////////////////////////////////////////
//返回鼠標(biāo)是否在按鈕區(qū)域內(nèi)
BOOL CButtonXp::MouseOver()
{
return m_bOver;
}
void CButtonXp::OnMouseOut ()
{
//鼠標(biāo)已離開按鈕區(qū)域
m_bOver =FALSE;
//重繪按鈕
InvalidateRect(NULL,FALSE);
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -