📄 camwin_style2.c
字号:
{
AlphaDraw16bitBmpId(CAM_OSD_ROOTMENU_X, CAM_OSD_ROOTMENU_Y, BID_Cam_OSD_BG, NULL, DSPM_Transp ); /* 刷新一级菜单背景 */
for (i=1; i<(menu->itemCnt); i++) /* 整体一级菜单往右移一格 */
{
if (menu->curItem == i)
{
AlphaDraw16bitBmpId( CAM_OSD_ROOTMENU_ITEM_X+(i-1)*CAM_OSD_ROOTMENU_ITEM_W,
CAM_OSD_ROOTMENU_ITEM_Y,BID_Cam_OSD_0_Pixel_0+i*2+eSelect,NULL, DSPM_Transp);
}
else
{
AlphaDraw16bitBmpId( CAM_OSD_ROOTMENU_ITEM_X+(i-1)*CAM_OSD_ROOTMENU_ITEM_W,
CAM_OSD_ROOTMENU_ITEM_Y,BID_Cam_OSD_0_Pixel_0+i*2+eNoSelect,NULL, DSPM_Transp);
}
}
}
else
{
AlphaDraw16bitBmpId(CAM_OSD_ROOTMENU_X, CAM_OSD_ROOTMENU_Y, BID_Cam_OSD_BG, NULL, DSPM_Transp ); /* 刷新一级菜单背景 */
for ( i=0; i<(menu->itemCnt-1); i++ ) /* 整体一级菜单往左移一格 */
{
if ( menu->curItem == i )
{
AlphaDraw16bitBmpId( CAM_OSD_ROOTMENU_ITEM_X+i*CAM_OSD_ROOTMENU_ITEM_W,
CAM_OSD_ROOTMENU_ITEM_Y,BID_Cam_OSD_0_Pixel_0+i*2+eSelect,NULL, DSPM_Transp);
}
else
{
AlphaDraw16bitBmpId( CAM_OSD_ROOTMENU_ITEM_X+i*CAM_OSD_ROOTMENU_ITEM_W,
CAM_OSD_ROOTMENU_ITEM_Y, BID_Cam_OSD_0_Pixel_0+i*2+eNoSelect,NULL, DSPM_Transp);
}
}
}
}
/*----------------------------------------------------------
*Name : Cam_WinSubMenuUpdate
*Desc : 二级菜单刷新
*Params:
*return:
-----------------------------------------------------------*/
void Cam_WinSubMenuUpdate( CAM_MENU * menu, BOOLEAN bFullUpdate )
{
UHRECT rect;
Cam_WinRootMenuUpdate(&gCamMenuRoot,FALSE);
if ( gCamMenuRoot.curItem == eCamZoom ) //滚动条
{
if ( bFullUpdate )
{
AlphaDrawStringIdEx(CAM_OSD_SUBMENU_X, CAM_OSD_SUBMENU_Y, 100,SID_Cam_Pixel+gCamMenuRoot.curItem,Font16X16, &gCamStrColorSel,0);
rect.x = CAM_OSD_SUBMENU_X2;
rect.y = CAM_OSD_SUBMENU_Y+2;
rect.w = 80;
rect.h = 12;
AlphaClearGui(&rect, 0XFFFF);
rect.x = CAM_OSD_SUBMENU_X2;
rect.y = CAM_OSD_SUBMENU_Y+2;
rect.w = 20*menu->curItem;
rect.h = 12;
AlphaClearGui(&rect, 0XF800);
}
else //列表项
{
rect.x = CAM_OSD_SUBMENU_X2;
rect.y = CAM_OSD_SUBMENU_Y+2;
rect.w = 80;
rect.h = 12;
AlphaClearGui(&rect, 0XFFFF);
rect.x = CAM_OSD_SUBMENU_X2;
rect.y = CAM_OSD_SUBMENU_Y+2;
rect.w = 20*menu->curItem;
rect.h = 12;
AlphaClearGui(&rect, 0XF800);
}
}
else
{
if ( bFullUpdate )
{
AlphaDrawStringIdEx(CAM_OSD_SUBMENU_X, CAM_OSD_SUBMENU_Y, 100,SID_Cam_Pixel+gCamMenuRoot.curItem,Font16X16, &gCamStrColorSel,0);
AlphaDrawStringIdEx(CAM_OSD_SUBMENU_X2, CAM_OSD_SUBMENU_Y, 100,menu->menuItemsRes+menu->curItem,Font16X16, &gCamStrColorSel,0);
}
else
{
AlphaDrawStringIdEx(CAM_OSD_SUBMENU_X2, CAM_OSD_SUBMENU_Y, 100,menu->menuItemsRes+menu->curItem,Font16X16, &gCamStrColorSel,0);
}
}
}
/*****************************************************************************/
//OSD 窗口 相关接口
void Cam_WinOSDPaint(BOOLEAN ScnUpdate )
{
if (gGuiAlphaLogicBuf == 0)
return;
AlphaDateChange();
if (ScnUpdate == TRUE)
{
Screen_MCUUpDate();
}
return;
}
/*----------------------------------------------------------
*Name : Cam_WinDestroy
*Desc : camera 窗口的destroy消息处理函数
*Params:
*return:
-----------------------------------------------------------*/
UINT32 Cam_WinDestroy( WINDOW* win , WMPARAM wParam, WLPARAM lParam )
{
//正在录制,则先退出dv
if ((gCameraOsdCurState == eOSD_Dv) && (gCamera.State == Cam_Dving))
Cam_WinDoKeyReturn(win);
Cam_WinProcessStop();
Cam_WinDialogDestroy(NULL);
Cam_WinOSDDeInit();
Cam_Deinit();
return WMPROC_UNHANDLE;
}
/*----------------------------------------------------------
*Name : Cam_WinTick
*Desc : camera 窗口的tick消息处理函数,此处主要是DV 扇动图标显示
*Params:
*return:
-----------------------------------------------------------*/
UINT32 Cam_WinTick( WINDOW* win , WMPARAM wParam, WLPARAM lParam )
{
IdleProcResetAll(); /* 复位idle任务,避免被休眠 */
return;
}
/*----------------------------------------------------------
*Name : Cam_WinUserMsg
*Desc : camera 窗口的WM_USER消息处理函数,此处主要是DV OSD退出操作
*Params:
*return:
-----------------------------------------------------------*/
UINT32 Cam_WinUserMsg( WINDOW* win , WMPARAM wParam, WLPARAM lParam )
{
if ( (DV_RESULT == wParam) && (gCamera.State == Cam_Pause)) //dv 处理返回, 注意当USB插入时这个消息跑不到
{
Cam_WinProcessStop( );
Cam_WinDrawTime(CAM_OSD_STATEBAR_DVTIME_X, CAM_OSD_STATEBAR_DVTIME_Y, 0 );
AlphaDraw16bitBmpId(CAM_DV_STATEICON_X, CAM_DV_STATEICON_Y,BID_Cam_Dv_Stop,NULL,DSPM_Transp);//停止小图标
Cam_WinDialog(gCamDv.dvResult, 1);
Cam_PreviewStart(eSensor);
}
}
/*----------------------------------------------------------
*Name : Cam_WinDoKeyUp
*Desc : up 键处理
*Params:
*return:
-----------------------------------------------------------*/
void Cam_WinDoKeyUp(void)
{
if ( gCameraOsdCurState == eOSD_Setting )
Cam_WinMenuKeyUp();
}
/*----------------------------------------------------------
*Name : Cam_WinDoKeyDown
*Desc : Down 键处理
*Params:
*return:
-----------------------------------------------------------*/
void Cam_WinDoKeyDown(void)
{
if ( gCameraOsdCurState == eOSD_Setting )
Cam_WinMenuKeyDown();
}
/*----------------------------------------------------------
*Name : Cam_WinDoKeyPre
*Desc : Pre 键处理
*Params:
*return:
-----------------------------------------------------------*/
void Cam_WinDoKeyPre(void)
{
if ( gCameraOsdCurState == eOSD_Setting )
Cam_WinMenuKeyPre();
else if (( gCameraOsdCurState == eOSD_Dc ) && ( gCamera.State == Cam_Previewing) )
Cam_WinOsdStateSwitch(eOSD_Dv);
else if (( gCameraOsdCurState == eOSD_Dv ) && ( gCamera.State == Cam_Previewing) ) //DV状态下,只有IDLE才让转
Cam_WinOsdStateSwitch(eOSD_Dc);
}
/*----------------------------------------------------------
*Name : Cam_WinDoKeyNext
*Desc : Next 键处理
*Params:
*return:
-----------------------------------------------------------*/
void Cam_WinDoKeyNext(void)
{
if ( gCameraOsdCurState == eOSD_Setting ) //设置菜单下
Cam_WinMenuKeyNext();
else if (( gCameraOsdCurState == eOSD_Dc ) && ( gCamera.State == Cam_Previewing) ) //DC状态下
Cam_WinOsdStateSwitch(eOSD_Dv);
else if (( gCameraOsdCurState == eOSD_Dv ) && ( gCamera.State == Cam_Previewing) ) //DV状态下,只有IDLE才让转
Cam_WinOsdStateSwitch(eOSD_Dc);
}
/*----------------------------------------------------------
*Name : Cam_WinDoKeyMenu
*Desc : Menu 键处理
*Params:
*return:
-----------------------------------------------------------*/
void Cam_WinDoKeyMenu(void)
{
if ( (gCameraOsdCurState != eOSD_Setting) && (gCamera.State == Cam_Previewing)
&& (DialogTick == DIALOG_NOEXIST_FLAG))
{
Cam_WinOsdStateSwitch(eOSD_Setting);
}
}
/*----------------------------------------------------------
*Name : Cam_WinDoKeyPlay
*Desc : Play 键处理
*Params:
*return:
-----------------------------------------------------------*/
void Cam_WinDoKeyPlay( WINDOW* win )
{
int ret;
if ( gCameraOsdCurState == eOSD_Dc ) //拍照
{
if ( (gCamera.State == Cam_Previewing) || (gCamera.State == Cam_Pause))
{
Cam_PreviewPause(); /*先停止preview*/
Cam_WinProcessStart(CAM_PROCESSBAR_X,CAM_PROCESSBAR_Y); /* 进度条显示 */
DelayMs_nops(50); /*防止刷一半进入DC*/
INPUT_DISABLE();
ret = Cam_DcStart(eSensor); /*启动DC操作*/
INPUT_ENABLE();
Cam_WinProcessStop( );
Cam_WinDialog(ret,1);
Timer_PowerOffDeinit(0);
#if (CAM_SENSOR)
gCamera.sensorIf.Sensor_Set_Zoom(pgCameraConfig->zoom); /*恢复preview*/
#endif
Cam_PreviewStart(eSensor);
}
}
else if ( gCameraOsdCurState == eOSD_Dv )
{
if ( (gCamera.State == Cam_Previewing) || (gCamera.State == Cam_Pause))
{
AlphaDraw16bitBmpId(CAM_DV_STATEICON_X, CAM_DV_STATEICON_Y, BID_Cam_Dv_Playing, NULL, DSPM_Transp); //录制小图标
Cam_PreviewPause();
DelayMs_nops(50); //防止刷一半进入DV
Cam_WinProcessStart(CAM_PROCESSBAR_X,CAM_PROCESSBAR_Y);
INPUT_DISABLE();
ret = Cam_DvStart(eSensor);
INPUT_ENABLE();
Cam_WinProcessStop( );
if ( ret != CAMRET_OK ) //空间不足
{
AlphaDraw16bitBmpId(CAM_DV_STATEICON_X, CAM_DV_STATEICON_Y, BID_Cam_Dv_Stop, NULL, DSPM_Transp); //停止小图标
Cam_WinDialog( ret, 2 ); //ret 错误同对话框类型定义一样,这里调用方便
Cam_PreviewStart(eSensor);
}
}
else if ( gCamera.State == Cam_Dving )
{
Cam_WinProcessStart(CAM_PROCESSBAR_X, CAM_PROCESSBAR_Y);
AlphaDraw16bitBmpId(CAM_DV_STATEICON_X, CAM_DV_STATEICON_Y, BID_Cam_Dv_Stop, NULL, DSPM_Transp); //停止小图标
Cam_DvStop( );
Cam_WinProcessStop( );
}
}
}
/*----------------------------------------------------------
*Name : Cam_WinDoKeyReturn
*Desc : Return 键处理
*Params:
*return:
-----------------------------------------------------------*/
void Cam_WinDoKeyReturn( WINDOW* win )
{
if ( gCameraOsdCurState == eOSD_Setting )
{
Cam_WinOsdStateSwitch(eOSD_Dc);
}
else if ((gCameraOsdCurState == eOSD_Dv) && (gCamera.State == Cam_Dving))/* dvplaying 则停止dv */
{
WindowSendMessage( win, WM_KEY, KE_PLAY_RELEASE, NULL );
}
else
{
WindowDestroy(win);
}
}
/*----------------------------------------------------------
*Name : Cam_WinKeyProc
*Desc : camera 窗口的按键消息处理函数
*Params:
*return:
-----------------------------------------------------------*/
UINT32 Cam_WinKeyProc( WINDOW* win , WMPARAM wParam, WLPARAM lParam )
{
UINT16 keyPress = (UINT16)((wParam)>>16);
UINT16 KEY_EV =(UINT16)(wParam);
switch (KEY_EV)
{
case KE_PREV_LONGP:
case KE_PREV_RELEASE:
if (gCamera.State == Cam_Previewing)
{
Cam_WinDoKeyPre();
}
break;
case KE_NEXT_LONGP:
case KE_NEXT_RELEASE:
if (gCamera.State == Cam_Previewing)
{
Cam_WinDoKeyNext();
}
break;
case KE_DN_LONGP:
case KE_DN_RELEASE:
if (gCamera.State == Cam_Previewing)
{
Cam_WinDoKeyDown();
}
break;
case KE_UP_LONGP:
case KE_UP_RELEASE:
if (gCamera.State == Cam_Previewing)
{
Cam_WinDoKeyUp();
}
break;
case KE_MENU_RELEASE:
if (gCamera.State == Cam_Previewing)
{
Cam_WinDoKeyMenu();
}
break;
case KE_PLAY_RELEASE:
Cam_WinDoKeyPlay(win);
break;
case KE_RETURN_RELEASE:
Cam_WinDoKeyReturn(win);
break;
default:
return FALSE;
}
Cam_WinOSDPaint(TRUE);
return TRUE;
}
/* camera 主窗口消息处理列表 */
BEGIN_APPMESSAGE_MAP( CameraWinProcMap , CW_TYPE_Bmp)
ON_MESSAGE(WM_KEY, Cam_WinKeyProc)
ON_MESSAGE(WM_DESTROY, Cam_WinDestroy)
ON_MESSAGE(WM_TICK, Cam_WinTick)
ON_MESSAGE(WM_USER, Cam_WinUserMsg)
END_MESSAGE_MAP( )
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -