⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 botton.c

📁 rtCell 实时微内核-具有下列功能: 1. 完全抢占的实时微内核结构
💻 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 + -