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

📄 menu.c

📁 在ecos 下mingui 的移植开发
💻 C
📖 第 1 页 / 共 5 页
字号:
        mii.type        = MFT_STRING;        if (dwStyle & WS_MAXIMIZE)            mii.state   = 0;        else            mii.state   = MFS_DISABLED;        mii.id          = SC_RESTORE;        mii.typedata    = (DWORD)GetSysText(SysText[8]);        InsertMenuItem(hmnu, 2, TRUE, &mii);    }    mii.type        = MFT_SEPARATOR;    mii.state       = 0;    mii.id          = 0;    mii.typedata    = 0;    InsertMenuItem(hmnu, 3, TRUE, &mii);    mii.type        = MFT_STRING;    mii.state       = 0;    mii.id          = SC_CLOSE;    mii.typedata    = (DWORD)GetSysText(SysText[9]);    InsertMenuItem(hmnu, 4, TRUE, &mii);    return hmnu;}static BOOL mnuInsertMenuItem (PMENUITEM pmi, PMENUITEM pnewmi,                int item, BOOL flag){    PMENUITEM ptmpmi;    int index;        if (flag) {        // Insert this new menu item at the start.        if (item == 0) {            pnewmi->next = pmi;            return TRUE;        }                index = 1;        while (pmi->next) {            if (index == item) {                ptmpmi = pmi->next;                pmi->next = pnewmi;                pnewmi->next = ptmpmi;                return FALSE;            }                        index ++;            pmi = pmi->next;        }    }    else {        if (item == pmi->id) {            pnewmi->next = pmi;            return TRUE;        }                while (pmi->next) {            if (pmi->next->id == item) {                ptmpmi = pmi->next;                pmi->next = pnewmi;                pnewmi->next = ptmpmi;                return FALSE;            }                        pmi = pmi->next;        }    }    // append this new menu item at the end.    pmi->next = pnewmi;    return FALSE;}int GUIAPI InsertMenuItem (HMENU hmnu, int item,                             BOOL flag, PMENUITEMINFO pmii){    PMENUBAR pmb;    PMENUITEM pnewmi, pmi;    pmb = (PMENUBAR) hmnu;    if (pmb->class != TYPE_HMENU)        return ERR_INVALID_HANDLE;         if (!(pnewmi = MenuItemAlloc ()))         return ERR_RES_ALLOCATION;    pnewmi->class           = TYPE_HMENU;    pnewmi->type            = TYPE_NMLMENU;    pnewmi->mnutype         = pmii->type;    pnewmi->mnustate        = pmii->state;    pnewmi->id              = pmii->id;    pnewmi->hbmpChecked     = pmii->hbmpChecked;    pnewmi->hbmpUnchecked   = pmii->hbmpUnchecked;    pnewmi->itemdata        = pmii->itemdata;    pnewmi->next            = NULL;    pnewmi->submenu         = (PMENUITEM)(pmii->hsubmenu);    // copy string.    if (pmii->type == MFT_STRING) {        pnewmi->typedata = (DWORD)FixStrAlloc (strlen ((char*)pmii->typedata));        strcpy ((char*)pnewmi->typedata, (char*)pmii->typedata);    }    else        pnewmi->typedata = pmii->typedata;        if (pmb->type == TYPE_MENUBAR) {        pmi = pmb->head;                if (!pmi)            pmb->head = pnewmi;        else {            if (mnuInsertMenuItem (pmb->head, pnewmi, item, flag))                pmb->head = pnewmi;        }    }    else if (pmb->type == TYPE_PPPMENU) {        pmi = (PMENUITEM)hmnu;        if (!pmi->submenu)            pmi->submenu = pnewmi;        else {            if (mnuInsertMenuItem (pmi->submenu, pnewmi, item, flag))                pmi->submenu = pnewmi;        }    }    else        return ERR_INVALID_HMENU;   return 0;}static void mnuDeleteMenuItem (PMENUITEM pmi){    PMENUITEM ptmpmi;    PMENUITEM psubmi;    if (pmi->submenu) {        psubmi = pmi->submenu;        while (psubmi) {            ptmpmi = psubmi->next;            mnuDeleteMenuItem (psubmi);            psubmi = ptmpmi;        }    }    if (pmi->mnutype == MFT_STRING)        FreeFixStr ((void*)pmi->typedata);            FreeMenuItem (pmi);}static PMENUITEM mnuRemoveMenuItem (PMENUITEM phead, int item, BOOL flag){    int index;    PMENUITEM pmi, ptmpmi;        if (!phead) return NULL;        if (flag) {            if (item == 0) {            pmi = phead->next;            if (!phead->submenu)                 mnuDeleteMenuItem (phead);            return pmi;        }                pmi = phead;        index = 1;        while (pmi->next) {            if (index == item) {                ptmpmi = pmi->next;                pmi->next = pmi->next->next;                                if (!ptmpmi->submenu)                    mnuDeleteMenuItem (ptmpmi);                return phead;            }            index ++;            pmi = pmi->next;        }    }    else {        if (phead->id == item) {            pmi = phead->next;            if (!phead->submenu)                 mnuDeleteMenuItem (phead);            return pmi;        }                pmi = phead;        while (pmi->next) {            if (pmi->next->id == item) {                ptmpmi = pmi->next;                pmi->next = pmi->next->next;                                if (!ptmpmi->submenu)                    mnuDeleteMenuItem (ptmpmi);                return phead;            }            pmi = pmi->next;        }    }    return phead;}int GUIAPI RemoveMenu (HMENU hmnu, int item, UINT flags){    PMENUBAR pmb;    PMENUITEM pmi;    pmb = (PMENUBAR) hmnu;    if (pmb->class != TYPE_HMENU)        return ERR_INVALID_HANDLE;        if (pmb->type == TYPE_MENUBAR)        pmb->head = mnuRemoveMenuItem (pmb->head, item,             flags & MF_BYPOSITION);    else if (pmb->type == TYPE_PPPMENU) {        pmi = (PMENUITEM) hmnu;        pmi->submenu = mnuRemoveMenuItem (pmi->submenu, item,             flags & MF_BYPOSITION);    }    else        return ERR_INVALID_HMENU;   // this is a normal menu item.     return 0;}static PMENUITEM mnuDeleteMenu (PMENUITEM phead, int item, BOOL flag){    int index;    PMENUITEM pmi, ptmpmi;        if (!phead) return NULL;        if (flag) {            if (item == 0) {            pmi = phead->next;            mnuDeleteMenuItem (phead);            return pmi;        }                pmi = phead;        index = 1;        while (pmi->next) {            if (index == item) {                ptmpmi = pmi->next;                pmi->next = pmi->next->next;                mnuDeleteMenuItem (ptmpmi);                return phead;            }            index ++;            pmi = pmi->next;        }    }    else {        if (phead->id == item) {            pmi = phead->next;            mnuDeleteMenuItem (phead);            return pmi;        }                pmi = phead;        while (pmi->next) {            if (pmi->next->id == item) {                ptmpmi = pmi->next;                pmi->next = pmi->next->next;                mnuDeleteMenuItem (ptmpmi);                return phead;            }            pmi = pmi->next;        }    }    return phead;}int GUIAPI DeleteMenu (HMENU hmnu, int item, UINT flags){    PMENUBAR pmb;    PMENUITEM pmi;    pmb = (PMENUBAR) hmnu;    if (pmb->class != TYPE_HMENU)        return ERR_INVALID_HANDLE;        if (pmb->type == TYPE_MENUBAR)        pmb->head = mnuDeleteMenu (pmb->head, item,             flags & MF_BYPOSITION);    else if (pmb->type == TYPE_PPPMENU) {        pmi = (PMENUITEM) hmnu;        pmi->submenu = mnuDeleteMenu (pmi->submenu, item,             flags & MF_BYPOSITION);    }    else        return ERR_INVALID_HMENU;   // this is a normal menu item.     return 0;}int GUIAPI DestroyMenu (HMENU hmnu){    PMENUBAR pmb;    PMENUITEM pmi, ptmpmi;    pmb = (PMENUBAR) hmnu;    if (pmb->class != TYPE_HMENU)        return ERR_INVALID_HANDLE;        if (pmb->type == TYPE_MENUBAR) {        pmi = pmb->head;        while (pmi) {            ptmpmi = pmi->next;            mnuDeleteMenuItem (pmi);            pmi = ptmpmi;        }        FreeMenuBar (pmb);    }    else        mnuDeleteMenuItem ((PMENUITEM)hmnu);    return 0;}int GUIAPI IsMenu (HMENU hmnu){    PMENUBAR pMenu = (PMENUBAR)hmnu;    if (pMenu->class != TYPE_HMENU) return 0;    return pMenu->type;}/*************************** Menu properties support *************************/int GUIAPI GetMenuItemCount (HMENU hmnu){    PMENUBAR pmb;    PMENUITEM pmi;    int count;    pmb = (PMENUBAR) hmnu;    if (pmb->class != TYPE_HMENU)        return ERR_INVALID_HANDLE;        if (pmb->type == TYPE_MENUBAR)        pmi = pmb->head;    else if (pmb->type == TYPE_PPPMENU) {        pmi = (PMENUITEM) hmnu;        pmi = pmi->submenu;    }    else        return ERR_INVALID_HMENU;   // this is a normal menu item.         count = 0;    while (pmi) {        count ++;        pmi = pmi->next;    }        return count;}static PMENUITEM mnuGetMenuItem (HMENU hmnu, int item, BOOL flag){    PMENUBAR pmb;    PMENUITEM pmi;    int index;    pmb = (PMENUBAR) hmnu;    if (pmb->class != TYPE_HMENU)        return NULL;         if (pmb->type == TYPE_MENUBAR)        pmi = pmb->head;    else if (pmb->type == TYPE_PPPMENU) {        pmi = (PMENUITEM) hmnu;        pmi = pmi->submenu;    }    else        return NULL;    if (flag) {        index = 0;        while (pmi) {            if (index == item)                return pmi;            index ++;            pmi = pmi->next;        }    }    else {        while (pmi) {            if (pmi->id == item)                return pmi;            pmi = pmi->next;        }    }    return NULL; }int GUIAPI GetMenuItemID (HMENU hmnu, int pos){    PMENUBAR pmb;    PMENUITEM pmi;    int index;    pmb = (PMENUBAR) hmnu;    if (pmb->class != TYPE_HMENU)        return ERR_INVALID_HANDLE;        if (pmb->type == TYPE_MENUBAR)        pmi = pmb->head;    else if (pmb->type == TYPE_PPPMENU) {        pmi = (PMENUITEM) hmnu;        pmi = pmi->submenu;    }    else        return ERR_INVALID_HMENU;   // this is a normal menu item.         index = 0;    while (pmi) {        if (index == pos)            return pmi->id;        index ++;        pmi = pmi->next;    }        return ERR_INVALID_POS;}HMENU GUIAPI GetPopupSubMenu (HMENU hpppmnu){    PMENUITEM pmi;    pmi = (PMENUITEM) hpppmnu;    if (pmi->class != TYPE_HMENU)        return 0;        if (pmi->type != TYPE_PPPMENU)        return 0;    return (HMENU)(pmi->submenu);}HMENU GUIAPI GetSubMenu (HMENU hmnu, int pos){    PMENUBAR pmb;    PMENUITEM pmi;    int index;    pmb = (PMENUBAR) hmnu;    if (pmb->class != TYPE_HMENU)        return 0;        if (pmb->type == TYPE_MENUBAR)        pmi = pmb->head;    else if (pmb->type == TYPE_PPPMENU) {        pmi = (PMENUITEM) hmnu;        pmi = pmi->submenu;    }    else        return 0;   // this is a normal menu item.         index = 0;    while (pmi) {        if (index == pos)            return (HMENU)(pmi->submenu);        index ++;        pmi = pmi->next;    }        return 0;}int GUIAPI GetMenuItemInfo (HMENU hmnu, int item,                             BOOL flag, PMENUITEMINFO pmii){    PMENUITEM pmi;    if (!(pmi = mnuGetMenuItem (hmnu, item, flag))) return ERR_INVALID_HMENU;    if (pmii->mask & MIIM_CHECKMARKS) {        pmii->hbmpChecked   = pmi->hbmpChecked;        pmii->hbmpUnchecked = pmi->hbmpUnchecked;    }    if (pmii->mask & MIIM_DATA) {        pmii->itemdata      = pmi->itemdata;    }    if (pmii->mask & MIIM_ID) {

⌨️ 快捷键说明

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