本篇文档是关于在STEMWIN嵌入式开发环境中利用STM32平台实现一个具有5个可选颜色按键控制背景颜色的小程序。该程序主要涉及GUI(图形用户界面)库,包括了多种GUI控件如按钮(BUTTON), 框架窗口(FRAMEWIN), 和颜色选择功能。以下是对关键知识点的详细解析: 1. **包含头文件**: 首先,代码包含了多个GUI库的头文件,如`GUI.h`, `DIALOG.h`, `WM.h`, `BUTTON.h`, `CHECKBOX.h`, `DROPDOWN.h`, `EDIT.h`, 等等。这些头文件提供了创建和操作各种图形控件的函数和数据结构。 2. **颜色数组**: `GUI_COLOR_acColor[5]` 定义了一个包含5种颜色的数组,分别为GUI_BLUE, GUI_RED, GUI_YELLOW, GUI_GREEN, 和 GUI_WHITE。这将用于实现按键选择不同颜色的功能。 3. **静态变量**: `ucBackColor` 是一个unsigned char类型的变量,用来存储当前选定的颜色索引。通过这个变量,程序能够根据按键的选择动态改变背景颜色。 4. **对话框创建**: `staticconstGUI_WIDGET_CREATE_INFO_aDialogCreate[]` 定义了一个数组,包含了两个按钮(BUTTON0和BUTTON1)的创建信息,它们的位置、大小以及可能的属性。对话框的创建函数`FRAMEWIN_CreateIndirect`被间接调用,创建了一个可移动的800x480大小的窗口。 5. **消息处理函数**: - `PaintDialog` 函数负责重绘对话框,当接收到WM_MESSAGE消息时,它会获取窗口句柄,设置背景颜色为`_acColor[ucBackColor]`,然后清除整个窗口。 - `InitDialog` 函数在对话框初始化时执行,设置了窗口字体,文本对齐方式,并添加关闭按钮。 6. **用户体验**: 用户可以通过点击按钮来切换背景颜色,体现了STEMWIN环境中的事件驱动编程模型。开发者可以鼓励用户尝试更改这些按键,以实现自定义的界面效果。 总结来说,这段代码展示了如何在嵌入式开发中使用STEMWIN库创建一个具有交互性的窗口,通过按键控制背景颜色,适合初学者学习嵌入式GUI编程和STM32硬件与软件交互的基本原理。通过实践这个项目,开发者能够熟悉不同控件的使用,了解如何响应用户输入并更新界面显示。
#include "GUI.h"
#include "DIALOG.h"
#include "WM.h"
#include "BUTTON.h"
#include "CHECKBOX.h"
#include "DROPDOWN.h"
#include "EDIT.h"
#include "FRAMEWIN.h"
#include "LISTBOX.H"
#include "MULTIEDIT.h"
#include "RADIO.h"
#include "SLIDER.h"
#include "TEXT.h"
#include "PROGBAR.h"
#include "SCROLLBAR.h"
#include "LISTVIEW.h"
GUI_COLOR _acColor[5] = {GUI_BLUE,GUI_RED,GUI_YELLOW,GUI_GREEN,GUI_WHITE};
static unsigned char ucBackColor;
static const GUI_WIDGET_CREATE_INFO _aDialogCreate[] = {
{FRAMEWIN_CreateIndirect,"feiluo",0,0,0,800,480,FRAMEWIN_CF_MOVEABLE,0},
{BUTTON_CreateIndirect,"BUTTON0", GUI_ID_BUTTON0,82,122,162,37,0,0},
{BUTTON_CreateIndirect,"BUTTON1", GUI_ID_BUTTON1,357,123,152,35,0,0}
};
void PaintDialog(WM_MESSAGE * pMsg)
{
WM_HWIN hWin = pMsg->hWin;
GUI_SetBkColor(_acColor[ucBackColor]);
GUI_Clear();
}
void InitDialog(WM_MESSAGE * pMsg)
{
WM_HWIN hWin = pMsg->hWin;
FRAMEWIN_SetFont(hWin,&GUI_Font24B_ASCII);
FRAMEWIN_SetTextAlign(hWin,GUI_TA_VCENTER|GUI_TA_CENTER);
FRAMEWIN_AddCloseButton(hWin,FRAMEWIN_BUTTON_RIGHT,0);
FRAMEWIN_AddMaxButton(hWin,FRAMEWIN_BUTTON_RIGHT,1);
FRAMEWIN_AddMinButton(hWin,FRAMEWIN_BUTTON_RIGHT,2);
FRAMEWIN_SetTitleHeight(hWin,30);
ucBackColor = 0;
}
static void _cbCallback(WM_MESSAGE * pMsg)
{
int NCode, Id;
WM_HWIN hWin = pMsg->hWin;
switch (pMsg->MsgId)
{
case WM_MOUSEOVER:
break;
剩余5页未读,继续阅读
- 粉丝: 16
- 资源: 4
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- WebLogic集群配置与管理实战指南
- AIX5.3上安装Weblogic 9.2详细步骤
- 面向对象编程模拟试题详解与解析
- Flex+FMS2.0中文教程:开发流媒体应用的实践指南
- PID调节深入解析:从入门到精通
- 数字水印技术:保护版权的新防线
- 8位数码管显示24小时制数字电子钟程序设计
- Mhdd免费版详细使用教程:硬盘检测与坏道屏蔽
- 操作系统期末复习指南:进程、线程与系统调用详解
- Cognos8性能优化指南:软件参数与报表设计调优
- Cognos8开发入门:从Transformer到ReportStudio
- Cisco 6509交换机配置全面指南
- C#入门:XML基础教程与实例解析
- Matlab振动分析详解:从单自由度到6自由度模型
- Eclipse JDT中的ASTParser详解与核心类介绍
- Java程序员必备资源网站大全