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

📄 uibutton.c

📁 瑞星微公司RK27XX系列芯片的SDK开发包
💻 C
字号:
/******************************************************************/
/*   Copyright (C) 2007 ROCK-CHIPS FUZHOU . All Rights Reserved.  */
/*******************************************************************
File    :  uibutton.c
Desc    :  按钮控件

Author  :  GUI Develop Group.lzj
Date    :  2007-08-03
Notes   :
$Log: uibutton.c,v $
Revision 1.2  2008/06/19 04:43:20  Administrator
代码整理!

Revision 1.1.1.1  2008/05/07 04:15:08  Administrator
no message

Revision 1.1.1.1  2008/03/06 13:29:09  Lingzhaojun
no message

Revision 1.8  2007/12/12 14:38:35  Lingzhaojun
no message

Revision 1.2  2007/12/10 07:16:12  Shenfuming
修改RM970的BUG单中的第31个BUG:确定,取消按钮在未选中时看不清

Revision 1.1.1.1  2007/12/01 01:30:13  Lingzhaojun
no message

Revision 1.5  2007/11/06 07:37:04  Lingzhaojun
提交gui相关改动

Revision 1.4  2007/10/15 02:58:09  Lingzhaojun
添加GUI控件注释

Revision 1.3  2007/10/08 02:04:27  Lingzhaojun
GUI添加自动注释

            20070805 添加焦点处理       lzj
            20070807 添加对触摸屏的支持 lzj

*********************************************************************/


#include "uibutton.h"




/*----------------------------------------------------------------------
Name  :  ButtonboxSetPic
Desc  :  设置按钮控件的图片,包括按下去时的图片和获取到焦点后的图片
Params:  wParam为图片类型
Return:  处理结果
Author:  Lingzj
Date  :  070830
----------------------------------------------------------------------*/
UINT32  ButtonboxSetPic(WINDOW* win ,  WMPARAM wParam, WLPARAM lParam)

{

    W_Button *WButObj = (W_Button*)win->Data;
    UINT16*pID = lParam;
    IconType Type = wParam;

    switch (Type)
    {
        case Icon_Button:
            WButObj->IconReady.BmpID = *pID;
            break;

        case Icon_ButtonPress:
            WButObj->IconPress.BmpID = *pID;
            break;

        case Icon_ButtonFocus:
            WButObj->IconFocus.BmpID = *pID;
            break;

    }
    WindowInvalidateWindow(win);

    return TRUE;
}



/*----------------------------------------------------------------------
Name  :  ButtonboxSetTxt
Desc  :  设置按钮的文本,wParam参数为文本ID
Params:
Return:  处理结果
Author:  Lingzj
Date  :  070830
----------------------------------------------------------------------*/
UINT32  ButtonboxSetTxt(WINDOW* win , WMPARAM wParam, WLPARAM lParam)
{

    W_Button *WButObj = (W_Button*)win->Data;

    WButObj->TxtID = wParam;
    WindowInvalidateWindow(win);
    return TRUE;
}


/*----------------------------------------------------------------------
Name  :  ButtonboxPaint
Desc  :  按钮画屏消息
Params:
Return:  处理结果
Author:  Lingzj
Date  :  070830
----------------------------------------------------------------------*/
UINT32  ButtonboxPaint(WINDOW* win , WMPARAM wParam, WLPARAM lParam)
{
    W_Button *WButObj = (W_Button*)win->Data;
    DispMode TranspLevel = WinGetTranStyle(win->style);
    ColorDesc Black = {COLOR_WHITE, COLOR_BLACK, DSPM_Transp};
    WCHAR  caption[100];
    INT16U  strPixLen, x, y, ft;
    UINT32  Len;

    if (!(WIN_NEEDPAIT(win)))
        return TRUE;


    switch (WButObj->State)
    {
        case ButStatePress:
            //DrawPicture(WButObj->IconPress);
            DrawBmpIdEx(WButObj->IconPress.X, WButObj->IconPress.Y, WButObj->IconPress.BmpID, NULL, TranspLevel);
            break;

        case ButStateFocus:
            //DrawPicture(WButObj->IconFocus);
            DrawBmpIdEx(WButObj->IconFocus.X, WButObj->IconFocus.Y, WButObj->IconFocus.BmpID, NULL, TranspLevel);
            break;

        case ButStateReady:
            //DrawPicture(WButObj->IconReady);
            DrawBmpIdEx(WButObj->IconReady.X, WButObj->IconReady.Y, WButObj->IconReady.BmpID, NULL, TranspLevel);
            break;

    }
    if (win->style&BlackWord)
    {

        Len = ResApiGetStringIDString(GuiDspGetWindowResProc(win , WButObj->TxtID) , WButObj->TxtID , caption , 100);
        strPixLen = MeasureStringPixLen(caption , Font12X12);
        ft = (UINT16)Font12X12;
        x = win->x + (win->w - strPixLen) / 2;
        y = win->y + (win->h - ft) / 2;
        DrawStringIdEx(x, y, win->w, WButObj->TxtID, Font12X12, &Black, 0);

    }
    else
    {
        TxtBox(win, WButObj->TxtID, Font12X12, CenterStyle);
    }

    WIN_CLEARPAIT(win);
    return TRUE;
}



/*----------------------------------------------------------------------
Name  :  ButtonboxKey
Desc  :  按钮按键消息,发送给上级窗口以command
Params:
Return:  处理结果
Author:  Lingzj
Date  :  070830
----------------------------------------------------------------------*/
UINT32  ButtonboxKey(WINDOW* win , WMPARAM wParam, WLPARAM lParam)
{
    W_Button *WButObj = (W_Button*)win->Data;
    UINT16      keyPress = (UINT16)((wParam) >> 16);
    UINT16      KEY_EV = (UINT16)(wParam);

    if (keyPress)
        return FALSE;


    if (KEY_EV == WButObj->Shortcutkey)         //该按钮的快捷键
        return WinSendCommand(win, WButObj->Event);


    switch (KEY_EV)
    {

        case KE_PLAY_RELEASE:
        case KE_MENU_RELEASE:
            if (WButObj->State == ButStateFocus)    //按钮是否聚焦
                return WinSendCommand(win, WButObj->Event);

        default:
            return WindowSendMessage(win->Parent, WM_KEY, wParam, lParam);

    }



    return TRUE;

}


/*----------------------------------------------------------------------
Name  :  ButtonboxTouch
Desc  :  按钮触摸按键消息,发送给上级窗口以command
Params:
Return:  处理结果
Author:  Lingzj
Date  :  070830
----------------------------------------------------------------------*/
INT32U  ButtonboxTouch(WINDOW* win ,  WMPARAM wParam, WLPARAM lParam)
{
    W_Button *WButObj = (W_Button*)win->Data;

    if (wParam == TM_STATE_DOWN)
    {
        WButObj->State = ButStatePress;
    }
    else if (wParam == TM_STATE_UP)
    {
        WButObj->State = ButStateFocus;
        WinSendCommand(win, WButObj->Event);
    }


    WindowInvalidateWindow(win);

    return TRUE;
}



/*----------------------------------------------------------------------
Name  :  ButtonboxSetFocus
Desc  :  按钮聚焦,更新图片
Params:
Return:  处理结果
Author:  Lingzj
Date  :  070830
----------------------------------------------------------------------*/
UINT32  ButtonboxSetFocus(WINDOW* win , WMPARAM wParam, WLPARAM lParam)
{
    W_Button *WButObj = (W_Button*)win->Data;

    WButObj->State = ButStateFocus;
    WindowInvalidateWindow(win);
    return TRUE;
    return FALSE;
}


/*----------------------------------------------------------------------
Name  :  ButtonboxLostFocus
Desc  :  按钮失去焦点,更新按钮图片
Params:
Return:  处理结果
Author:  Lingzj
Date  :  070830
----------------------------------------------------------------------*/
UINT32  ButtonboxLostFocus(WINDOW* win , WMPARAM wParam, WLPARAM lParam)
{
    W_Button *WButObj = (W_Button*)win->Data;

    WButObj->State = ButStateReady;
    WindowInvalidateWindow(win);
    return TRUE;
}




/*----------------------------------------------------------------------
Name  :  ButtonboxRegistEvent
Desc  :  注册该按钮所要触发的事件,当按钮按下时,该事件会被发送到父窗口
Params:  wParam:按钮的快捷键
Return:  处理结果
Author:  Lingzj
Date  :  070830
----------------------------------------------------------------------*/
UINT32  ButtonboxRegistEvent(WINDOW* win , WMPARAM wParam, WLPARAM lParam)
{
    W_Button *WButObj = (W_Button*)win->Data;

    WButObj->Shortcutkey = wParam;

    return TRUE;
}



/*----------------------------------------------------------------------
Name  :  PictureboxCreat
Desc  :  按钮创建
Params:
Return:  处理结果
Author:  Lingzj
Date  :  070830
----------------------------------------------------------------------*/
UINT32  ButtonboxCreat(WINDOW* win , WMPARAM wParam, WLPARAM lParam)
{
    W_Button *WButObj = NULL;

    WButObj = MallocClass(W_Button);

    if (WButObj)
    {
        WButObj->IconReady.BmpID = win->BmpID; /*按钮普通状态图片*/
        WButObj->IconPress.BmpID = win->BmpID + 1;   /*按钮按住时的图片*/
        WButObj->IconFocus.BmpID = win->BmpID + 2;   /*按钮获取到焦点后的图片*/
        WButObj->TxtID = win->CaptionID;   /*按钮的文本*/

        WButObj->State = ButStateReady;   /*按钮的状态*/
        WButObj->IconFocus.X = win->x;
        WButObj->IconFocus.Y = win->y;
        WButObj->IconPress.X = win->x;
        WButObj->IconPress.Y = win->y;
        WButObj->IconReady.X = win->x;
        WButObj->IconReady.Y = win->y;
        WButObj->Event = EV_ButtonPress;   /*按钮注册的事件,按钮被激活后将该事件发送给父窗口*/
        WButObj->Shortcutkey = EV_EmptyKey;  /*注册的快捷键,该键按下去后按钮有效*/

        win->style |= WS_TOUCHUP;
        win->Data = WButObj;
    }


    return TRUE;
}



/*----------------------------------------------------------------------
Name  :  ButtonboxDestroy
Desc  :  按钮窗口关闭
Params:
Return:  处理结果
Author:  Lingzj
Date  :  070830
----------------------------------------------------------------------*/
UINT32  ButtonboxDestroy(WINDOW* win , WMPARAM wParam, WLPARAM lParam)
{
    W_Button *WButObj = (W_Button*)win->Data;

    FreeClass(WButObj);

    return TRUE;
}




/*图片框消息描述表*/
BEGIN_CHILDMESSAGE_MAP(WinButtonboxProcMap , CW_TYPE_Button)     //CW_TYPE_USER
ON_MESSAGE(WM_PAINT ,       ButtonboxPaint)
ON_MESSAGE(WM_DESTROY ,     ButtonboxDestroy)
ON_MESSAGE(WM_CREATE,       ButtonboxCreat)
ON_MESSAGE(WM_KEY,          ButtonboxKey)
ON_MESSAGE(WM_SetPic,       ButtonboxSetPic)
ON_MESSAGE(WM_SetTxt,       ButtonboxSetTxt)
ON_MESSAGE(WM_TOUCH ,       ButtonboxTouch)
ON_MESSAGE(WM_SETFOCUS,     ButtonboxSetFocus)
ON_MESSAGE(WM_KILLFOCUS,    ButtonboxLostFocus)
ON_MESSAGE(WM_ButtonRegEvent, ButtonboxRegistEvent)
END_MESSAGE_MAP()   //    MUST BE  NULL --USE WINDEFPROC.


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -