博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ucGUI窗口创建例子
阅读量:5734 次
发布时间:2019-06-18

本文共 4777 字,大约阅读时间需要 15 分钟。

   ucgui窗体框架的学习之后,基本上我们能够应用以前学到的各个知识点绘制一个简单的窗口界面,包含按钮,文本框,复选框,父子窗口等。按钮,窗口,窗体,复选框编写程序的基本步骤:
1. 定义控件句柄
2. 创建控件
3. 设置控件的背景颜色
4. 设置控件的前景色
5. 设置控件的文本字体
6. 设置控件的文本对齐方式
7. 在控件中间书写名称(GUI_DispStringHCenterAt(参数序列))
    一般情况下都是经过以上七步,即可完成。但是有些控件比如在按钮使用过程中,它可能等待鼠标点击,点击完成后又需要删除,因此还要删除该控件。在一般使用过程中是不需要删除的,我们在日常学习使用中都可以观察得到,都是点击了按钮进行跳转等。
****
创建窗口实践:
         通过查看窗口句柄hobj,桌面窗口的句柄数是1,其它窗口都在桌面窗口的基础上创建,所以当重新第三个窗口的时候删除第二个窗口,保证所有窗口都是在桌面窗口中建立。   
       WM_SetBkWindowColor(GUI_BLACK); 
       WM_SetCallback(WM_HBKWIN,&cbDesktop);//桌面窗口,cbDesktop只有颜色设置
       GUI_Clear();
       M_CreateWindow(WIN_MENU,cbMENUWin,WM_HBKWIN);  //新窗口cbMENUWin
函数void M_CreateWindow(int win_id,WM_CALLBACK* cb,WM_HWIN winHObj) 参数中第一个是窗口的ID,第二个是新窗口的回调函数,第三个是当前窗口句柄,如果不是桌面句柄1,则先删除再创建。
if(winHObj!=WM_GetDesktopWindow())
WM_DeleteWindow(winHObj);   
       Curwin.Hwin=WM_CreateWindow(MMI_WINDOWS_X, MMI_WINDOWS_Y, MMI_WINDOWS_W, MMI_WINDOWS_H, WM_CF_MEMDEV|WM_CF_SHOW,cb, 0);
     WM_SetCallback(Curwin.Hwin,cb);  
           WM_SetFocus(Curwin.Hwin);
****

    以下是一个简单的例子,用以学习基本框架的生成,在此基础上还创建了以子窗口形式创建的窗口。现在的疑惑是以子窗口形似创建窗口是否只能在窗体中进行,两个窗体之间应该可以,在平常点击网页时可以行的通,但还是不会编写。

[code=cpp]#include "GUI.H"#include "FrameWin.h"#include "WM_Intern.h"#include 
static WM_RESULT CallbackChild(WM_MESSAGE *pMsg){ WM_HWIN hWin= (FRAMEWIN_Handle)(pMsg->hWin); switch(pMsg->MsgId) { caseWM_PAINT: GUI_SetBkColor(GUI_BLUE); GUI_SetColor(GUI_WHITE); GUI_SetFont(&GUI_FontComic24B_ASCII); GUI_SetTextAlign(GUI_TA_HCENTER|GUI_TA_VCENTER); GUI_Clear(); GUI_DispStringHCenterAt("Childwindow",//来 自:S T_M8. CN WM_GetWindowSizeX(hWin)/2, WM_GetWindowSizeY(hWin)/2); break; }}static void DemoFramewin(void){ FRAMEWIN_Handle hFrame = FRAMEWIN_Create("Framewindow",NULL,WM_CF_SHOW,10,10,150,60); FRAMEWIN_SetFont(hFrame,&GUI_Font16B_ASCII); FRAMEWIN_SetTextColor(hFrame,GUI_RED); FRAMEWIN_SetBarColor(hFrame,0,GUI_GREEN); FRAMEWIN_SetTextAlign(hFrame,GUI_TA_HCENTER); WM_CreateWindowAsChild(0,0,0,0,hFrame,WM_CF_SHOW,CallbackChild,0);}void _MainTask(void)//应用程序开始{ DemoFramewin(); while(1) GUI_Delay(100);}//主函数void main(void) { GUI_Init(); GUI_Clear(); _MainTask(); }[/code]
其它创建方式:
先建两个文件,第一个的代码如下: #include "GUI.H"#include 
  #include "FRAMEWIN.h"  #include "text.h"// 来自: STM_8 .CN#include "button.h"BUTTON_Handle U2_hButton0;TEXT_Handle U2_hTEXT0;FRAMEWIN_Handle U2_hFRAMEWIN1;void MainTask1(void) {  int r;  GUI_Init();  GUI_SetBkColor(GUI_WHITE);   GUI_ClearRect(0,0,320,240);  GUI_SetColor(GUI_RED);   WM_SetDesktopColor(GUI_WHITE);   U2_hFRAMEWIN1=FRAMEWIN_Create("Gui_Form",NULL, WM_CF_SHOW,0,0,320,231);  FRAMEWIN_AddCloseButton(U2_hFRAMEWIN1,1,0);  FRAMEWIN_SetFont(U2_hFRAMEWIN1,&GUI_Font8x18);  FRAMEWIN_SetMoveable(U2_hFRAMEWIN1,1);  FRAMEWIN_SetText(U2_hFRAMEWIN1,"Gui_Form");// 来自: STM_8 .CN  FRAMEWIN_SetTitleVis(U2_hFRAMEWIN1,0);  U2_hTEXT0=TEXT_CreateEx(180,100,130,13,U2_hFRAMEWIN1,WM_CF_SHOW,0,20,"This is Form2");  TEXT_SetFont(U2_hTEXT0,&GUI_Font8x16);   TEXT_SetText(U2_hTEXT0,"This is Form2");   TEXT_SetTextColor(U2_hTEXT0,GUI_RED);   U2_hButton0=BUTTON_CreateEx(20,60,100,40,U2_hFRAMEWIN1,WM_CF_SHOW,0,30);  BUTTON_SetText(U2_hButton0,"ShowWindows1");  GUI_SetFont(&GUI_Font8x18);  GUI_DispStringAt("This is Form2",100,180);  while(1)  {  r =  GUI_GetKey();  if (r)   {           FRAMEWIN_Delete(U2_hFRAMEWIN1);       BUTTON_Delete(U2_hButton0);          GUI_ClearRect(0,0,320,240);      MainTask();  }        GUI_Exec();       GUI_Exec();  }}然后再建一个,将上面的代码复制进去,将细节修改一下。代码如下:#include "GUI.H"#include
  #include "FRAMEWIN.h"  #include "text.h"#include "button.h"BUTTON_Handle U1_hButton0;TEXT_Handle U1_hTEXT0;FRAMEWIN_Handle U1_hFRAMEWIN1;void MainTask(void) {  int r;  GUI_Init();  GUI_SetBkColor(GUI_WHITE);   GUI_ClearRect(0,0,320,240);  GUI_SetColor(GUI_RED);   WM_SetDesktopColor(GUI_WHITE);   U1_hFRAMEWIN1=FRAMEWIN_Create("Gui_Form",NULL, WM_CF_SHOW,0,0,320,231);  FRAMEWIN_AddCloseButton(U1_hFRAMEWIN1,1,0);  FRAMEWIN_SetFont(U1_hFRAMEWIN1,&GUI_Font8x18);  FRAMEWIN_SetMoveable(U1_hFRAMEWIN1,1);// 来自: STM_8 .CN  FRAMEWIN_SetText(U1_hFRAMEWIN1,"Gui_Form");  FRAMEWIN_SetTitleVis(U1_hFRAMEWIN1,0);  U1_hTEXT0=TEXT_CreateEx(47,41,130,13,U1_hFRAMEWIN1,WM_CF_SHOW,0,20,"This is Form1");  TEXT_SetFont(U1_hTEXT0,&GUI_Font8x16);   TEXT_SetText(U1_hTEXT0,"This is Form1");   TEXT_SetTextColor(U1_hTEXT0,GUI_RED);   U1_hButton0=BUTTON_CreateEx(150,150,100,40,U1_hFRAMEWIN1,WM_CF_SHOW,0,30);  BUTTON_SetText(U1_hButton0,"ShowWindows2");  GUI_SetFont(&GUI_Font8x18);  GUI_DispStringAt("This is Form1",41,47);  while(1)  {  r =  GUI_GetKey();  if (r)   {        FRAMEWIN_Delete(U1_hFRAMEWIN1);       BUTTON_Delete(U1_hButton0);          GUI_ClearRect(0,0,320,240);      MainTask1();  }        GUI_Exec();       GUI_Exec();  }}

转载于:https://www.cnblogs.com/markmin214/archive/2013/03/29/2994738.html

你可能感兴趣的文章
【算法】CRF
查看>>
windows 8 微软拼音输入法
查看>>
Windows UI风格的设计(7)
查看>>
SQL中使用WITH AS提高性能 使用公用表表达式(CTE)简化嵌套SQL
查看>>
oracle 强行杀掉一个用户连接
查看>>
Git提交本地库代码到远程服务器的操作
查看>>
灾难拯救——让软件项目重回轨道
查看>>
ssh链接git服务器,解决push pull要求输入密码问题
查看>>
Netty 源码解析(二):对 Netty 中一些重要接口和类的介绍
查看>>
mysql中主外键关系
查看>>
第七章:数据字典
查看>>
python 字符串 类型互相转换 str bytes 字符串连接
查看>>
service mysqld start
查看>>
linux时间
查看>>
Spring+Mybatis项目中通过继承AbstractRoutingDataSource实现数据库热切换
查看>>
让Alert弹窗只弹出一次
查看>>
用友软件操作流程(新建年度帐、年度结转步骤)
查看>>
mysql权限管理
查看>>
我的友情链接
查看>>
让你快速上手的Glide4.x教程
查看>>