📄 botton.c
字号:
/*
*******************************************************************************
* The real-time kernel "rtCell" *
* Copyright 2005 taowentao, allrights reserved. *
* File : Botton.c *
* By : taowentao 2006-09-02 2007-05-20 *
*******************************************************************************
*/
#if !defined(BOTTON_H)
#include "giCell\Wins\include\Botton.h"
#endif
/*
*******************************************************************************
* *
*******************************************************************************
*/
#define CLIENT_XOFF (2)
#define CLIENT_YOFF (2)
static COLOR BottonColor = GD_GRAY;
static COLOR CaptionColor = GD_BLACK;
/*
*******************************************************************************
* *
*******************************************************************************
*/
static void BottonPaint(VIEW *pView)
{
BOTTON* pBtn;
COLOR clr;
RECT r0, r = pView->viewRect;
pBtn = OBJ_FROM_VIEW(pView);
FillRect(&(pView->viewRect), pBtn->BottonColor);
if (pBtn->Status & CTRL_MOUSE_ENTER) clr = MOUSEENTERCOLOR;
else clr = pBtn->CaptionColor;
r0 = r;
if ((pBtn->Status & CTRL_MOUSE_CATCH) &&
(pBtn->Status & CTRL_MOUSE_ENTER))
MoveRect(&r0, 1, 1);
CtrlDrawText(pBtn->pCaption, &r0, CTRL_ALIGN_HCENTER|CTRL_ALIGN_VCENTER, clr);
if (pBtn->Status & CTRL_FOCUSSED) {
DrawFocusRect(&(pView->viewRect), 5, GD_BLACK);
DrawRect(&(pView->viewRect), GD_BLACK);
r.left ++; r.top ++; r.right --; r.bottom --;
}
if ((pBtn->Status & CTRL_MOUSE_CATCH) &&
(pBtn->Status & CTRL_MOUSE_ENTER)) {
DrawRect(&r, GD_DARKGRAY);
} else {
DrawUpBotton(&r);
}
}
static CBOOL _cdecl_ BottonViewProc(VMSG *pMsg)
{
BOTTON* pBtn = OBJ_FROM_VIEW(pMsg->pView);
MOUSE_INF mi;
KEY_INF ki;
switch (pMsg->MsgID) {
case KEYM_KEY_DOWN:
ki.raw = pMsg->vParam;
if (ki.inf.scan == SCANCODE_ENTER) goto _do_click;
return (true);
case MSM_LB_UP:
if ((pBtn->Status & CTRL_MOUSE_CATCH) == 0) return (true);
pBtn->Status &= ~(CTRL_MOUSE_CATCH);
UpdateView(pMsg->pView);
if ((pBtn->Status & CTRL_FOCUSSED) &&
(pBtn->Status & CTRL_MOUSE_ENTER)) {
_do_click: if (pBtn->pOnClick != NULL) {
mi.raw = pMsg->vParam;
(*(pBtn->pOnClick))(pMsg->pt.x, pMsg->pt.y, mi);
}
}
return (true);
default:
return (CtrlViewProc(pMsg, BottonPaint, &(pBtn->Status)));
}
}
BOTTON* CreateBotton(int left, int top, int width, int height, VIEW* pParent,
BYTE* pCaption, PCLICK pOnClick)
{
VIEW *pView;
BOTTON *pBtn;
if (pParent == NULL)
return (NULL);
pView = CreateControl(left, top, width, height, pParent, 0,
BottonViewProc, sizeof(BOTTON));
if (pView == NULL) return (NULL);
pBtn = OBJ_FROM_VIEW(pView);
pBtn->pView = pView;
pBtn->CaptionColor = CaptionColor;
pBtn->pOnClick = pOnClick;
pBtn->ptCatch.x = 0; pBtn->ptCatch.y = 0;
pBtn->BottonColor = BottonColor;
pBtn->pCaption = pCaption;
pBtn->Status = 0;
ShowView(pBtn->pView);
return (pBtn);
}
void DeleteBotton(BOTTON *pBtn)
{
if (pBtn == NULL) return;
DeleteView(pBtn->pView);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -