📄 uidilog.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 + -