目录
DJYGUI的GK编程比较简单,以下是一个简单的程序示例。
1 程序调用步骤
GK初始化步骤流程如下:
- 初始化GK,即内核初始化,调用初始化函数ModuleInstall_GK;
- 显示器安装,将当前显示器安装到图形系统。
- 安装字符集,创建桌面和窗口,绘图。
2 参考代码
下面以天嵌开发板TQ2440举例,说明GK图形化编程。
GK图形内核的初始化对用户而言,相对简单,大部分工作已经由内核完成,用户只需调用函数ModuleInstall_GK即可。如所示,初始化内核后,调用函数ModuleInstall_Lcd实现安装名为“lcd_2440”的显示器,返回显示器指针,然后创建了显示器的桌面,并安装字符集。如代码 51所示。
ModuleInstall_GK(0);
lcd_2440 = (struct tagDisplayRsc*)ModuleInstall_Lcd((ptu32_t)"lcd_2440");
GK_ApiCreateDesktop(lcd_2440,&desktop,0,0,
CN_COLOR_RED+CN_COLOR_GREEN,CN_WINBUF_BUF,0,0);
Gk_Gb2312EncodeModuleInit(0);
函数ModuleInstall_Lcd完成的功能是初始化LCD硬件,并调用函数GK_InstallDisplay实现显示器安装。硬件初始化和显示器安装代码如代码 2-2所示。
ptu32_t ModuleInstall_Lcd(ptu32_t para)
{
static struct tagGkWinRsc frame_win;
static struct tagRectBitmap frame_bm;
__lcd_hard_init();
__lcd_power_enable(0,1);
__lcd_envid_of(1);
frame_bm.PixelFormat = cn_lcd_pf;
frame_bm.width = cn_lcd_xsize;
frame_bm.height = cn_lcd_ysize;
frame_bm.linebytes = cn_lcd_xsize*2;
frame_bm.bm_bits = (u8*)pg_frame_buffer;
frame_win.wm_bitmap =&frame_bm;
tg_lcd_display.frame_buffer = &frame_win;
tg_lcd_display.xmm = 0;
tg_lcd_display.ymm = 0;
tg_lcd_display.width = cn_lcd_xsize;
tg_lcd_display.height = cn_lcd_ysize;
tg_lcd_display.pixel_format = CN_SYS_PF_RGB565;
tg_lcd_display.reset_clip = false;
tg_lcd_display.framebuf_direct = false;
//无须初始化frame_buffer和desktop,z_topmost三个成员
tg_lcd_display.draw.set_pixel_bm = __lcd_set_pixel_bm;
tg_lcd_display.draw.fill_rect_bm = __lcd_fill_rect_bm;
tg_lcd_display.draw.get_pixel_bm = __lcd_get_pixel_bm;
tg_lcd_display.draw.line_bm = __lcd_line_bm;
tg_lcd_display.draw.line_bm_ie = __lcd_line_bm_ie;
tg_lcd_display.draw.blt_bm_to_bm = __lcd_blt_bm_to_bm;
tg_lcd_display.draw.get_rect_bm = __lcd_get_rect_bm;
tg_lcd_display.draw.set_pixel_screen = __lcd_set_pixel_screen;
tg_lcd_display.draw.line_screen = __lcd_line_screen;
tg_lcd_display.draw.line_screen_ie = __lcd_line_screen_ie;
tg_lcd_display.draw.fill_rect_screen = __lcd_fill_rect_screen;
tg_lcd_display.draw.bm_to_screen = __lcd_bm_to_screen;
tg_lcd_display.draw.get_pixel_screen = __lcd_get_pixel_screen;
tg_lcd_display.draw.get_rect_screen = __lcd_get_rect_screen;
tg_lcd_display.DisplayHeap = M_FindHeap("display");
tg_lcd_display.disp_ctrl = __lcd_disp_ctrl;
if(GK_InstallDisplay(&tg_lcd_display,(char*)para))
return (ptu32_t)&tg_lcd_display;
else
return (ptu32_t)NULL;
}
完成了GK初始化和显示器安装后,创建了第一个桌面后,便就可以实现绘图操作。如代码 2-1所示,实现在桌面上创建窗口,并输出“Hello World!”文本到新创建的窗口。
代码 2-3 GK应用示例
struct tagGkWinRsc desktop,win1;
desk = GK_ApiGetDesktop(“lcd_2440”);
if(GK_ ApiCreateGkwin (desktop,win1,20,20,200,200,CN_COLOR_RED,
CN_WINBUF_BUF,”WIN1”,CN_SYS_PF_DISPLAY,0,0,0);
{
GK_ApiDrawText(win1,40,80,”Hello World!”,13,CN_COLOR_BLACK,0,0);
}