• DJYGUI系列文章六:GK程序示例


       

    目录

    1 程序调用步骤

    2 参考代码


            DJYGUI的GK编程比较简单,以下是一个简单的程序示例。

    1 程序调用步骤

    GK初始化步骤流程如下:

    1. 初始化GK,即内核初始化,调用初始化函数ModuleInstall_GK;
    2. 显示器安装,将当前显示器安装到图形系统。
    3. 安装字符集,创建桌面和窗口,绘图。

    2 参考代码

    下面以天嵌开发板TQ2440举例,说明GK图形化编程。

    GK图形内核的初始化对用户而言,相对简单,大部分工作已经由内核完成,用户只需调用函数ModuleInstall_GK即可。如所示,初始化内核后,调用函数ModuleInstall_Lcd实现安装名为“lcd_2440”的显示器,返回显示器指针,然后创建了显示器的桌面,并安装字符集。如代码 51所示。

    代码 2-1 GK初始化

        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所示。

    代码 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);

    }

  • 相关阅读:
    Leetcode 2909. Minimum Sum of Mountain Triplets II
    互联网Java工程师面试题·Java 面试篇·第三弹
    物联网的未来:连接的智能世界
    【升职加薪秘籍】我在服务监控方面的实践(5)-应用监控
    26-Docker-常用命令详解-docker rmi
    fork函数,进程等待,进程终止,写时拷贝
    二分查找 分数 10
    mysql详细优化建议(谈谈你的SQL优化经验)
    Centos7 Yum安装PHP7.2
    SpringBoot+Vue前后端文件传输问题总结
  • 原文地址:https://blog.csdn.net/wangjianzhongfj/article/details/41856095