📄 iconmenu.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 + -