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

📄 menuutil.c

📁 本文件是ni公司的labwindows/cvi软件的部分例子和源程序
💻 C
📖 第 1 页 / 共 5 页
字号:
    }           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 + -