📄 menuutil.c
字号:
} return;}/*****************************************************//* CreateMenuList() *//* *//* Parameters: *//* menuBarHandle *//* menuID *//* beforeMenuItemID *//* maxItems *//* callbackFunc *//* *//* Return: menuList *//* *//* Purpose: Create a menu list in an existing *//* menubar *//* *//* Example: *//* FILE *//* Open *//* Save *//* ------------ *//* c:\file1.txt *//* d:\file2.txt *//* e:\file3.txt *//* ------------ *//* Exit *//*****************************************************/menuList CVIFUNC MU_CreateMenuList(int menuBarHandle, int menuID, int beforeMenuItemID, int maxItems, MenuListCallbackPtr callbackFunc){ int static lastmenuList = 0; menuList handle = 0; int error = 0; int i, totalItems; menuInfoRec * menuInfoPtr = NULL; menuItemInfoRec * menuItemInfoPtr = NULL; /* Create list of menuInfo if not already created */ if (!sMenuInfoList) sMenuInfoList = ListCreate (sizeof(menuInfoRec)); if (!sMenuInfoList) { error = -1; goto Error; } /* Loop to find if menuInfo already exists in list */ totalItems = ListNumItems (sMenuInfoList); for (i=1;((i<=totalItems) && (!handle));i++) { menuInfoPtr = ListGetPtrToItem (sMenuInfoList, i); if ((menuBarHandle == menuInfoPtr->menuBarHandle) && (menuID == menuInfoPtr->menuID) && (beforeMenuItemID == menuInfoPtr->beforeMenuItemID) ) { handle = menuInfoPtr->handle; } menuInfoPtr = NULL; } /* Add new menuInfo to List if not found */ if (!handle) { if (menuInfoPtr = calloc(sizeof(menuInfoRec), 1) ) { if (menuInfoPtr->menuItemInfoList = ListCreate (sizeof(menuItemInfoRec)) ) { menuInfoPtr->menuBarHandle = menuBarHandle; menuInfoPtr->menuID = menuID; menuInfoPtr->beforeMenuItemID = beforeMenuItemID; menuInfoPtr->maxItems = maxItems; menuInfoPtr->callbackFunc = callbackFunc; menuInfoPtr->handle = handle = ++lastmenuList; menuInfoPtr->separator1 = 0; menuInfoPtr->separator2 = 0; menuInfoPtr->separator1ID = 0; menuInfoPtr->separator2ID = 0; menuInfoPtr->allowDuplicates = 1; menuInfoPtr->preAppendShortCut= 0; if (!ListInsertItem (sMenuInfoList, menuInfoPtr, END_OF_LIST)) error = -1;#if _CVI_DEBUG_ else sMenuInfoPtr = ListGetPtrToItem (sMenuInfoList, END_OF_LIST);#endif } else error = -1; if (menuInfoPtr) { free (menuInfoPtr); menuInfoPtr = NULL; } } else error = -1; } return handle;Error: /* free memory */ if (menuInfoPtr) { free (menuInfoPtr); menuInfoPtr = NULL; } return error; }/*****************************************************//* MU_GetNumMenuListItems() *//* *//* Parameters: *//* menuList from CreateMenuList() *//* *//* Return: success = 1 *//* *//* Purpose: Delete and remove a menu list from *//* menubar *//* *//*****************************************************/int CVIFUNC MU_GetNumMenuListItems( menuList handle){ int numItems = 0; int index; menuInfoRec * menuInfoPtr = NULL; if (handle) { if (index = FindMenuInfoInList(sMenuInfoList, handle)) { menuInfoPtr = ListGetPtrToItem (sMenuInfoList, index); if ((menuInfoPtr) && (menuInfoPtr->handle) ) numItems = ListNumItems (menuInfoPtr->menuItemInfoList); } } return numItems;}/*****************************************************//* DeleteMenuList() *//* *//* Parameters: *//* menuList from CreateMenuList() *//* *//* Return: success = 1 *//* *//* Purpose: Delete and remove a menu list from *//* menubar *//* *//*****************************************************/int CVIFUNC MU_DeleteMenuList( menuList handle){ int success = 1; int index; int totalItems; menuInfoRec * menuInfoPtr = NULL; if (handle) { if (index = FindMenuInfoInList(sMenuInfoList, handle)) { menuInfoPtr = ListGetPtrToItem (sMenuInfoList, index); if ((menuInfoPtr) && (menuInfoPtr->handle) ) { if (RemoveMenuList(menuInfoPtr) ) menuInfoPtr->menuItemInfoList = NULL; else success = 0; ListRemoveItem (sMenuInfoList, 0, index); } else success = 0; } else success = 0; } else success = 0; /* Delete list of menuInfo when empty */ totalItems = ListNumItems (sMenuInfoList); if (!totalItems) { /* Remove separators and list items from the user's menubar */ UpdateMenuItems(menuInfoPtr); /* Dispose of list */ ListDispose(sMenuInfoList); sMenuInfoList = NULL; } return success;}/*****************************************************//* RemoveMenuList() *//* *//* Parameters: *//* pointer to menu info *//* *//* Return: success = 1 *//* *//* Purpose: Delete menuItemList *//* *//*****************************************************/static int RemoveMenuList( menuInfoRec *menuInfoPtr){ int success = 1; int i, totalItems; menuItemInfoRec *menuItemInfoPtr = NULL; if ((!menuInfoPtr) && (!menuInfoPtr->menuItemInfoList) ) goto Error; /* Loop thru items in list and free internal malloc'ed memory */ totalItems = ListNumItems (menuInfoPtr->menuItemInfoList); for (i=totalItems;((i>0) && (success) );i--) { success = RemoveMenuListItem(menuInfoPtr, i); } ListDispose(menuInfoPtr->menuItemInfoList); Error: return success;}/*****************************************************//* RemoveMenuListItem() *//* *//* Parameters: *//* pointer to menu info *//* index *//* *//* Return: success = 1 *//* *//* Purpose: Delete menuItemList *//* *//*****************************************************/static int RemoveMenuListItem( menuInfoRec *menuInfoPtr, int index){ int success = 1; menuItemInfoRec *menuItemInfoPtr = NULL; /* Verify parameters */ if ((!menuInfoPtr) && (!menuInfoPtr->menuItemInfoList) ) goto Error; /* Loop thru items in list and free internal malloc'ed memory */ menuItemInfoPtr = ListGetPtrToItem (menuInfoPtr->menuItemInfoList, index); if (menuItemInfoPtr) { /* Call the user's callback function */ if (menuInfoPtr->callbackFunc) (*(menuInfoPtr->callbackFunc)) (menuInfoPtr->handle, index, EVENT_DISCARD, menuItemInfoPtr->callbackData); /* Remove menu Item if it exists */ if (!DiscardMenuItem (menuInfoPtr->menuBarHandle, menuItemInfoPtr->menuItemID)) menuItemInfoPtr->menuItemID = 0; ListRemoveItem (menuInfoPtr->menuItemInfoList, 0, index); } else success = 0; Error: return success;}/*****************************************************//* MU_DeleteMenuListItem() *//* *//* Parameters: *//* menuList from CreateMenuList() *//* index *//* *//* Return: success = 1 *//* *//* Purpose: Delete menuItemList *//* *//*****************************************************/int CVIFUNC MU_DeleteMenuListItem( menuList handle, int index){ int success = 0; menuInfoRec * menuInfoPtr = NULL; int item; if ( ((item = FindMenuInfoInList (sMenuInfoList, handle))>0) && (menuInfoPtr = ListGetPtrToItem (sMenuInfoList, item)) ) { success = RemoveMenuListItem(menuInfoPtr, index); } return 0;} /*****************************************************//* UpdateMenuItems() *//* *//* Parameters: *//* menuItemInfoList pointer *//* *//* Return: success = 1 *//* *//* Purpose: Routine to update the menubar associated*//* with the menuItemInfoPtr *//* *//*****************************************************/static int UpdateMenuItems( menuInfoRec *menuInfoPtr){ int success = 1; int i, totalItems, beforeMenuItemID, checked; menuItemInfoRec * menuItemInfoPtr = NULL; char tempName[MAX_MENU_ITEM_LENGTH + 6]; if (menuInfoPtr) { /* Remove items greater than maxItems */ totalItems = ListNumItems (menuInfoPtr->menuItemInfoList); for (i=totalItems;(i>menuInfoPtr->maxItems);i--) RemoveMenuListItem(menuInfoPtr, i); /* Get number of menu items in list */ totalItems = ListNumItems (menuInfoPtr->menuItemInfoList); if (totalItems) { /* Setup before menu item id for first item */ beforeMenuItemID = menuInfoPtr->beforeMenuItemID; /* Create Lower Separator */ if (menuInfoPtr->separator2ID) { /* Discard Lower Separator */ DiscardMenuItem (menuInfoPtr->menuBarHandle, menuInfoPtr->separator2ID); menuInfoPtr->separator2ID = 0; } if (menuInfoPtr->separator2) {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -