一、界面构思
(一)原型分析
1、主界面
主界面提供了,整个系统的交互接口,也就是说,我们都有哪些需要提供给用户展示的
1、数据展示功能
1.1、温度
1.2、湿度
1.3、光照
2、控制操作功能
2.1、灯光
2.2、风扇
2.3、报警
分析:
对用户来说,需要点击相应的图标下,就可以进入相关的界面,很简单,我使用button小工具进行实现,其实就是在主界面创建6个button小工具
2、子界面
控制界面
控制界面应该有什么?
1、界面的标识--- 要给用户指示这个界面有什么用
使用text小工具就可以实现
2、控制操作
开状态-当用户点击图标,灯泡点亮
关状态-当用户点击图片,灯泡熄灭
3、返回主菜单
当用户点击主菜单按钮,返回主界面
控制和返回主界面都用button实现即可
数据界面
控制界面应该有什么?
1、界面的标识--- 要给用户指示这个界面有什么用
使用text小工具就可以实现
2、数据图标展示
显示一个图片就可以,用图片小工具
3、返回主菜单
当用户点击主菜单按钮,返回主界面,用button小工具
(二)界面构思
1、主界面
2、传感器数据展示界面
3、控制设备界面
(三)素材设计
1、主界面素材
2、子界面素材
注意事项
图片最终是用过代码,进行展示的
我们必须针对图片命名时候,有规范,有要求
1、主界面命名
MainAlarm
MainLed
2、子界面
SubAlarmOpen
SubAlarmClose
SubHum
二、交互设计
(一)窗口初始化
业务流程
窗口初始化函数接口
句柄的概念
句柄:在C语言里面,它其实就是一个指针变量
WINDOW_SetBkColor
WM_GetDialogItem
BUTTON_SetBitmap
(二)按键处理
按键处理接口
WM_NOTIFY_PARENT
按钮通知代码
(三)界面切换
界面切换接口
GUI_EndDialog
GUI_CreateDialogBox
三、GUIBuilder创建代码框架
GUIBuilder创建主界面
1、创建window小工具
1.1、设置window x y 尺寸 472 280
1.2、设置背景色 2 33 79 RGB
2、创建6个button小工具
2.1、设置button尺寸为 100 100
2.2、button布局
/*
{ WINDOW_CreateIndirect, "", ID_WINDOW_0, 0, 0, 472, 280, 0, 0x0, 0 },
{ BUTTON_CreateIndirect, "", ID_BUTTON_0, 43, 30, 100, 100, 0, 0x0, 0 },
{ BUTTON_CreateIndirect, "", ID_BUTTON_1, 43, 150, 100, 100, 0, 0x0, 0 },
{ BUTTON_CreateIndirect, "", ID_BUTTON_2, 186, 150, 100, 100, 0, 0x0, 0 },
{ BUTTON_CreateIndirect, "", ID_BUTTON_3, 329, 150, 100, 100, 0, 0x0, 0 },
{ BUTTON_CreateIndirect, "", ID_BUTTON_4, 329, 30, 100, 100, 0, 0x0, 0 },
{ BUTTON_CreateIndirect, "", ID_BUTTON_5, 186, 30, 100, 100, 0, 0x0, 0 },
*/
添加代码到模拟器工程
修改窗口创建函数名称及文件名称
代码添加到工程
模拟器运行
创建温度展示界面
创建湿度展示界面
创建光照展示界面
创建风扇控制界面
创建LED控制界面
创建报警控制界面
四、BmpCvtST生成图片流
将主界面、子界面图片通过“位图转换工具”转换成c语言文件,然后复制到SeggerEval_WIN32_MSVC_MinGW_GUI_V544文件下的Application文件夹中。
位图转换工具及界面用到的图片素材:
链接:https://pan.baidu.com/s/1KnK-yzwmuKXJQRIgQmIMDQ?pwd=8hyn
提取码:8hyn
(一)主界面添加图片流
// USER START (Optionally insert additional static data)
extern GUI_CONST_STORAGE GUI_BITMAP bmMainAlarm;
extern GUI_CONST_STORAGE GUI_BITMAP bmMainFan;
extern GUI_CONST_STORAGE GUI_BITMAP bmMainHum;
extern GUI_CONST_STORAGE GUI_BITMAP bmMainLed;
extern GUI_CONST_STORAGE GUI_BITMAP bmMainLight;
extern GUI_CONST_STORAGE GUI_BITMAP bmMainTemp;
// USER END
// USER START (Optionally insert additional code for further widget initialization)
hItem = WM_GetDialogItem(pMsg->hWin, ID_BUTTON_0);
BUTTON_SetBitmap(hItem, BUTTON_BI_UNPRESSED,&bmMainAlarm);
hItem = WM_GetDialogItem(pMsg->hWin, ID_BUTTON_1);
BUTTON_SetBitmap(hItem, BUTTON_BI_UNPRESSED,&bmMainFan);
hItem = WM_GetDialogItem(pMsg->hWin, ID_BUTTON_2);
BUTTON_SetBitmap(hItem, BUTTON_BI_UNPRESSED,&bmMainHum);
hItem = WM_GetDialogItem(pMsg->hWin, ID_BUTTON_3);
BUTTON_SetBitmap(hItem, BUTTON_BI_UNPRESSED,&bmMainLed);
hItem = WM_GetDialogItem(pMsg->hWin, ID_BUTTON_4);
BUTTON_SetBitmap(hItem, BUTTON_BI_UNPRESSED,&bmMainLight);
hItem = WM_GetDialogItem(pMsg->hWin, ID_BUTTON_5);
BUTTON_SetBitmap(hItem, BUTTON_BI_UNPRESSED,&bmMainTemp);
// USER END
(二)子界面添加图片流
以HumDLG(湿度子界面)为例,其余五个子界面操作除了命名得修改一下,其余一致,如下:
// USER START (Optionally insert additional static data)
extern GUI_CONST_STORAGE GUI_BITMAP bmSubHome;
extern GUI_CONST_STORAGE GUI_BITMAP bmSubHum;
// USER END
// USER START (Optionally insert additional code for further widget initialization)
hItem = WM_GetDialogItem(pMsg->hWin, ID_BUTTON_0);
BUTTON_SetBitmap(hItem, BUTTON_BI_UNPRESSED,&bmSubHome);
// USER END
五、界面切换功能实现
功能优化
设置子界面背景色为 8 20 44 16进制 2C 14 08
//TEXT_SetBkColor(hItem, GUI_MAKE_COLOR(0x002C1408));
(一)界面切换功能实现
1、主界面切换到子界面
MainDLG.c(以按键0 Alarm为例,其余五个按键操作一致):
case ID_BUTTON_0: // Notifications sent by ''
switch(NCode) {
case WM_NOTIFICATION_CLICKED:
// USER START (Optionally insert code for reacting on notification message)
// USER END
break;
case WM_NOTIFICATION_RELEASED:
// USER START (Optionally insert code for reacting on notification message)
GUI_EndDialog(pMsg->hWin, 0);
AlarmCreate();
// USER END
break;
// USER START (Optionally insert additional code for further notification handling)
// USER END
}
break;
2、子界面
a.控制设备(Alarm、Fan、Led,即需要控制开关的),以Alarm为例:
PS:注意是在按键1写入代码,不是按键0
case ID_BUTTON_1: // Notifications sent by ''
switch(NCode) {
case WM_NOTIFICATION_CLICKED:
// USER START (Optionally insert code for reacting on notification message)
// USER END
break;
case WM_NOTIFICATION_RELEASED:
// USER START (Optionally insert code for reacting on notification message)
GUI_EndDialog(pMsg->hWin, 0);
MainCreate();
// USER END
break;
// USER START (Optionally insert additional code for further notification handling)
// USER END
}
break;
b.传感器(Hum、Light、Temp),以Hum为例
case ID_BUTTON_0: // Notifications sent by ''
switch(NCode) {
case WM_NOTIFICATION_CLICKED:
// USER START (Optionally insert code for reacting on notification message)
// USER END
break;
case WM_NOTIFICATION_RELEASED:
// USER START (Optionally insert code for reacting on notification message)
GUI_EndDialog(pMsg->hWin, 0);
MainCreate();
// USER END
break;
// USER START (Optionally insert additional code for further notification handling)
// USER END
}
(二)控制操作图标切换
也就是实现Alarm、Fan、Led点击图片按钮可以实现开关图片的切换,以Alarm为例:
// USER START (Optionally insert additional static data)
extern GUI_CONST_STORAGE GUI_BITMAP bmSubAlarmClose;
extern GUI_CONST_STORAGE GUI_BITMAP bmSubAlarmOpen;
extern GUI_CONST_STORAGE GUI_BITMAP bmSubHome;
static int status = 0;
// USER END
// USER START (Optionally insert additional code for further widget initialization)
hItem = WM_GetDialogItem(pMsg->hWin, ID_BUTTON_0);
if(status){
BUTTON_SetBitmap(hItem, BUTTON_BI_UNPRESSED, &bmSubAlarmOpen);
}else{
BUTTON_SetBitmap(hItem, BUTTON_BI_UNPRESSED, &bmSubAlarmClose);
}
hItem = WM_GetDialogItem(pMsg->hWin, ID_BUTTON_1);
BUTTON_SetBitmap(hItem, BUTTON_BI_UNPRESSED,&bmSubHome);
// USER END
PS:在按键0中添加代码
case ID_BUTTON_0: // Notifications sent by ''
switch(NCode) {
case WM_NOTIFICATION_CLICKED:
// USER START (Optionally insert code for reacting on notification message)
// USER END
break;
case WM_NOTIFICATION_RELEASED:
// USER START (Optionally insert code for reacting on notification message)
status = !status;
if(status){
BUTTON_SetBitmap(pMsg->hWinSrc, BUTTON_BI_UNPRESSED, &bmSubAlarmOpen);
}else{
BUTTON_SetBitmap(pMsg->hWinSrc, BUTTON_BI_UNPRESSED, &bmSubAlarmClose);
}
// USER END
break;
// USER START (Optionally insert additional code for further notification handling)
// USER END
}
break;