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

📄 uidilog.c

📁 瑞星微公司RK27XX系列芯片的SDK开发包
💻 C
字号:
/******************************************************************/
/*  Copyright (C) 2007 ROCK-CHIPS FUZHOU . All Rights Reserved.  */
/*******************************************************************
File :  uidilog.c
Desc :  对话框类窗口

Author :  GUI Develop Group.lzj
Date :  2007-08-10
Notes :
$Log: uidilog.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.12  2008/01/10 14:02:52  Lingzhaojun
修改音频播放弹出菜单打勾各选项

Revision 1.11  2008/01/07 07:44:22  Lingzhaojun
no message

Revision 1.10  2007/12/06 05:16:18  Huangshilin
增加 视频静态buffer和GUI 复用.修改窗口系统.

Revision 1.9  2007/11/15 12:27:01  Lingzhaojun
提交打印屏幕数字消息框

Revision 1.8  2007/11/15 11:21:49  Lingzhaojun
提交打印屏幕数字消息框

Revision 1.7  2007/11/06 08:05:50  Lingzhaojun
提交gui相关改动

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

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

Revision 1.4  2007/10/08 04:02:23  Lingzhaojun
去除GUI的VC编译警告

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

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


#include "uidilog.h"


UINT8 pStringBuf[20];

/*----------------------------------------------------------------------
Name  :  DataBoxInt32
Desc  :  通过对话框打印一个数字
Params:  data 要打印的数字
Return:
Author:  Lingzj
Date  :  070830
----------------------------------------------------------------------*/
void DataBoxInt32(INT32 data)
{

    //创建对话框窗口
    WindowCreateDilog(WindowGetFocusWin(),
                      WS_TICK | WES_DilogData,
                      1084,
                      76, 70,
                      170, 100,
                      SID_Txt_Warn,
                      BID_DilogBack76_70,
                      NULL,
                      WinDilogProcMap,
                      (void*)data);



}

/*----------------------------------------------------------------------
Name  :  DilogboxSetPic
Desc  :  对话框设置图片
Params:  设对话窗口的图片,wParam为图片的资源ID
Return:  处理结果
Author:  Lingzj
Date  :  070830
----------------------------------------------------------------------*/
UINT32 DilogboxSetPic(WINDOW* win , WMPARAM wParam, WLPARAM lParam)

{

    W_Dilog *WDilogObj = (W_Dilog*)win->Data;

    WDilogObj->IconBmp.BmpID = wParam;
    WindowInvalidateWindow(win);

    return TRUE;
}



/*----------------------------------------------------------------------
Name  :  DilogboxSetTxt
Desc  :  设置动画窗口的文本,lParam为文本的资源ID
Params:
Return:  处理结果
Author:  Lingzj
Date  :  070830
----------------------------------------------------------------------*/
UINT32 DilogboxSetTxt(WINDOW* win , WMPARAM wParam, WLPARAM lParam)
{

    W_Dilog *WDilogObj = (W_Dilog*)win->Data;

    WDilogObj->TxtID = wParam;
    WindowInvalidateWindow(win);

    return TRUE;
}



/*----------------------------------------------------------------------
Name  :  DilogboxPaint
Desc  :  对话框画屏消息
Params:
Return:  处理结果
Author:  Lingzj
Date  :  070830
----------------------------------------------------------------------*/
UINT32 DilogboxPaint(WINDOW* win , WMPARAM wParam, WLPARAM lParam)
{

    W_Dilog *WDilogObj = (W_Dilog*)win->Data;
    DispMode TranspLevel = WinGetTranStyle(win->style);
    if (!(WIN_NEEDPAIT(win)))
        return TRUE;

    DrawPicture(WDilogObj->IconBmp);
    if (win->style&WES_DilogData) //数字型对话框
    {
        UINT16 sx, sy;
        //win->PrivateData=-987654321;
        Data2String((INT32)win->PrivateData, (char*)pStringBuf);
        sx = win->x + (win->w - 12 * 8) / 2;
        sy = win->y + (win->h / 3);

        DrawStringAsiiEx(sx, sy, 100, (char*)pStringBuf, Font16X16, NULL, 0);
        WIN_CLEARPAIT(win);
        return TRUE;

    }

    if ((win->style&WES_DilogOK) || (win->style&WES_DilogASK))
        TxtBox(win, WDilogObj->TxtID, Font16X16, LeanUpStyle);
    else
        TxtBox(win, WDilogObj->TxtID, Font16X16, CenterStyle);


    WIN_CLEARPAIT(win);

    return TRUE;
}



/*----------------------------------------------------------------------
Name  :  DilogboxCommand
Desc  :  对话框command消息传递,负责将按钮子窗口的消息以command的形式发送给上级窗口
Params:
Return:  处理结果
Author:  Lingzj
Date  :  070830
----------------------------------------------------------------------*/
UINT32 DilogboxCommand(WINDOW* win , WMPARAM wParam, WLPARAM lParam)
{
    INT16U  cwID = WM_CMD_GETCWID(wParam);
    INT16U  cwEvent = WM_CMD_GETEVENT(wParam);

    switch (cwID)
    {

        case WID_ButtonOK:
            {
                if (EV_ButtonPress == cwEvent)
                {
                    //WinSendCommand(win, EV_Confirm);
                    WindowSendMessage(win->Parent, WM_COMMAND, ((UINT32)(win->id)) << 16 | EV_Confirm, win);
                    WindowDestroy(win);

                }
            }

            break;

        case WID_ButtonOKCancel:
            {
                if (EV_ButtonPress == cwEvent)
                {
                    //WinSendCommand(win, EV_Cancel);
                    WindowSendMessage(win->Parent, WM_COMMAND, ((UINT32)(win->id)) << 16 | EV_Cancel, win);
                    WindowDestroy(win);
                }
            }

            break;

    }
    return TRUE;
}



/*----------------------------------------------------------------------
Name  :  DilogboxTouch
Desc  :  对话框对触摸屏的响应,直接发送给用户
Params:
Return:  处理结果
Author:  Lingzj
Date  :  070830
----------------------------------------------------------------------*/
UINT32 DilogboxTouch(WINDOW* win , WMPARAM wParam, WLPARAM lParam)
{

    W_Dilog *WDilogObj = (W_Dilog*)win->Data;



    return TRUE;
}


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

    if (keyPress)
        return FALSE;


    if (win->style&WES_DilogASK)
    {
        WINDOW *fouce;
        switch (KEY_EV)
        {
            case KE_NEXT_RELEASE:
            case KE_DN_RELEASE:
            case KE_UP_RELEASE:
            case KE_PREV_RELEASE:

                if (WDilogObj->FouceOk)
                {
                    WindowChildIDSendMessage(win, WID_ButtonOKCancel, WM_SETFOCUS, 0, NULL);
                    WindowChildIDSendMessage(win, WID_ButtonOK, WM_KILLFOCUS, 0, NULL);
                }
                else
                {
                    WindowChildIDSendMessage(win, WID_ButtonOK, WM_SETFOCUS, 0, NULL);
                    WindowChildIDSendMessage(win, WID_ButtonOKCancel, WM_KILLFOCUS, 0, NULL);
                }
                WDilogObj->FouceOk = !WDilogObj->FouceOk;
                WindowInvalidateWindow(win);
                break;

            case KE_PLAY_RELEASE:
            case KE_MENU_RELEASE:

                if (WDilogObj->FouceOk)
                    WindowSendMessage(win->Parent, WM_COMMAND, ((UINT32)(win->id)) << 16 | EV_Confirm, win);
                else
                    WindowSendMessage(win->Parent, WM_COMMAND, ((UINT32)(win->id)) << 16 | EV_Cancel, win);
                WindowDestroy(win);


            default:
                break;

        }

    }


    if (KE_RETURN_RELEASE == KEY_EV)
        WindowDestroy(win);

    return TRUE;

}


/*----------------------------------------------------------------------
Name  :  DilogboxSetFocus
Desc  :  对话框得到焦点消息处理,目前没有这方面需求,为将来扩展保留接口
Params:
Return:  处理结果
Author:  Lingzj
Date  :  070830
----------------------------------------------------------------------*/
UINT32 DilogboxSetFocus(WINDOW* win , WMPARAM wParam, WLPARAM lParam)
{



    return TRUE;
}


/*----------------------------------------------------------------------
Name  :  DilogboxLostFocus
Desc  :   对话框失去焦点消息处理,目前没有这方面需求,为将来扩展保留接口
Params:
Return:  处理结果
Author:  Lingzj
Date  :  070830
----------------------------------------------------------------------*/
UINT32 DilogboxLostFocus(WINDOW* win , WMPARAM wParam, WLPARAM lParam)
{



    return TRUE;
}


/*----------------------------------------------------------------------
Name  :  DilogboxCreat
Desc  :  对话框创建消息
Params:
Return:  处理结果
Author:  Lingzj
Date  :  070830
----------------------------------------------------------------------*/
UINT32 DilogboxCreat(WINDOW* win , WMPARAM wParam, WLPARAM lParam)
{
    W_Dilog *WDilogObj = NULL;
    WINDOW* Wbutton = NULL;

    WDilogObj = MallocClass(W_Dilog);

    if (WDilogObj)
    {
        WDilogObj->IconBmp.BmpID = win->BmpID;  /*对话框窗口背景图片*/
        WDilogObj->IconBmp.X = win->x;
        WDilogObj->IconBmp.Y = win->y;
        WDilogObj->TxtID = win->CaptionID; /*对话框文本*/
        WDilogObj->FouceOk = TRUE;
        win->Data = WDilogObj;
    }




    return TRUE;
}



/*----------------------------------------------------------------------
Name  :  DilogboxDestroy
Desc  :  对话框关闭消息
Params:
Return:  处理结果
Author:  Lingzj
Date  :  070830
----------------------------------------------------------------------*/
UINT32 DilogboxDestroy(WINDOW* win , WMPARAM wParam, WLPARAM lParam)
{
    W_Dilog *WDilogObj = (W_Dilog*)win->Data;

    FreeClass(WDilogObj);

    return TRUE;
}




/*对话框基本消息描述表*/
BEGIN_CHILDMESSAGE_MAP(WinDilogProcMap , CW_TYPE_Dilog)
ON_MESSAGE(WM_PAINT ,  DilogboxPaint)
ON_MESSAGE(WM_DESTROY , DilogboxDestroy)
ON_MESSAGE(WM_COMMAND,  DilogboxCommand)
ON_MESSAGE(WM_KEY,   DilogboxKey)
ON_MESSAGE(WM_CREATE,  DilogboxCreat)
ON_MESSAGE(WM_SetPic,  DilogboxSetPic)
ON_MESSAGE(WM_SetTxt,  DilogboxSetTxt)
ON_MESSAGE(WM_TOUCH ,  DilogboxTouch)
ON_MESSAGE(WM_SETFOCUS,  DilogboxSetFocus)
ON_MESSAGE(WM_KILLFOCUS, DilogboxLostFocus)
ON_MESSAGE(WM_COMMAND,  DilogboxCommand)
END_MESSAGE_MAP()






/*----------------------------------------------------------------------
Name  :  WindowCreateDilog
Desc  :  对话框创建函数
Params:
Return:  创建的对话框窗口指针
Author:  Lingzj
Date  :  070830
----------------------------------------------------------------------*/
WINDOW* WindowCreateDilog(
    WINDOW    *parent,  //父窗口
    INT32U    style,   //风格
    WIN_ID    id ,   //窗口 ID
    INT16S    x,    //窗口ID
    INT16S    y,
    INT16S    w,
    INT16S    h,
    INT16U    captionId,
    INT16U    bmpId,
    PCHILD_WINDOW  childList,   //子窗口列表.
    PWINDOW_PROCREG  procRegList ,  //消息处理列表.
    void    *privateData  //私有数据
)
{
    WINDOW*win = NULL;
    UINT16 i = 0;

    CHILD_WINDOW ChildButtonOK[] =
    {
        {CW_TYPE_Button, WID_ButtonOK, 0, 0, ButtonW, 20, (WS_TICK | WS_CHILDS | WS_ACTIVE | WS_BEFOCUS), SID_YES, BID_DilogButton0},
        CWIN_LASTITEM
    };
    CHILD_WINDOW ChildButtonOKCancel[] =
    {
        {CW_TYPE_Button, WID_ButtonOK, 0, 0, ButtonW, 20, (WS_TICK | WS_CHILDS | WS_ACTIVE | WS_BEFOCUS), SID_YES, BID_DilogButton0 },
        {CW_TYPE_Button, WID_ButtonOKCancel, 0, 0, ButtonW, 20, (WS_TICK | WS_CHILDS | WS_ACTIVE), SID_NO, BID_DilogButton0 },
        CWIN_LASTITEM
    };




    if (style&WES_DilogOK)
    {
        ChildButtonOK[0].x = x + (w - ButtonW) / 2;
        ChildButtonOK[0].y = y + h * 2 / 3 - 15;
        /*创建对话框窗口*/
        win = WindowCreate(parent ,
                           WS_TICK | WES_DilogOK,
                           (UINT16)id,
                           x, y,
                           w, h,
                           captionId,
                           bmpId,
                           0,
                           ChildButtonOK,
                           WinDilogProcMap,
                           NULL);

    }

    else if (style&WES_DilogASK)
    {
        ChildButtonOKCancel[0].x = x + w * 30 / 100 - ButtonW / 2;
        ChildButtonOKCancel[0].y = y + h * 2 / 3 - 15;
        ChildButtonOKCancel[1].x = x + w * 70 / 100 - ButtonW / 2;
        ChildButtonOKCancel[1].y = y + h * 2 / 3 - 15;

        /*创建对话框窗口*/
        win = WindowCreate(parent ,
                           style | WS_TICK | WES_DilogASK,
                           (UINT16)id,
                           x, y,
                           w, h,
                           captionId,
                           bmpId,
                           0,
                           ChildButtonOKCancel,
                           WinDilogProcMap,
                           NULL);

    }
    else if (style&WES_DilogData)
    {
        ChildButtonOK[0].x = x + (w - ButtonW) / 2;
        ChildButtonOK[0].y = y + h * 2 / 3 - 15;
        /*创建对话框窗口*/
        win = WindowCreate(parent ,
                           WS_TICK | WES_DilogData,
                           (UINT16)id,
                           x, y,
                           w, h,
                           captionId,
                           bmpId,
                           0,
                           ChildButtonOK,
                           WinDilogProcMap,
                           privateData);
    }
    else
    {
        /*创建对话框窗口*/
        win = WindowCreate(parent ,
                           style | WS_TICK | WS_TIMEOUT,
                           (UINT16)id,
                           x, y,
                           w, h,
                           captionId,
                           bmpId,
                           0,
                           NULL,
                           WinDilogProcMap,
                           NULL);

        WindowSetTimeOut(win, DilogTimeOut);
    }


    return win;



}

















⌨️ 快捷键说明

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