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

📄 iconmenu.c

📁 汉字系统的c源代码
💻 C
字号:
    /*-----------------------------------------------------------
        函数 icon_menu : 图标式菜单
    -----------------------------------------------------------*/
    #include <hanenv.h>

    unsigned _Cdecl icon_menu(menu)
    ICON_MENU *menu;                     /* 图标式菜单         */
    {
        int mouse_x,mouse_y;             /* 鼠标光标的位置     */
        unsigned key = 0;                /* 键盘键码及返回码   */

        /*-- 查询鼠标光标的位置及鼠标按钮状态 -----------------*/
        key = get_mouse_status(&mouse_x,&mouse_y);

        /*-- 如果鼠标移动了 -----------------------------------*/
        if(mouse_x != menu->mouse_x || mouse_y != menu->mouse_y)
        {
            int i;

            /*-- 查看每个菜单条目中的图标范围 -----------------*/
            for(i=0;i<menu->icon_count;i++)

                /*-- 如果鼠标光标进入了某个图标的范围 ---------*/
                if(mouse_enter(menu->icons[i].x,menu->icons[i].y,
                    menu->icons[i].x+menu->icons[i].width,
                    menu->icons[i].y+menu->icons[i].high)
                    && i != menu->current)
                {

                    /*-- 如果当前条目有图标绘制函数,抹去图标 --*/
                    if(menu->icons[menu->current].draw_icon)
                        (*(menu->icons[menu->current].draw_icon))(menu->icons+menu->current,NO);

                    /*-- 修正当前菜单条目 ---------------------*/
                    menu->current = i;

                    /*-- 如果当前条目有图标绘制函数,重画图标 --*/
                    if(menu->icons[menu->current].draw_icon)
                        (*(menu->icons[menu->current].draw_icon))(menu->icons+menu->current,YES);

                    /*-- 显示新当前菜单条目的说明 -------------*/
                    _Bar(menu->x,menu->y,menu->width,_Ytimes*CHAR_HIGH,_TitleBk,0xffff0000);
                    drawxystr(menu->x,menu->y,_TitleColor,menu->icons[menu->current].title);
                }

            /*-- 记下鼠标光标的新位置 -------------------------*/
            menu->mouse_x = mouse_x;
            menu->mouse_y = mouse_y;
        }

        /*-- 如果允许使用键盘控制图标式菜单并且有键按下 -------*/
        if(menu->arrow_ctrl && bioskey(1))
        {

            /*-- 读键盘缓冲区中的键盘码 -----------------------*/
            key = geth();

            /*-- 如果是向前移动键 -----------------------------*/
            if(key == menu->forward1 || key == menu->forward2)
            {
                /*-- 如果当前菜单条目有图标绘制函数,抹去图标 --*/
                if(menu->icons[menu->current].draw_icon)
                    (*(menu->icons[menu->current].draw_icon))(menu->icons+menu->current,NO);

                /*-- 调整当前菜单条目 -------------------------*/
                if(menu->current == menu->icon_count-1)
                    menu->current = 0;
                else
                    menu->current++;

                /*-- 如果当前菜单条目有图标绘制函数,重画图标 --*/
                if(menu->icons[menu->current].draw_icon)
                    (*(menu->icons[menu->current].draw_icon))(menu->icons+menu->current,YES);

                /*-- 显示新当前菜单条目的说明 -----------------*/
                _Bar(menu->x,menu->y,menu->width,_Ytimes*CHAR_HIGH,_TitleBk,0xffff0000);
                drawxystr(menu->x,menu->y,_TitleColor,menu->icons[menu->current].title);
            }

            /*-- 如果是向后移动键 -----------------------------*/
            else if(key == menu->backward1 || key == menu->backward2)
            {
                /*-- 如果当前菜单条目有图标绘制函数,抹去图标 --*/
                if(menu->icons[menu->current].draw_icon)
                    (*(menu->icons[menu->current].draw_icon))(menu->icons+menu->current,NO);

                /*-- 调整当前菜单条目 -------------------------*/
                if(menu->current == 0)
                    menu->current = menu->icon_count-1;
                else
                    menu->current--;

                /*-- 如果当前菜单条目有图标绘制函数,重画图标 --*/
                if(menu->icons[menu->current].draw_icon)
                    (*(menu->icons[menu->current].draw_icon))(menu->icons+menu->current,YES);

                /*-- 显示新当前菜单条目的说明 -----------------*/
                _Bar(menu->x,menu->y,menu->width,_Ytimes*CHAR_HIGH,_TitleBk,0xffff0000);
                drawxystr(menu->x,menu->y,_TitleColor,menu->icons[menu->current].title);
            }

            /*-- 如果是项目选择键 -----------------------------*/
            else if(key == menu->press_key1 || key == menu->press_key2)
            {
                /*-- 如果当前菜单条目有对应处理函数,调用之 ----*/
                if(menu->icons[menu->current].fun)
                    return (*(menu->icons[menu->current].fun))(menu->icons[menu->current]);

                /*-- 否则返回当前条目的返回键码 ---------------*/
                else
                    return menu->icons[menu->current].key;
            }
        }

        /*-- 如果按下了鼠标左键且鼠标光标在当前图标上 ---------*/
        if(key == LEFT_BUTTON &&
           mouse_enter(menu->icons[menu->current].x,
                       menu->icons[menu->current].y,
                       menu->icons[menu->current].x+menu->icons[menu->current].width,
                       menu->icons[menu->current].y+menu->icons[menu->current].high))
        {
            /*-- 如果当前菜单条目有对应处理函数,调用之 --------*/
            if(menu->icons[menu->current].fun)
                return (*(menu->icons[menu->current].fun))(menu->icons[menu->current]);

            /*-- 否则返回当前条目的返回键码 -------------------*/
            else
                return menu->icons[menu->current].key;
        }

        /*-- 返回0表示此次应继续对图标式菜单进行操作 ----------*/
        return key;
    }

⌨️ 快捷键说明

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