📄 button.cpp
字号:
/*
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
文件:Button.cpp
版权:Firebird Software Workroom 保留
声明:本源程序的版权受《中华人民共和国著作权法》以及其
它相关法律和条约的保护。任何有机会得到本源程序的
个人和机构,未经作者明确授权,不得将本源程序用于
任何商业目的(直接的或间接的)。对于非商业目的的使
用 (包括复制、传播、编译和修改), 原则上没有特别
的限制条款,但请在相关文档中说明其来源,并尊重原
作者的署名权。
编写:秦传安(chings) 2000.6
联络:E_mail:chings@163.net
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
#include "fclstd.h"
#include "Button.h"
/*
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
class CFBButton
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
CFBButton::CFBButton()
{
}
CFBButton::~CFBButton()
{
}
//#####################################################################
BOOL CFBButton::Create(CFBWnd* pParent,UINT uID,DWORD style,DWORD exStyle)
{
if(pParent == NULL)
return FALSE;
style |= WS_CHILD | WS_VISIBLE;
return CFBWnd::Create("BUTTON",
NULL,
pParent->GetInstance(),
pParent,
style,
exStyle,
(HMENU)uID);
}
/*
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
class CFlatButton
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
CFlatButton::CFlatButton()
{
m_bMouseOver = FALSE;
m_bPushed = FALSE;
}
CFlatButton::~CFlatButton()
{
}
//#####################################################################
BOOL CFlatButton::OnCreate()
{
UINT style = BS_FLAT | BS_PUSHBUTTON | BS_BITMAP | BS_ICON | BS_TEXT | BS_OWNERDRAW;
SetStyle(style);
return TRUE;
}
//#####################################################################
LRESULT CFlatButton::WindowProc(UINT msg,WPARAM wParam,LPARAM lParam)
{
LRESULT lResult = 0;
switch(msg)
{
case WM_MOUSEMOVE:
{
POINT pt;
pt.x = LOWORD(lParam);
pt.y = HIWORD(lParam);
OnMouseMove(pt);
}
break;
case WM_DRAWITEM:
{
LPDRAWITEMSTRUCT pds = (LPDRAWITEMSTRUCT)lParam;
OnDrawItem(pds);
}
break;
default:
lResult = CFBButton::WindowProc(msg,wParam,lParam);
break;
}
return lResult;
}
//#####################################################################
void CFlatButton::OnMouseMove(POINT pt)
{
if(m_bPushed)
return;
RECT rc;
GetClientRect(m_hWnd,&rc);
if(PtInRect(&rc,pt))
{
SetCapture(m_hWnd);
if(m_bMouseOver == FALSE)
{
m_bMouseOver = TRUE;
Invalidate(FALSE);
}
}
else
{
ReleaseCapture();
m_bMouseOver = FALSE;
Invalidate(TRUE);
}
}
//#####################################################################
void CFlatButton::OnDrawItem(LPDRAWITEMSTRUCT pds)
{
if(m_bPushed || (GetState() & BST_PUSHED))
DrawEdge(pds->hDC,&pds->rcItem,BDR_SUNKENOUTER,BF_RECT);
else if(m_bMouseOver)
DrawEdge(pds->hDC,&pds->rcItem,BDR_RAISEDINNER,BF_RECT);
char text[64];
text[0] = '\0';
GetText(text,64);
if(text[0] != '\0')
{
SIZE sz;
RECT rc;
CopyRect(&rc,&pds->rcItem);
GetTextExtentPoint32(pds->hDC,text,lstrlen(text),&sz);
rc.top += ((rc.bottom - rc.top) - sz.cy)/2;
DrawText(pds->hDC,text,lstrlen(text),&rc,DT_CENTER);
}
else
{
HBITMAP hBmp = NULL;
HICON hIcon = NULL;
hBmp = (HBITMAP)GetImage(IMAGE_BITMAP);
hIcon = (HICON)GetImage(IMAGE_ICON);
if(hBmp)
{
HDC hdc = CreateCompatibleDC(pds->hDC);
SelectObject(hdc,hBmp);
BitBlt(pds->hDC,pds->rcItem.left,pds->rcItem.top,
pds->rcItem.right - pds->rcItem.left,
pds->rcItem.bottom - pds->rcItem.top,
hdc,0,0,SRCCOPY);
DeleteDC(hdc);
}
else if(hIcon)
DrawIcon(pds->hDC,pds->rcItem.left,pds->rcItem.top,hIcon);
}
}
//#####################################################################
void CFlatButton::Pushed(BOOL bPushed)
{
if(m_bPushed == bPushed)
return;
m_bPushed = bPushed;
Invalidate(TRUE);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -