lzh电子论坛

欢迎来到lzh电子论坛:
如果您对电子技术感兴趣就加入我们吧!在这里互相交流互相学习!主要讨论的方向有:单片机,ARM,PCB板设计,FPGA,汇编,C/C++等方面。
-----lzh电子论坛
lzhbbs.top-me.com
lzh电子论坛

电子的道路是孤独的,要懂得左手温暖右手,要懂得把debug当作快乐去欣赏,去享受,那样你才会成功...

欢迎访问lzh电子论坛。可通过【谷歌,SOSO,搜狗】搜索“lzh电子论坛”直接进入论坛。点击了解论坛详细制度


    ucgui中编程时的一些问题

    分享
    avatar
    Admin
    管理员
    管理员

    帖子数 : 869
    威望 : 15
    注册日期 : 12-11-23
    年龄 : 25

    ucgui中编程时的一些问题

    帖子 由 Admin 于 2013-08-11, 10:45 am

    ucgui中编程时的一些问题

    1. 用户自己创建按钮ID时应该使用的模式:#define BUTTON_ID_MENULIST  (GUI_ID_USER+102)  //其中GUI_ID_USER一般在GUI.H中有定义,“102”为自己书写。这样有助于和系统的分开。
    2. 对于对话框的理解:个人观点认为一个对话框相当于我们看书时翻的那一些页,例如此时我们看的是第一页,那么这第一页就能相当于一个对话框,它其中还可以包括其他的控件,然后我们阅读第二页,这个第二页就是另一个对话框,又可以包含其他的控件,以此类推,一般系统编写时我们需要看到几个页面就需要几个对话框
    3. 回调函数的使用:使用回调函数可以方便对于窗口的更新,当我们改变了窗口中某一个控件的值时可以使用回调函数对此窗体进行重绘WM_PAINT,如果我们不使用回调函数,那么窗口的更新就是编程者自身的责任。
    4. 创建控件时(通常是在全局变量定义中定义对话框时进行)一般使用控件通用函数_CreateIndirect() 原型为:_CreateIndirect(const GUI_WIDGET_CREATE_INFO *pCreateInfo,WM_HWIN hParaent,int x0,int y0,WM_CALLBACK *cb);                             如:我们假使定义一个对话如下:static const GUI_WIDGET_CREATE_INFO  _aBuild[]={ {WINDOW_CreateIndirect,"",0,0,0,320*5,190,0},{TEXT_CreateIndirect,"欢迎使用本系统",0,(320*0+100),8,180,25,0},{EDIT_CreateIndirect,"",GUI_ID_EDIT1,(320*0+160),90,60,20,0}......};说明:加红色部分为控件定义时的基本形式
    5. 在ucgui中我们编写程序时,总是会有一些在全局变量定义时就指定在某一位置显示的内容,他是以文本框的形式输出的,相应的会有一些是在运行程序时由键盘输入的输入形式为编辑框

    ucgui编程的一般顺序:

    1. 头文件定义

         一般情况下包含的头文件有:
         一般头文件:
         #include     //杂项函数的定义以及申请动态内存时需要
         #include       //使用时间函数时需要
         #include     //字符串处理函数
         #include        //图形界面函数,是编程必须的
         #include       //常用数学函数
         #include    //在c++中进行仿真时需要此函数其中包括函数的调用,资料的结构和常数的识别字
         #include     //c++中基本输入输出函数头文件   
         常用控件头文件:
         #include       //编辑框头文件
         #include     //按钮头文件
         #include       //文本头文件
         #include     //对话框头文件
         #include   //框架头文件
         #include   //滚动条头文件
         除以上我们编程时经常用到的头文件外,我们还需要定义视窗头文件
         #ifndef WM_H
         #include WM.H          //视窗管理器头文件
         #endif
       2.创建用户ID:一般情况下编写的系统程序中必然会用到按钮,那么头文件定义完毕后,我们所需要做的就是为我们在程序中锁定义的安尼亚设置唯一的一个ID号,让系统能够知道到底是哪一个按钮在起作用。按钮定义时需要注意一些问题。可以参见上述论中的“ucgui中编程时的一些问题”。
       3.全局变量的定义:一般情况下全局变量的定义包括如下
         定义句柄  形式为:static WM_HWIN    ***
        (句柄象征着某一个指定的窗口,它是该类窗口唯一的标识符,用于在后续程序中对该类窗体进一步的操作执行,一般情况下一个控件对应于一个句柄,在一类句柄中如果多余一个可以用一个数组进行表示,如想要定义四个对话框,那么一个对话框就需要定义一个句柄,同属于对话框就为一类,句柄可按照如下形式定义 static WM_HWIN  _hDialog[4]
       当编程者在编程时如果想要使用自己定义的一些字体那么在全局变量中就必须定义这些字体 
       定义其他相关的数值:例如中间的存储量,多个值时的数组等
       对话框的定义形式为:static  const  GUI_WIDGET_CREATE_INFO  **[] = {*******}
      (对话框定义时,主要定义对话框显示的字符信息,包括字符信息的位置大小等)  
      4.函数定义
        函数一般包括为以下几类:
        主函数MainTask()
        主函数的编写一般分为以下几步:
        A:GUI_Init();
           GUI_Clear();
        B:初始化用户用于存储信息的数组
        C:设置控件的默认值
          设置文本控件的字体:TEXT_SetDefaultFont(&GUI_FontHZ_Song_12);//这里的字体为用户自定义的,  非UCGUI所有
          设置编辑框的默认字体:EDIT_SetDefaultFont(&GUI_Font16_ASCII);
          设置滚动条的默认宽度:SCROLLBAR_SetDefaultWidth(16);
          设置框架的默认字体:FRAMEWIN_SetDefaultFont(&GUI_FontHZ_Song_16);
          设置创建新的窗口时使用的默认标志:WM_SetCreateFlags(WM_CF_MEMDEV);//在所有窗口上使用存储设备
          激活存储设备:WM_EnableMemdev(WM_HBKWIN);//WM_HBMWIN为背景窗口的句柄
          设置视窗背景颜色:WM_SetBkWindowColor(GUI_BLACK);//此时你所看到的整个屏幕的背景颜色为黑色
          
          创建框架:定义形式为  句柄=FRAMEWIN_Create("框架上显示的标题名称"0,WM_CF_SHOW,0,0,320,240);
          设置框架标题栏的背景颜色:FRAMEWIN_SetBarColor(句柄名称,0,GUI_BLUE);
          设置框架文本对齐方式:FRAMEWIN_SetTextAlign(句柄名称,GUI_TA_HCENTER);
         
          D:创建客户区
          必须有的一句话:框架句柄 = WM_GetClientWindow(框架句柄);//如果去掉这句话策划那个徐运行时不会显示框架
          如果当前窗口还包括子窗口则要以子窗口的形式创建窗口,以当前窗口的句柄为子窗口的父句柄。形式如下:子窗口句柄(可有可无) = WM_CreateWindowAsChild(0,190,320,25,父窗口句柄,WM_CF_SHOW,回调函数,0);
          E:滚动条创建(如果有的话)
          滚动条句柄 = SCROLLBAR_CreateAttached(依附的窗体的句柄,0);
          设置滚动条的条目数量,设置最大值。形式:SCROLLBAR_SetNumTtems(滚动条句柄,最大值(320*5));
          设置页尺寸(滚动条移动一次窗体的移动宽度):SCROLLBAR_SetPageSize(滚动条句柄,也尺寸(320));
          隐藏滚动条:形式: WM_HideWindow(滚动条句柄);
         
        回调函数(在下一篇博客中特别介绍)
        其它函数(初始化数组函数,整数转化为字符串函数等)
        收尾语句
        while(1)
        {
          执行回调函数重绘无效窗口。形式:WM_EXEC();
          延时函数:GUI_Delay(2000);
        }

      目前的日期/时间是2018-05-28, 9:23 am