www.pudn.com > cwin.rar > ICONMENU.C


    /*----------------------------------------------------------- 
        函数 icon_menu : 图标式菜单 
    -----------------------------------------------------------*/ 
    #include  
 
    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;iicon_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; 
    }