|
新学emwin,nxp的项目,想使用iconview做一个可以竖屏显示大概两三页的程序,而且可以做竖屏的滑屏操作。
请问各位大神有什么指导?
我自己写了一个,想法是建立一个iconview含有60多个图片,创建一个mdev用来存储,通过滑屏操作以及mdev的坐标来显示不同的内容到屏幕上,目前不能滑屏操作,屏幕也没有改变,如下:
#include "DIALOG.h"
#include "MenuManager.h"
#include "KeyBoard.h"
extern GUI_CONST_STORAGE GUI_BITMAP bmaddbtn;
#define ID_WINDOW_0 (GUI_ID_USER + 0x00)
#define ID_PROGBAR_0 (GUI_ID_USER + 0x02)
#define ID_TEXT_0 (GUI_ID_USER + 0x03)
#define ID_LISTBOX_0 (GUI_ID_USER + 0x07)
#define ID_TEXT_2 (GUI_ID_USER + 0x0D)
#define ID_ICONVIEW_0 (GUI_ID_USER + 0x0E)
static const GUI_WIDGET_CREATE_INFO _aDialogCreate[] = {
{ WINDOW_CreateIndirect, "AddDeviceWindow", ID_WINDOW_0, 0, 0, 480, 272, 0, 0x0, 0 },
{ PROGBAR_CreateIndirect, "Progbar", ID_PROGBAR_0, 445, 2, 30, 20, 0, 0x0, 0 },
{ TEXT_CreateIndirect, "Text", ID_TEXT_0, 188, 3, 80, 20, 0, 0x64, 0 },
{ TEXT_CreateIndirect, "<", ID_TEXT_2, 7, 7, 41, 21, 0, 0x0, 0 },
{ LISTBOX_CreateIndirect, "Listbox", ID_LISTBOX_0, 400, 27, 80, 92, 0, 0x0, 0 },
};
static const GUI_WIDGET_CREATE_INFO _aDialogCreate1[] = {
{ ICONVIEW_CreateIndirect, "Iconview", ID_ICONVIEW_0, 30, 29, 480, 272*3, 0, 0x00400040, 0 },
};
const GUI_ConstString ListBox[] =
{
"Delete","Rename",NULL
};
static GUI_MEMDEV_Handle hMemIconV;
static GUI_MEMDEV_Handle hMemWork;
static ICONVIEW_Handle hIconV;
static WM_HWIN hWinChild;
static LISTBOX_Handle hListBox;
static int bShowList = 0;
static uint32_t y0 = 0;
static void _cbDialog(WM_MESSAGE * pMsg) {
GUI_MEMDEV_Handle hMemOld;
WM_HWIN hItem;
int NCode;
int Id;
static uint32_t tStart, tEnd;
switch (pMsg->MsgId) {
case MSG_KEYBOARD_CPL:
if (KeyboardGetString())
{
PRINTF("MSG_KEYBOARD_CPL :%s\n",KeyboardGetString());
hItem = WM_GetDialogItem(pMsg->hWin, ID_ICONVIEW_0);
int nums = ICONVIEW_GetNumItems(hItem);
int sel = ICONVIEW_GetSel(hItem);
ICONVIEW_SetItemText(hItem, sel, KeyboardGetString());
if ((sel+1) == nums)
{
PRINTF("MSG_KEYBOARD_CPL :1\n");
ICONVIEW_AddBitmapItem(hItem, &bmaddbtn, "New");
}
GUI_Exec();
}
break;
case WM_INIT_DIALOG:
hItem = pMsg->hWin;
WINDOW_SetBkColor(hItem, GUI_MAKE_COLOR(0x00525143));
hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_0);
TEXT_SetTextColor(hItem, GUI_MAKE_COLOR(0x00FFFFFF));
TEXT_SetTextAlign(hItem, GUI_TA_HCENTER | GUI_TA_VCENTER);
TEXT_SetText(hItem, "Device manager");
//
// Initialization of '<'
//
hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_2);
TEXT_SetTextColor(hItem, GUI_MAKE_COLOR(0x00FFFFFF));
TEXT_SetTextAlign(hItem, GUI_TA_HCENTER | GUI_TA_VCENTER);
hListBox = WM_GetDialogItem(pMsg->hWin, ID_LISTBOX_0);
LISTBOX_SetBackColor(hListBox,0,GUI_BLUE);
LISTBOX_SetBackColor(hListBox,1,GUI_LIGHTBLUE);
LISTBOX_SetTextColor(hListBox,0,GUI_WHITE);
LISTBOX_SetFont(hListBox,&GUI_Font16B_1);
LISTBOX_AddString(hListBox, "Delete");
LISTBOX_AddString(hListBox, "Rename");
WM_HideWindow(hListBox);
bShowList = 0;
GUI_SetColor(0x00FFFFFF);
GUI_AA_DrawLine(0,28,480,28);
break;
case WM_NOTIFY_PARENT:
Id = WM_GetId(pMsg->hWinSrc);
NCode = pMsg->Data.v;
switch(Id) {
case ID_ICONVIEW_0: // Notifications sent by 'Iconview'
switch(NCode) {
case WM_NOTIFICATION_CLICKED:
tStart = GUI_GetTime();
PRINTF("tStart:%d\r\n", tStart);
break;
case WM_NOTIFICATION_RELEASED:
{}
case WM_NOTIFICATION_MOVED_OUT:
break;
case WM_NOTIFICATION_SCROLL_CHANGED:
break;
case WM_NOTIFICATION_SEL_CHANGED:
break;
}
break;
}
break;
default:
WM_DefaultProc(pMsg);
break;
}
}
static void _cbchildWin(WM_MESSAGE * pMsg) {
WM_MOTION_INFO * pInfo;
GUI_MEMDEV_Handle hMemOld;
WM_HWIN hItem;
int NCode;
int Id;
// USER START (Optionally insert additional variables)
// USER END
switch (pMsg->MsgId) {
case WM_MOTION:
//WM_GetUserData(hWin, &pPara, sizeof(pPara));
pInfo = (WM_MOTION_INFO *)pMsg->Data.p;
//PRINTF("WM_MOTION pInfo->Cmd;%d\r\n", pInfo->Cmd);
switch (pInfo->Cmd)
{
case WM_MOTION_INIT:
pInfo->Flags = WM_CF_MOTION_Y | WM_MOTION_MANAGE_BY_WINDOW;
pInfo->SnapX = 1;
break;
case WM_MOTION_MOVE:
//WM_MoveTo(hWin, pPara->Pos, 0);
y0-=30;
if(y0 < -1000)
y0 += 30;
PRINTF("WM_MOTION_MOVE :%d\n", y0);
//
break;
case WM_MOTION_GETPOS:
//pInfo->xPos = pPara->Pos;
break;
case WM_MOTION_GETCONTEXT:
#if 0
y0-=30;
PRINTF("WM_PAINT :%d\n", y0);
WM_MoveTo(hWinChild, 0, y0);
#endif
break;
}
break;
case WM_PRE_PAINT:
//PRINTF("WM_PRE_PAINT\r\n");
GUI_MULTIBUF_Begin();
break;
case WM_POST_PAINT:
//PRINTF("WM_POST_PAINT\r\n");
GUI_MULTIBUF_End();
break;
case WM_PAINT:
PRINTF("WM_PAINT\r\n");
//GUI_ClearRect(0,_aDialogCreate[4].y0, LCD_GetXSize(), LCD_GetYSize()-_aDialogCreate[4].y0);
GUI_DrawGradientV(0,1, LCD_GetXSize(), LCD_GetYSize()-_aDialogCreate1[0].y0,GUI_BLACK, GUI_RED);
#if 1
//WM_MoveTo(hWinChild, 0, y0);
//GUI_MEMDEV_SetOrg(hMemIconV, 0, y0);
GUI_MEMDEV_WriteAt(hMemIconV, 0,_aDialogCreate1[0].y0+100);
#else
hMemOld = GUI_MEMDEV_Select(hMemIconV);
GUI_MEMDEV_SetOrg(hMemIconV, 0, y0);
GUI_MEMDEV_Select(hMemWork);
GUI_MEMDEV_WriteAt(hMemIconV, 0, 0);
GUI_MEMDEV_Select(hMemOld);
GUI_MEMDEV_WriteAt(hMemWork, 0,_aDialogCreate1[0].y0);
#endif
//WM_MoveTo(hWinChild, 0, y0);
break;
default:
WM_DefaultProc(pMsg);
break;
}
}
/*********************************************************************
*
* Public code
*
**********************************************************************
*/
void CreateIconView(void)
{
GUI_SetBkColor(GUI_TRANSPARENT);
GUI_Clear();
hIconV = ICONVIEW_CreateEx(10,10,_aDialogCreate1[0].xSize,_aDialogCreate1[0].ySize, hWinChild, WM_CF_SHOW | WM_CF_HASTRANS, 0, GUI_ID_ICONVIEW0, 64, 64);
ICONVIEW_SetBkColor(hIconV, ICONVIEW_CI_UNSEL, GUI_MAKE_COLOR(0x00525143));
ICONVIEW_SetBkColor(hIconV, ICONVIEW_CI_SEL, GUI_MAKE_COLOR(0x00525143));
ICONVIEW_SetIconAlign(hIconV, ICONVIEW_IA_TOP);
ICONVIEW_SetTextColor(hIconV, ICONVIEW_CI_UNSEL, GUI_WHITE);
ICONVIEW_SetTextColor(hIconV, ICONVIEW_CI_SEL, GUI_GREEN);
ICONVIEW_SetFrame(hIconV, GUI_COORD_X, 0);
ICONVIEW_SetFrame(hIconV, GUI_COORD_Y, 0);
ICONVIEW_SetSpace(hIconV, GUI_COORD_X, 0);//(350-64*4)/3);
ICONVIEW_SetSpace(hIconV, GUI_COORD_Y, 0);//(200-64*2)/1);
ICONVIEW_SetFont(hIconV, GUI_FONT_16_1);
int index = 0;
for(;index < 60; ++index){
char buf[6];
sprintf(buf,"%s%d","STB", index);
ICONVIEW_AddBitmapItem(hIconV, &bmaddbtn, buf);
}
ICONVIEW_AddBitmapItem(hIconV, &bmaddbtn, "TV");
ICONVIEW_AddBitmapItem(hIconV, &bmaddbtn, "New");
}
/*********************************************************************
*
* CreateAddDeviceWindow
*/
WM_HWIN CreateDevListMngDLG(void);
WM_HWIN CreateDevListMngDLG(void) {
WM_HWIN hWin;
WM_SetSize(WM_HBKWIN, LCD_GetXSize(), LCD_GetYSize());
hWin = GUI_CreateDialogBox(_aDialogCreate, GUI_COUNTOF(_aDialogCreate), _cbDialog, WM_HBKWIN, 0, 0);
hWinChild = WM_CreateWindowAsChild(
0,
_aDialogCreate1[0].y0,
LCD_GetXSize(),
LCD_GetYSize()*2,
WM_HBKWIN, WM_CF_SHOW | WM_CF_MOTION_Y, _cbchildWin, 100//sizeof(PARA *)
);
WM_MOTION_SetDefaultPeriod(20);
WM_MOTION_SetMoveable(hWinChild, WM_CF_MOTION_Y, 1);
WM_MOTION_SetMotion(hWinChild, GUI_COORD_Y, 500, 200);
WM_MOTION_SetMovement(hWinChild, GUI_COORD_Y, 1000, 100);
hMemIconV = GUI_MEMDEV_CreateFixed(
0,
0,//_aDialogCreate1[0].y0,
_aDialogCreate1[0].xSize,
LCD_GetYSize()*2-_aDialogCreate1[0].y0-1,
GUI_MEMDEV_NOTRANS, GUI_MEMDEV_APILIST_32, GUICC_8888
);
if (hMemIconV == 0) {
PRINTF("hMemIconV null\r\n");
//return 1;
}
GUI_MEMDEV_Select(hMemIconV);
CreateIconView();
GUI_MEMDEV_Select(0);
PRINTF("CreateDevListMngDLG\r\n");
#if 0
hMemWork = GUI_MEMDEV_CreateFixed(
0,
0,//_aDialogCreate1[0].y0,
LCD_GetXSize(),
LCD_GetYSize()*3,
GUI_MEMDEV_NOTRANS, GUI_MEMDEV_APILIST_32, GUICC_8888
);
if (hMemWork == 0) {
PRINTF("hMemWork null\r\n");
//return 1;
}
#endif
return hWin;
}
// USER START (Optionally insert additional public code)
// USER END
/*************************** End of file ****************************/
|
|