|
楼主 |
发表于 2008-6-9 16:30:43
|
显示全部楼层
这里发大水,房屋未冲毁……
帐篷等警报,至今还未归……
定场诗一首^_^
最近因为上网不容易,还有忙着做Robocon。只是把Fool GUI v1.00完成了。
作为纪念,写了一个探视蛇来玩玩。未来几天将加入触摸屏。因为没有时间
更新帖子的课程内容,所以只好暂时放一点成果上来。
Fool GUI v1.00的接口描述
//绘制一个纯窗体,可以单独设置边框的颜色和绘制模式,填充的颜色和绘制模式
# define LCD_BOX(__X,__Y,__WIDTH,__HEIGHT,__FRAME_MODEL,__FRAME_COLOR,__FILL_MODEL,__FILL_COLOR) \
GUI_BOX(g_bmLCDPanel,__X,__Y,__WIDTH,__HEIGHT,__FRAME_MODEL,__FRAME_COLOR,__FILL_MODEL,__FILL_COLOR)
//文字显示,可以指定x,y坐标,目前,为了简化代码,x坐标会被自动对其到8为单位的坐标上,可以指定颜色和模式
# define LCD_TEXT_OUT(__X,__Y,__STR,__COLOR,__MODEL) \
GUI_TEXT_OUT(g_bmLCDPanel,__X,__Y,__STR,__COLOR,__MODEL)
//显示二进制数字,其余同上
# define LCD_BIN_OUT(__X,__Y,__NUMBER,__COLOR,__MODEL) \
{\
BYTE chTextBuffer[32] = {0};\
GUI_TEXT_OUT(g_bmLCDPanel,(__X),(__Y),"0b",(__COLOR),(__MODEL));\
GUI_TEXT_OUT(g_bmLCDPanel,(__X)+16,(__Y),ltoa(chTextBuffer,(__NUMBER),2),(__COLOR),(__MODEL));\
}
//显示十六进制数字,其余同上
# define LCD_HEX_OUT(__X,__Y,__NUMBER,__COLOR,__MODEL) \
{\
BYTE chTextBuffer[32] = {0};\
GUI_TEXT_OUT(g_bmLCDPanel,(__X),(__Y),"0x",(__COLOR),(__MODEL));\
GUI_TEXT_OUT(g_bmLCDPanel,(__X)+16,(__Y),ltoa(chTextBuffer,(__NUMBER),16),(__COLOR),(__MODEL));\
}
//显示十进制数字,其余同上
# define LCD_DEC_OUT(__X,__Y,__NUMBER,__COLOR,__MODEL) \
{\
BYTE chTextBuffer[32] = {0};\
GUI_TEXT_OUT(g_bmLCDPanel,(__X),(__Y),ltoa(chTextBuffer,(__NUMBER),10),(__COLOR),(__MODEL));\
}
//显示一个具有3D效果的窗口(无标题栏)
# define LCD_WINDOW_3D(__X,__Y,__WIDTH,__HEIGHT) \
{\
LCD_BOX((__X) + 5,(__Y) + 5,(__WIDTH),(__HEIGHT),0xFF,0,0,0);\
LCD_BOX((__X),(__Y),(__WIDTH),(__HEIGHT),0,0,0,0xFF);\
}
//显示一个平板风格的窗口(无标题栏)
# define LCD_WINDOW(__X,__Y,__WIDTH,__HEIGHT) \
LCD_BOX((__X),(__Y),(__WIDTH),(__HEIGHT),0,0,0,0xFF);
//显示一个3D效果的窗口(有标题栏)
# define LCD_FORM_3D(__X,__Y,__WIDTH,__HEIGHT,__STR) \
{\
LCD_WINDOW((__X),(__Y),__WIDTH,__HEIGHT);\
LCD_TEXT_OUT(((__X)+8),(__Y)+2,(__STR),0,MEM_ACCESS_MODEL_NORMAL);\
LCD_BOX((__X)+1,(__Y)+1,(__WIDTH) - 2,16,0xFF,0,MEM_ACCESS_MODEL_XOR,0);\
}
//显示一个平板风格的窗口(有标题栏)
# define LCD_FORM(__X,__Y,__WIDTH,__HEIGHT,__STR) \
{\
LCD_WINDOW((__X),(__Y),__WIDTH,__HEIGHT);\
LCD_TEXT_OUT(((__X)+8),(__Y)+2,(__STR),0,MEM_ACCESS_MODEL_NORMAL);\
LCD_BOX((__X)+1,(__Y)+1,(__WIDTH) - 2,16,0xFF,0,MEM_ACCESS_MODEL_XOR,0);\
}
//类似标签的窗口
# define LCD_LABEL_FORM(__X,__Y,__WIDTH,__HEIGHT,__STR) \
{\
LCD_TEXT_OUT(((__X)),(__Y),(__STR),0,MEM_ACCESS_MODEL_NOT);\
LCD_WINDOW((__X),(__Y)+16,__WIDTH,__HEIGHT);\
}
//在双缓冲模式下,会自动将缓冲区的内容刷新到前台,在直接写屏模式下,不作任何操作
# define LCD_REFRESH \
{\
if (!g_bIfDirectlyAccess)\
{\
UPDATA_DDC(g_ddcLCD320240Middle);\
DDC_SYN_Buffer(&g_ddcLCD320240Middle);\
}\
}
//进入直接写屏模式
# define LCD_SET_FAST_ACCESS {\
g_bmLCDPanel.pmemBitMap = DDC_Get_Device(&g_ddcLCD320240Middle);\
g_bIfDirectlyAccess = TRUE;\
}
//在显示设备上下文DDC中存在缓冲区时,进入后台作图模式,只有通过LCD_REFRESH才可以将绘制好的内容一次性更新到前台
# define LCD_SET_BACKGROUND_ACCESS \
{\
g_bmLCDPanel.pmemBitMap = DDC_Get_Buffer(&g_ddcLCD320240Middle);\
g_bIfDirectlyAccess = FALSE;\
}
//在直接写屏模式下将清除屏幕的内容,在双缓冲区模式下,将清除缓冲区的内容
# define LCD_CLS \
{\
if (g_bIfDirectlyAccess)\
{\
DDC_CLS_DEVICE(g_ddcLCD320240Middle,NULL);\
}\
else\
{\
DDC_CLS_BUFFER(g_ddcLCD320240Middle,NULL);\
}\
} |
|