/*********************************************************************
*
*       MENU_CreateIndirect
*/
MENU_Handle MENU_CreateIndirect(const GUI_WIDGET_CREATE_INFO* pCreateInfo, WM_HWIN hWinParent, int x0, int y0, WM_CALLBACK* cb) {
  MENU_Handle hMenu;
  GUI_USE_PARA(cb);
  hMenu = MENU_CreateEx(pCreateInfo->x0 + x0, pCreateInfo->y0 + y0, pCreateInfo->xSize, pCreateInfo->ySize,
                        hWinParent, 0, pCreateInfo->Flags, pCreateInfo->Id);
  return hMenu;
}
/*********************************************************************
*
*       _CreateMenu
*/
static WM_HWIN _CreateMenu(WM_HWIN hParent) {
  MENU_Handle hMenu, hMenuFile, hMenuEdit, hMenuHelp, hMenuRecent;
  // Create main menu
  hMenu       = MENU_CreateEx(0, 0, 0, 0, WM_UNATTACHED, 0, MENU_CF_HORIZONTAL, ID_MENU);
  // Create sub menus
  hMenuFile   = MENU_CreateEx(0, 0, 0, 0, WM_UNATTACHED, 0, MENU_CF_VERTICAL, 0);
  hMenuEdit   = MENU_CreateEx(0, 0, 0, 0, WM_UNATTACHED, 0, MENU_CF_VERTICAL, 0);
  hMenuHelp   = MENU_CreateEx(0, 0, 0, 0, WM_UNATTACHED, 0, MENU_CF_VERTICAL, 0);
  hMenuRecent = MENU_CreateEx(0, 0, 0, 0, WM_UNATTACHED, 0, MENU_CF_VERTICAL, 0);
  // Add menu items to menu 'Recent'
  _AddMenuItem(hMenuRecent, 0,           "File 0",   ID_MENU_RECENT_0,    0);
  _AddMenuItem(hMenuRecent, 0,           "File 1",   ID_MENU_RECENT_1,    0);
  _AddMenuItem(hMenuRecent, 0,           "File 2",   ID_MENU_RECENT_2,    0);
  _AddMenuItem(hMenuRecent, 0,           "File 3",   ID_MENU_RECENT_3,    0);
  // Add menu items to menu 'File'
  _AddMenuItem(hMenuFile,   0,           "New",      ID_MENU_FILE_NEW,    0);
  _AddMenuItem(hMenuFile,   0,           "Open",     ID_MENU_FILE_OPEN,   0);
  _AddMenuItem(hMenuFile,   0,           "Close",    ID_MENU_FILE_CLOSE,  0);
  _AddMenuItem(hMenuFile,   0,           0,          0,                   MENU_IF_SEPARATOR);
  _AddMenuItem(hMenuFile,   hMenuRecent, "Files...", ID_MENU_FILE_RECENT, 0);
  _AddMenuItem(hMenuFile,   0,           0,          0,                   MENU_IF_SEPARATOR);
  _AddMenuItem(hMenuFile,   0,           "Exit",     ID_MENU_FILE_EXIT,   0);
  // Add menu items to menu 'Edit'
  _AddMenuItem(hMenuEdit,   0,           "Undo",     ID_MENU_EDIT_UNDO,   0);
  _AddMenuItem(hMenuEdit,   0,           "Redo",     ID_MENU_EDIT_REDO,   0);
  _AddMenuItem(hMenuEdit,   0,           0,          0,                   MENU_IF_SEPARATOR);
  _AddMenuItem(hMenuEdit,   0,           "Copy",     ID_MENU_EDIT_COPY,   0);
  _AddMenuItem(hMenuEdit,   0,           "Paste",    ID_MENU_EDIT_PASTE,  0);
  _AddMenuItem(hMenuEdit,   0,           "Delete",   ID_MENU_EDIT_DELETE, 0);
  // Add menu items to menu 'Help'
  _AddMenuItem(hMenuHelp,   0,           "About",    ID_MENU_HELP_ABOUT,  0);
  // Add menu items to main menu
  _AddMenuItem(hMenu,       hMenuFile,   "File",     0,                   0);
  _AddMenuItem(hMenu,       hMenuEdit,   "Edit",     0,                   0);
  _AddMenuItem(hMenu,       hMenuHelp,   "Help",     0,                   0);
  // Attach menu to parent window
  MENU_Attach(hMenu, hParent, 0, 0, WM_GetWindowSizeX(hParent), 0, 0);
  return hMenu;
}
Esempio n. 3
0
/**
  * @brief  The function opens a popup menu at the given position. It returns
  *         immediately after creation. On the first call it creates the menu.
  * @param  hParent:    pointer to the handle of the parent
  * @param  pMenuItems: pointer to menu items 
  * @param  NumItems:   number of menu items 
  * @param  x:          x position of the popup
  * @param  y:          y position of the popup 
  * @retval None
  */
static void _OpenPopup(WM_HWIN hParent, MENU_ITEM * pMenuItems, int NumItems, int x, int y) 
{
  static MENU_Handle hMenu;
  if (!hMenu) {
    int i;
    /* Create the popup window only one time */
    hMenu = MENU_CreateEx(0, 0, 0, 0, WM_UNATTACHED, 0, MENU_CF_VERTICAL, 0);
    MENU_SetBkColor(hMenu, MENU_CI_SELECTED, GUI_LIGHTBLUE);
    
    for (i = 0; i < NumItems; i++) {
      _AddMenuItem(hMenu, 0, pMenuItems[i].sText, pMenuItems[i].Id, pMenuItems[i].Flags);
    }
  }

  MENU_Popup(hMenu, hParent, x, y, 0, 0, 0);
}
/**
  * @brief  Opens a popup menu at the given position.
  * @note   It returns immediately after creation. 
  *         On the first call it creates the menu
  * @param  hParent:    pointer to the handle of the parent
  * @param  pMenuItems: pointer to menu items 
  * @param  NumItems:   number of menu items 
  * @param  x:          x position of the popup
  * @param  y:          y position of the popup 
  * @retval None
  */
static void _OpenPopup(WM_HWIN hParent, MENU_ITEM * pMenuItems, int NumItems, int x, int y) 
{
  static MENU_Handle hMenu;
  if (!hMenu) {
    int i;
    /* Create the popup window only one time */
    hMenu = MENU_CreateEx(0, 0, 0, 0, WM_UNATTACHED, 0, MENU_CF_VERTICAL, 0);
    MENU_SetBkColor(hMenu, MENU_CI_SELECTED, GUI_LIGHTBLUE);


    for (i = 0; i < NumItems; i++) {
      _AddMenuItem(hMenu, 0, pMenuItems[i].sText, pMenuItems[i].Id, pMenuItems[i].Flags);
    }
  }
  /* Open the popup menu. After opening the menu the function returns immediately.
   * After selecting menu item or after touching the display outside the menu the 
   * popup menu will be closed, but not deleted.
   */
  MENU_Popup(hMenu, hParent, x, y, 0, 0, 0);
}
Esempio n. 5
0
/*********************************************************************
*
*       CreateWindow
*/
WM_HWIN PrintWinCreate(void) {
		WM_HWIN hWin;
		hWin = WM_CreateWindow(0, 0, 800, 480,WM_CF_SHOW, _cbDialog, 0);
	 hPrintMenu = MENU_CreateEx(0,0,0,0,WM_UNATTACHED,WM_CF_SHOW,MENU_CF_VERTICAL,ID_PrintMenu); //主菜单
	 PrintHintText = TEXT_CreateAsChild(40,440,800,40,hWin,ID_PrintText,WM_CF_SHOW,"",TEXT_CF_LEFT);
	 TEXT_SetFont(PrintHintText,&GUI_Font24);
	 //WIDGET_SetEffect(hMenu,&WIDGET_Effect_3D1L);
	 hFre = MENU_CreateEx(0,0,0,0,WM_UNATTACHED,WM_CF_SHOW,MENU_CF_VERTICAL,ID_Print_Frequency); //频率分类
	 hSite = MENU_CreateEx(0,0,0,0,WM_UNATTACHED,WM_CF_SHOW,MENU_CF_VERTICAL,ID_Print_Site); //站点分类
	 hInfo = MENU_CreateEx(0,0,0,0,WM_UNATTACHED,WM_CF_SHOW,MENU_CF_VERTICAL,ID_Print_Info); //信息分类
	 hSiteSet = MENU_CreateEx(0,0,100,0,WM_UNATTACHED,WM_CF_SHOW,MENU_CF_VERTICAL,ID_Print_Site_SiteSet); //站点打印设置
	 hInfoSet = MENU_CreateEx(0,0,100,0,WM_UNATTACHED,WM_CF_SHOW,MENU_CF_VERTICAL,ID_Print_Info_InfoSet); //信息打印设置
	
	//菜单回调
	 WM_SetCallback(hPrintMenu,&MenuCall);
	 WM_SetCallback(hFre,&MenuCall);
	 WM_SetCallback(hSite,&MenuCall);
	 WM_SetCallback(hInfo,&MenuCall);
	 WM_SetCallback(hSiteSet,&MenuCall);
	 WM_SetCallback(hInfoSet,&MenuCall);
	
	//左右间距
		MENU_SetBorderSize(hPrintMenu,MENU_BI_LEFT,20);
		MENU_SetBorderSize(hPrintMenu,MENU_BI_RIGHT,20);
		MENU_SetBorderSize(hFre,MENU_BI_LEFT,20);
		MENU_SetBorderSize(hFre,MENU_BI_RIGHT,20);
		MENU_SetBorderSize(hSite,MENU_BI_LEFT,20);
		MENU_SetBorderSize(hSite,MENU_BI_RIGHT,20);
		MENU_SetBorderSize(hInfo,MENU_BI_LEFT,20);
		MENU_SetBorderSize(hInfo,MENU_BI_RIGHT,20);
		MENU_SetBorderSize(hSiteSet,MENU_BI_LEFT,10);
		MENU_SetBorderSize(hSiteSet,MENU_BI_RIGHT,10);
		MENU_SetBorderSize(hInfoSet,MENU_BI_LEFT,10);
		MENU_SetBorderSize(hInfoSet,MENU_BI_RIGHT,10);
		
		//添加菜单项
		_AddMenuItem(hPrintMenu,   0,        "所有储存信息",        ID_Print_All  ,    0);
		_AddMenuItem(hPrintMenu,   0,       0,      0,    MENU_IF_SEPARATOR);  //分割线
		_AddMenuItem(hPrintMenu,   0,        "正在显示的信息",      ID_Print_Showing  ,    0);
		_AddMenuItem(hPrintMenu,   0,       0,      0,    MENU_IF_SEPARATOR);  //分割线
		_AddMenuItem(hPrintMenu,   hFre,     "按频率分类打印",      ID_Print_Frequency         ,    0);
		_AddMenuItem(hPrintMenu,   0,       0,      0,    MENU_IF_SEPARATOR);  //分割线
		_AddMenuItem(hPrintMenu,   hSite,    "按站点分类打印",      ID_Print_Site              ,    0);
		_AddMenuItem(hPrintMenu,   0,       0,      0,    MENU_IF_SEPARATOR);  //分割线
		_AddMenuItem(hPrintMenu,   hInfo,    "按信息分类打印",      ID_Print_Info              ,    0);

		_AddMenuItem(hFre,   0,        "国际频道(518KHz)",       ID_Print_Fre_Int           ,    0);
		_AddMenuItem(hFre,   0,       0,      0,    MENU_IF_SEPARATOR);  //分割线
		_AddMenuItem(hFre,   0,        "本地频道I(490KHz)",      ID_Print_Fre_Loc1          ,    0);
		_AddMenuItem(hFre,   0,       0,      0,    MENU_IF_SEPARATOR);  //分割线
		_AddMenuItem(hFre,   0,        "本地频道II(4209.5KHz)",  ID_Print_Fre_Loc2          ,    0);
		_AddMenuItem(hFre,   0,       0,      0,    MENU_IF_SEPARATOR);  //分割线
		_AddMenuItem(hFre,   0,        "中文频道(486KHz)",       ID_Print_Fre_Chs           ,    0);

		_AddMenuItem(hSite,   0,        "打印",      ID_Print_Site_Prt          ,    0);
		_AddMenuItem(hSite,   0,       0,      0,    MENU_IF_SEPARATOR);  //分割线
		_AddMenuItem(hSite,   hSiteSet, "站点设置",  ID_Print_Site_SiteSet      ,    0);

		_AddMenuItem(hSiteSet,   0,        "A打印",      ID_Print_Site_SiteSet_Prt_0   ,    0);
		_AddMenuItem(hSiteSet,   0,       0,      0,    MENU_IF_SEPARATOR);  //分割线
		_AddMenuItem(hSiteSet,   0,        "B打印",      ID_Print_Site_SiteSet_Prt_1  ,    0);
		_AddMenuItem(hSiteSet,   0,       0,      0,    MENU_IF_SEPARATOR);  //分割线
		_AddMenuItem(hSiteSet,   0,        "C打印",      ID_Print_Site_SiteSet_Prt_2  ,    0);
		_AddMenuItem(hSiteSet,   0,       0,      0,    MENU_IF_SEPARATOR);  //分割线
		_AddMenuItem(hSiteSet,   0,        "D打印",      ID_Print_Site_SiteSet_Prt_3  ,    0);
		_AddMenuItem(hSiteSet,   0,       0,      0,    MENU_IF_SEPARATOR);  //分割线
		_AddMenuItem(hSiteSet,   0,        "E打印",      ID_Print_Site_SiteSet_Prt_4  ,    0);

		_AddMenuItem(hInfo,   0,        "打印",      ID_Print_Info_Prt          ,    0);
		_AddMenuItem(hInfo,   0,       0,      0,    MENU_IF_SEPARATOR);  //分割线
		_AddMenuItem(hInfo,   hInfoSet, "信息设置",  ID_Print_Info_InfoSet      ,    0);

		_AddMenuItem(hInfoSet,   0,        "A打印",      ID_Print_Info_InfoSet_Prt_0   ,    0);
		_AddMenuItem(hInfoSet,   0,       0,      0,    MENU_IF_SEPARATOR);  //分割线
		_AddMenuItem(hInfoSet,   0,        "B打印",      ID_Print_Info_InfoSet_Prt_1  ,    0);
		_AddMenuItem(hInfoSet,   0,       0,      0,    MENU_IF_SEPARATOR);  //分割线
		_AddMenuItem(hInfoSet,   0,        "C打印",      ID_Print_Info_InfoSet_Prt_2  ,    0);
		_AddMenuItem(hInfoSet,   0,       0,      0,    MENU_IF_SEPARATOR);  //分割线
		_AddMenuItem(hInfoSet,   0,        "D打印",      ID_Print_Info_InfoSet_Prt_3,    0);
		_AddMenuItem(hInfoSet,   0,       0,      0,    MENU_IF_SEPARATOR);  //分割线
		_AddMenuItem(hInfoSet,   0,        "E打印",      ID_Print_Info_InfoSet_Prt_4  ,    0);
	
	
	 MENU_Attach (hPrintMenu,hWin,0,60,0,0,0);
 		WM_SetFocus(hPrintMenu);
//   MENU_SetSel(hMenu, 0);
  return hWin;
}