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

📄 ihistory.c

📁 以栈结构实现的多级菜单
💻 C
字号:
#include "IHistory.h"
#include "AeeFile.h"
#include "AEEAppGen.h"
#include "WindowStack.h"
#include "MenuList_res.h"
/////////////////////////Static Function//////////////////////
static boolean HISTORYWIN_HandleKeyEvent(IHistoryWin* pWin,uint16 wParam);

#define WAP_HISTORY_FILENAME "MenuList/history.dat"
//窗口的控件
typedef enum
{
    INPUT_SOFTKEYCTL=0,
    INPUT_MENUCTL
}THistoryWinCtlType;
//软键控件的ItemId定义
typedef enum
{
  INPUT_SOFTKEY_ITEM = 1,
  INPUT_SOFTKEY_ITEM_GOTO,
  INPUT_SOFTKEY_ITEM_EDIT,
  INPUT_SOFTKEY_ITEM_NEW,
  INPUT_SOFTKEY_ITEM_DEL
}THistoryWinItems;
//按键事件的处理
//static boolean IINPUTWINDOW_HandleKeyEvent(IInputWin* pWin,uint16 wParam);
//软键菜单的处理
//static boolean IINPUTWINDOW_HandleCommandEvent(IInputWin* pWin,uint16 wParam);
//设置窗口中控件的激活状态
//static boolean IINPUTWINDOW_SetActiveCtl(IInputWin* pWin,TInputCtlType nTextCtl);
/////////////////////////Public Function//////////////////////

boolean HistoryDlg()
{
	AEEApplet* pApp=(AEEApplet*)GETAPPINSTANCE();
	AEERect MenuRect;
	AEERect SoftRect;
	IFile *pIFile;
	IFileMgr *pIFileMgr = NULL;
	IHistoryWin *ptHistoryWin = (IHistoryWin *)MALLOC(sizeof(IHistoryWin));
	//AEERect m_rc;
	if (NULL == ptHistoryWin)
		return FALSE;
	ISHELL_CreateInstance(pApp->m_pIShell, AEECLSID_MENUCTL, (void **)&(ptHistoryWin->m_pMenuCtl));

	if(SUCCESS!=ISHELL_CreateInstance(pApp->m_pIShell,AEECLSID_SOFTKEYCTL,(void **)&(ptHistoryWin->m_pSoftKeyCtl)))
	{
		HistoryWIN_Release(pApp->m_pIShell,&ptHistoryWin);
		return FALSE;
	}

	IMENUCTL_AddItem(ptHistoryWin->m_pSoftKeyCtl, MENULIST_RES_FILE, IDS_GOTO,INPUT_SOFTKEY_ITEM_GOTO, NULL, 0);
	IMENUCTL_AddItem(ptHistoryWin->m_pSoftKeyCtl, MENULIST_RES_FILE, IDS_DEL,INPUT_SOFTKEY_ITEM_DEL, NULL, 0);
	
	IMENUCTL_GetRect(ptHistoryWin->m_pMenuCtl, &MenuRect);
	IMENUCTL_GetRect(ptHistoryWin->m_pSoftKeyCtl, &SoftRect);
	MenuRect.dy = (int16)(SoftRect.y);
	IMENUCTL_SetRect(ptHistoryWin->m_pMenuCtl, &MenuRect);
	
	if(SUCCESS!=ISHELL_CreateInstance(pApp->m_pIShell,AEECLSID_FILEMGR,(void **)&pIFileMgr))
	{
		HistoryWIN_Release(pApp->m_pIShell,&ptHistoryWin);
		return FALSE;
	}

	if (IFILEMGR_Test(pIFileMgr, WAP_HISTORY_FILENAME) == EFAILED) {
		pIFile = IFILEMGR_OpenFile(pIFileMgr, WAP_HISTORY_FILENAME, _OFM_CREATE);
	}
	else {
		if ((pIFile = IFILEMGR_OpenFile(pIFileMgr, WAP_HISTORY_FILENAME, _OFM_READWRITE)) == NULL) {
			IFILEMGR_Release(pIFileMgr);
			// free menus here
			return FALSE;
		}
		//ReadBookmarks(pIFileMgr, pIFile, ptBookmarkWin);
	}
	//IMENUCTL_SetActive(ptHistoryWin->m_pMenuCtl,TRUE);	
	IMENUCTL_SetActive(ptHistoryWin->m_pSoftKeyCtl,TRUE);
	return IWINSTACK_OpenWindow(WAPWINID_HISTORY, ptHistoryWin);
}

void*   HistoryWIN_Create(IShell* pShell,void* pParam)
{
	pShell=pShell;
	return pParam;
}
boolean HistoryWIN_Release(IShell* pShell,void** pWin)
{
	IHistoryWin* pHistoryWin=*pWin;
	if(pHistoryWin)
	{
		if(pHistoryWin->m_pSoftKeyCtl)
			IMENUCTL_Release(pHistoryWin->m_pSoftKeyCtl);
		if(pHistoryWin->m_pMenuCtl)
			IMENUCTL_Release(pHistoryWin->m_pMenuCtl);
		FREEIF(*pWin);
	}
	return TRUE;
}
boolean HistoryWIN_Redraw(IShell* pShell,void* pWin)
{
	IHistoryWin* pHistoryWin=pWin;
	AEEApplet* pApp=(AEEApplet*)GETAPPINSTANCE();
	if(pHistoryWin&&pApp)
	{
		IDISPLAY_ClearScreen(pApp->m_pIDisplay);
		if(pHistoryWin->m_pMenuCtl)
			IMENUCTL_Redraw(pHistoryWin->m_pMenuCtl);
		if(pHistoryWin->m_pSoftKeyCtl)
			IMENUCTL_Redraw(pHistoryWin->m_pSoftKeyCtl);
			
		IDISPLAY_Update(pApp->m_pIDisplay);
	}
	return TRUE;
}

boolean HISTORYWIN_EventHandle(void* pWin,AEEEvent eCode, uint16 wParam, uint32 dwParam)
{
	IHistoryWin* pHistoryWin=pWin;
	boolean bDispatched = FALSE;
	//CMenuList *pApp = (CMenuList *) pWin;
	if(NULL==pHistoryWin) return FALSE;

	switch(eCode)
	{
	case EVT_KEY:
		bDispatched=HISTORYWIN_HandleKeyEvent(pHistoryWin,wParam);
		break;
	//case EVT_COMMAND:
	//	bDispatched=HandleSoftButtons(pHistoryWin,wParam);
		//break;
	}
	return bDispatched;
}

static boolean HISTORYWIN_HandleKeyEvent(IHistoryWin* pWin,uint16 wParam)
{
	IHistoryWin* pHistoryWin=pWin;
	boolean bDispatched = FALSE;

	if(NULL==pHistoryWin) 
		return FALSE;
	switch(wParam) 
	{
	case AVK_UP:
	case AVK_DOWN:
		if(IMENUCTL_IsActive(pHistoryWin->m_pSoftKeyCtl))
		{	
			IMENUCTL_SetActive(pHistoryWin->m_pMenuCtl, TRUE);
			IMENUCTL_SetActive(pHistoryWin->m_pSoftKeyCtl, FALSE);
		       IMENUCTL_SetSel(pHistoryWin->m_pMenuCtl, INPUT_MENUCTL);
			bDispatched = TRUE;//保证每个分支都有返回
		}
		else //若当前激活是菜单控件则交由下面自己处理
		bDispatched=IMENUCTL_HandleEvent(pHistoryWin->m_pMenuCtl,EVT_KEY,wParam,0);
		break;
	case AVK_CLR://关闭窗口
		IWINSTACK_CloseWindow(TRUE);
		bDispatched = TRUE;
		break;
	case AVK_SELECT:
		//当软键不在激活状态时按Select会将软键设为激活
		if(pHistoryWin->m_pMenuCtl&&IMENUCTL_IsActive(pHistoryWin->m_pMenuCtl))
		{
			IMENUCTL_SetActive(pHistoryWin->m_pMenuCtl, FALSE);
			IMENUCTL_SetActive(pHistoryWin->m_pSoftKeyCtl, TRUE);
		}
		else if(pHistoryWin->m_pSoftKeyCtl&&IMENUCTL_IsActive(pHistoryWin->m_pSoftKeyCtl))
		bDispatched=IMENUCTL_HandleEvent(pHistoryWin->m_pSoftKeyCtl,EVT_KEY,wParam,0);
		//bDispatched = TRUE;
		break;
	case AVK_RIGHT:
	case AVK_LEFT:
		bDispatched = IMENUCTL_HandleEvent(pHistoryWin->m_pSoftKeyCtl, EVT_KEY, wParam, 0);
		break;
	}
	return bDispatched;
}

⌨️ 快捷键说明

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