?? menu.c
字號:
/****************************************************************************************
* 文件名:MENU.C
* 功能:菜單顯示及操作(下拉式菜單)。
* 作者:黃紹斌
* 日期:2004.02.26
* 備注:使用GUI_SetBackColor()函數設置顯示顏色及背景色。
****************************************************************************************/
#include "config.h"
#if GUI_MenuDown_EN==1
/****************************************************************************
* 名稱:GUI_MMenuDraw()
* 功能:顯示主菜單,加上邊框。
* 入口參數:men 主菜單句柄
* 出口參數:返回0表示操作失敗,返回1表示操作成功
****************************************************************************/
uint8 GUI_MMenuDraw(MMENU *men)
{ WINDOWS *mwin;
uint8 i;
uint8 xx;
/* 參數過濾 */
if( (men->no)==0 ) return(0);
mwin = men->win; // 取得窗口句柄
/* 判斷是否可以顯示主菜單 */
if( (mwin->hight)<50 ) return(0);
if( (mwin->with)<50 ) return(0);
/* 畫菜單條,并顯示菜主單 */
GUI_HLine(mwin->x, mwin->y + 22, mwin->x + mwin->with - 1, disp_color);
xx = mwin->x;
for(i=0; i<(men->no); i++)
{ if( (xx+MMENU_WIDTH) > (mwin->x + mwin->with) ) return(0);
GUI_PutNoStr(xx+2, mwin->y + 14, men->str[i], 4); // 書寫主菜單文字
xx += MMENU_WIDTH;
GUI_RLine(xx, mwin->y + 12, mwin->y + 22, disp_color); // 顯示主菜單分界線
}
return(1);
}
/****************************************************************************
* 名稱:GUI_MMenuSelect()
* 功能:當前主菜單,加下劃線,表示當前主菜單。
* 入口參數:men 主菜單句柄
* no 所選的主菜單項
* 出口參數:無
****************************************************************************/
void GUI_MMenuSelect(MMENU *men, uint8 no)
{ WINDOWS *mwin;
uint8 xx;
/* 參數過濾 */
if( (men->no)==0 ) return;
if( no>(men->no) ) return;
mwin = men->win; // 取得窗口句柄
/* 判斷是否可以顯示主菜單 */
if( (mwin->hight)<50 ) return;
if( (mwin->with)<50 ) return;
/* 顯示下劃線 */
xx = mwin->x + no*MMENU_WIDTH;
GUI_HLine(xx+1, mwin->y + 22-1, xx+MMENU_WIDTH- 1, disp_color);
}
/****************************************************************************
* 名稱:GUI_MMenuNSelect()
* 功能:取消當前主菜單,去除下劃線。
* 入口參數:men 主菜單句柄
* no 所選的主菜單項
* 出口參數:無
****************************************************************************/
void GUI_MMenuNSelect(MMENU *men, uint8 no)
{ WINDOWS *mwin;
uint8 xx;
/* 參數過濾 */
if( (men->no)==0 ) return;
if( no>(men->no) ) return;
mwin = men->win; // 取得窗口句柄
/* 判斷是否可以顯示主菜單 */
if( (mwin->hight)<50 ) return;
if( (mwin->with)<50 ) return;
/* 顯示下劃線 */
xx = mwin->x + no*MMENU_WIDTH;
GUI_HLine(xx+1, mwin->y + 22-1, xx+MMENU_WIDTH- 1, back_color);
}
/****************************************************************************
* 名稱:GUI_SMenuDraw()
* 功能:顯示子菜單,加上邊框。
* 入口參數:men 子菜單句柄
* 出口參數:返回0表示操作失敗,返回1表示操作成功
****************************************************************************/
uint8 GUI_SMenuDraw(SMENU *men)
{ WINDOWS *mwin;
uint32 xx, yy;
uint8 i;
mwin = men->win;
/* 判斷是否可以顯示主菜單 */
if( (mwin->hight)<50 ) return(0);
if( (mwin->with)<50 ) return(0);
/* 畫菜子單項。下拉子菜單,以向左下拉為原則,若右邊溢出則以右下拉顯示 */
xx = mwin->x;
xx += (men->mmenu_no)*MMENU_WIDTH;
yy = mwin->y + 22;
yy += (men->no) * 11 + 2;
if( (xx+SMENU_WIDTH) <= (mwin->x + mwin->with - 1) )
{ /* 以左下拉為原則顯示子菜單 */
if( (men->mmenu_no) == 0 )
{ GUI_RLine(xx+SMENU_WIDTH, mwin->y + 22, yy, disp_color);
GUI_HLine(xx, yy, xx+SMENU_WIDTH, disp_color);
}
else
{ GUI_Rectangle(xx, mwin->y + 22, xx+SMENU_WIDTH, yy, disp_color);
}
GUI_HLine(xx+1, mwin->y + 22, xx+MMENU_WIDTH-1, back_color);
}
else
{ /* 以右下拉為原則 */
if( (xx+MMENU_WIDTH) == (mwin->x + mwin->with - 1) )
{ GUI_RLine(xx-(SMENU_WIDTH-MMENU_WIDTH), mwin->y + 22, yy, disp_color);
GUI_HLine(xx-(SMENU_WIDTH-MMENU_WIDTH), yy, xx+MMENU_WIDTH, disp_color);
}
else
{ GUI_Rectangle(xx-(SMENU_WIDTH-MMENU_WIDTH), mwin->y + 22, xx+MMENU_WIDTH, yy, disp_color);
}
GUI_HLine(xx+1, mwin->y + 22, xx+MMENU_WIDTH-1, back_color);
xx = xx-(SMENU_WIDTH-MMENU_WIDTH);
}
/* 顯示菜單文字 */
xx++;
yy = mwin->y + 22 + 2;
for(i=0; i<(men->no); i++)
{ if( i == (men->state) ) // 判斷所選擇的菜單項
{ /* 顯示背景色 */
GUI_RectangleFill(xx, yy, xx+SMENU_WIDTH-2, yy+10, disp_color);
/* 顯示菜單字符 */
GUI_ExchangeColor();
GUI_PutNoStr(xx+1, yy+1, men->str[i], 8); // 書寫子菜單文字
GUI_ExchangeColor();
}
else
{ /* 顯示背景色 */
GUI_RectangleFill(xx, yy, xx+SMENU_WIDTH-2, yy+10, back_color);
/* 顯示菜單字符 */
GUI_PutNoStr(xx+1, yy+1, men->str[i], 8); // 書寫子菜單文字
}
yy += 11;
}
return(1);
}
/****************************************************************************
* 名稱:GUI_SMenuSelect()
* 功能:選擇新的子菜單。
* 入口參數:men 子菜單句柄
* old_no 原先選擇的子菜單項
* new_no 現要選擇的子菜單項
* 出口參數:無
****************************************************************************/
void GUI_SMenuSelect(SMENU *men, uint8 old_no, uint8 new_no)
{ WINDOWS *mwin;
uint8 xx, yy;
/* 參數過濾 */
if(old_no==new_no) return;
xx = men->no;
if( (old_no>xx) || (new_no>xx) ) return;
/* 設置新的選擇的子菜單項 */
men->state = new_no;
/* 進行菜單反相顯示 */
mwin = men->win;
xx = mwin->x;
xx += (men->mmenu_no)*MMENU_WIDTH;
if( (xx+SMENU_WIDTH) > (mwin->x + mwin->with - 1) )
{ /* 以右下拉為原則顯示子菜單,所以xx設置在左端 */
xx = xx-(SMENU_WIDTH-MMENU_WIDTH);
}
xx++;
/* 取消原子菜單選擇 */
yy = mwin->y + 22 + 2;
yy += old_no*11;
GUI_RectangleFill(xx, yy, xx+SMENU_WIDTH-2, yy+10, back_color);
GUI_PutNoStr(xx+1, yy+1, men->str[old_no], 8);
/* 選擇新的子菜單 */
yy = mwin->y + 22 + 2;
yy += new_no*11;
GUI_RectangleFill(xx, yy, xx+SMENU_WIDTH-2, yy+10, disp_color);
GUI_ExchangeColor();
GUI_PutNoStr(xx+1, yy+1, men->str[new_no], 8);
GUI_ExchangeColor();
}
/****************************************************************************
* 名稱:GUI_SMenuHide()
* 功能:消隱子菜單項。
* 入口參數:men 子菜單句柄
* 出口參數:返回0表示操作失敗,返回1表示操作成功
****************************************************************************/
uint8 GUI_SMenuHide(SMENU *men)
{ WINDOWS *mwin;
uint8 xx, yy;
mwin = men->win;
/* 判斷是否可以顯示主菜單 */
if( (mwin->hight)<50 ) return(0);
if( (mwin->with)<50 ) return(0);
/* 畫菜子單項。下拉子菜單,以向左下拉為原則,若右邊溢出則以右下拉顯示 */
xx = mwin->x;
xx += (men->mmenu_no)*MMENU_WIDTH;
yy = mwin->y + 22;
yy += (men->no) * 11 + 2;
if( (xx+SMENU_WIDTH) <= (mwin->x + mwin->with - 1) )
{ /* 以左下拉為原則顯示子菜單 */
if( (men->mmenu_no) == 0 )
{ GUI_RectangleFill(xx+1, mwin->y + 22+1, xx+SMENU_WIDTH, yy, back_color);
}
else
{ GUI_RectangleFill(xx, mwin->y + 22+1, xx+SMENU_WIDTH, yy, back_color);
}
GUI_HLine(xx+1, mwin->y + 22, xx+MMENU_WIDTH-1, disp_color);
}
else
{ /* 以右下拉為原則 */
if( (xx+MMENU_WIDTH) == (mwin->x + mwin->with - 1) )
{ GUI_RectangleFill(xx-(SMENU_WIDTH-MMENU_WIDTH), mwin->y + 22+1, xx+MMENU_WIDTH-1, yy, back_color);
}
else
{ GUI_RectangleFill(xx-(SMENU_WIDTH-MMENU_WIDTH), mwin->y + 22+1, xx+MMENU_WIDTH, yy, back_color);
}
GUI_HLine(xx+1, mwin->y + 22, xx+MMENU_WIDTH-1, disp_color);
}
return(1);
}
#endif
#if GUI_MenuIco_EN==1
/*-- 調入了一幅圖像:C:\WINDOWS\Desktop\OK.bmp --*/
/*-- 寬度x高度=49x14 --*/
/*-- 寬度不是8的倍數,現調整為:寬度x高度=56x14 --*/
uint8 const button_ok[] =
{
0x07,0xFF,0xFF,0xFF,0xFF,0xF0,0x00,0x18,0x00,0x00,0x00,0x00,0x0C,0x00,0x20,0x00,
0x00,0x00,0x00,0x02,0x00,0x40,0x00,0x0E,0x76,0x00,0x01,0x00,0x80,0x00,0x11,0x24,
0x00,0x00,0x80,0x80,0x00,0x11,0x28,0x00,0x00,0x80,0x80,0x00,0x11,0x30,0x00,0x00,
0x80,0x80,0x00,0x11,0x28,0x00,0x00,0x80,0x80,0x00,0x11,0x28,0x00,0x00,0x80,0x80,
0x00,0x11,0x24,0x00,0x00,0x80,0x40,0x00,0x0E,0x76,0x00,0x01,0x00,0x20,0x00,0x00,
0x00,0x00,0x02,0x00,0x18,0x00,0x00,0x00,0x00,0x0C,0x00,0x07,0xFF,0xFF,0xFF,0xFF,
0xF0,0x00
};
/*-- 調入了一幅圖像:C:\WINDOWS\Desktop\OK1.bmp --*/
/*-- 寬度x高度=49x14 --*/
/*-- 寬度不是8的倍數,現調整為:寬度x高度=56x14 --*/
uint8 const button_ok1[] =
{
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xFF,0xFF,0xFF,0xFF,0xF0,0x00,0x1F,0xFF,
0xFF,0xFF,0xFF,0xFC,0x00,0x3F,0xFF,0xF1,0x89,0xFF,0xFE,0x00,0x7F,0xFF,0xEE,0xDB,
0xFF,0xFF,0x00,0x7F,0xFF,0xEE,0xD7,0xFF,0xFF,0x00,0x7F,0xFF,0xEE,0xCF,0xFF,0xFF,
0x00,0x7F,0xFF,0xEE,0xD7,0xFF,0xFF,0x00,0x7F,0xFF,0xEE,0xD7,0xFF,0xFF,0x00,0x7F,
0xFF,0xEE,0xDB,0xFF,0xFF,0x00,0x3F,0xFF,0xF1,0x89,0xFF,0xFE,0x00,0x1F,0xFF,0xFF,
0xFF,0xFF,0xFC,0x00,0x07,0xFF,0xFF,0xFF,0xFF,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00
};
/*-- 調入了一幅圖像:C:\WINDOWS\Desktop\Cancle.bmp --*/
/*-- 寬度x高度=49x14 --*/
/*-- 寬度不是8的倍數,現調整為:寬度x高度=56x14 --*/
uint8 const button_cancle[] =
{
0x07,0xFF,0xFF,0xFF,0xFF,0xF0,0x00,0x18,0x00,0x00,0x00,0x00,0x0C,0x00,0x20,0x00,
0x00,0x00,0x00,0x02,0x00,0x40,0xF0,0x00,0x00,0x07,0x01,0x00,0x81,0x10,0x00,0x00,
0x01,0x00,0x80,0x81,0x00,0x00,0x00,0x01,0x00,0x80,0x81,0x01,0x9E,0x1C,0x61,0x00,
0x80,0x81,0x02,0x49,0x24,0x91,0x00,0x80,0x81,0x01,0xC9,0x20,0xF1,0x00,0x80,0x81,
0x12,0x49,0x20,0x81,0x00,0x80,0x40,0xE1,0xFD,0x9C,0x77,0xC1,0x00,0x20,0x00,0x00,
0x00,0x00,0x02,0x00,0x18,0x00,0x00,0x00,0x00,0x0C,0x00,0x07,0xFF,0xFF,0xFF,0xFF,
0xF0,0x00
};
/*-- 調入了一幅圖像:C:\WINDOWS\Desktop\Cancle1.bmp --*/
/*-- 寬度x高度=49x14 --*/
/*-- 寬度不是8的倍數,現調整為:寬度x高度=56x14 --*/
uint8 const button_cancle1[] =
{
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xFF,0xFF,0xFF,0xFF,0xF0,0x00,0x1F,0xFF,
0xFF,0xFF,0xFF,0xFC,0x00,0x3F,0x0F,0xFF,0xFF,0xF8,0xFE,0x00,0x7E,0xEF,0xFF,0xFF,
0xFE,0xFF,0x00,0x7E,0xFF,0xFF,0xFF,0xFE,0xFF,0x00,0x7E,0xFE,0x61,0xE3,0x9E,0xFF,
0x00,0x7E,0xFD,0xB6,0xDB,0x6E,0xFF,0x00,0x7E,0xFE,0x36,0xDF,0x0E,0xFF,0x00,0x7E,
0xED,0xB6,0xDF,0x7E,0xFF,0x00,0x3F,0x1E,0x02,0x63,0x88,0x3E,0x00,0x1F,0xFF,0xFF,
0xFF,0xFF,0xFC,0x00,0x07,0xFF,0xFF,0xFF,0xFF,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00
};
/****************************************************************************
* 名稱:GUI_Button49x14()
* 功能:顯示49*14按鈕。
* 入口參數: x 指定顯示位置,x坐標
* y 指定顯示位置,y坐標
* dat 顯示的數據地址
* 出口參數:無
****************************************************************************/
void GUI_Button49x14(uint32 x, uint32 y, uint8 *dat)
{ GUI_LoadPic(x, y, (uint8 *)dat, 49, 14);
}
/****************************************************************************
* 名稱:GUI_Button_OK()
* 功能:顯示49*14按鈕"OK"。
* 入口參數: x 指定顯示位置,x坐標
* y 指定顯示位置,y坐標
* 出口參數:無
****************************************************************************/
void GUI_Button_OK(uint32 x, uint32 y)
{ GUI_LoadPic(x, y, (uint8 *) button_ok, 49, 14);
}
/****************************************************************************
* 名稱:GUI_Button_OK1()
* 功能:顯示49*14按鈕,選擇狀態的"OK"。
* 入口參數: x 指定顯示位置,x坐標
* y 指定顯示位置,y坐標
* 出口參數:無
****************************************************************************/
void GUI_Button_OK1(uint32 x, uint32 y)
{ GUI_LoadPic(x, y, (uint8 *) button_ok1, 49, 14);
}
/****************************************************************************
* 名稱:GUI_Button_Cancle()
* 功能:顯示49*14按鈕"Cancle"。
* 入口參數: x 指定顯示位置,x坐標
* y 指定顯示位置,y坐標
* 出口參數:無
****************************************************************************/
void GUI_Button_Cancle(uint32 x, uint32 y)
{ GUI_LoadPic(x, y, (uint8 *) button_cancle, 49, 14);
}
/****************************************************************************
* 名稱:GUI_Button_Cancle1()
* 功能:顯示49*14按鈕,選擇狀態的"Cancle"。
* 入口參數: x 指定顯示位置,x坐標
* y 指定顯示位置,y坐標
* 出口參數:無
****************************************************************************/
void GUI_Button_Cancle1(uint32 x, uint32 y)
{ GUI_LoadPic(x, y, (uint8 *) button_cancle1, 49, 14);
}
/****************************************************************************
* 名稱:GUI_MenuIcoDraw()
* 功能:顯示圖標菜單。
* 入口參數:ico 圖標菜單句柄
* 出口參數:返回0表示操作失敗,返回1表示操作成功
****************************************************************************/
uint8 GUI_MenuIcoDraw(MENUICO *ico)
{
/* 參數過濾 */
if( ( (ico->x)<5 ) || ( (ico->x)>(GUI_LCM_XMAX-37 ) ) ) return(0); // 顯示起始地址判斷
if( ( (ico->icodat)==NULL ) || ( (ico->title)==NULL ) ) return(0); // 顯示數據內容判斷
GUI_LoadPic(ico->x, ico->y, (uint8 *) ico->icodat, 32, 32); // 顯示ICO圖
GUI_HLine(ico->x-5, ico->y+32, ico->x+37, back_color); // 顯示一空行
if( (ico->state)==0 )
{ GUI_LoadPic(ico->x-5, ico->y+33, (uint8 *) ico->title, 42, 13);
}
else
{ GUI_LoadPic1(ico->x-5, ico->y+33, (uint8 *) ico->title, 42, 13);
}
return(1);
}
#endif
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -