本帖最后由 pingis58 于 2015-12-23 16:56 编辑
折腾一晚上,差点死在背景图片上。先上张图,然后记录设计过程。
1,工程准备:
原本打算工程生成尽量使用STCube MX的,效果不尽人意,自动生成驱动还行,也没找到STemwin,所以就借官方的demo发挥下,改写自己的界面移植。
原始工程路径如下:\stm32cubef4\STM32Cube_FW_F4_V1.10.0\Projects\STM32469I-Discovery\Applications\STemWin\STemWin_SampleDemo\MDK-ARM
完整目录,是在stm32cubef4的解压包下,找到STM32469I-Discovery。
2,资源准备:
1)背景图片,自己随便找喜欢的。
2)应用程序图标,要效果好看最好是 icon 格式,百度查找喜欢的,如下图
3)软件工具(图片转源码)
工具路径,以MDK5为例:E:\Keil_v5\ARM\Pack\Keil\MDK-Middleware\6.5.0\emWin\Tool
上图第一个 BmpCvt是图片转源码的工具,GUIBuilder是直接图形化开发界面,直接生成源码使用的软件。
3,图标转换
1)先设计界面
双击GUIBuilder工具,添加window控件
如图红色框,我们的屏是800 * 480 像素的,设置好。添加背景图,先选择 Image 控件,同样在左下角设置 800 * 480尺寸,然后在控件上右击添加背景图片
这样生成背景图是最好的,省得麻烦,但我在此保存,生成C文件的时候,两台笔记本,一台WIN7 64位,一台XP的,都会卡死,然后崩溃,不知道是软件BUG,还是系统不兼容。所以这步看你能不能用,我的背景图生成方式用了另外一种。后绪会在代码中介绍。
添加主界面图标的ICONVIEW,同样,我在添加后,再添加图标图片的时候,无法显示,这里也直接在代码中控制。参考的是【安富莱原创】【STemWin教程】的教程。
2)主图面ICON图标的源码转换
双击BmpCvt.exe 并打开一个应用图标
点击菜单Image下的Scale
设置图标大小 ,100*100根据自己界面需要。然后点击文件保存,选择 True color with alpha
3)背景图的另一种显示方式,画BMP图像的方法,图片转换同样 双击BmpCvt.exe
先选择格式,16位的565
然后保存,选择高亮的条目
以上准备工作做完,接下来是代码添加。
4,源码
把ICON图标,背景图生成的C源码,放入GUIResource文件夹中,
拷贝至:\stm32cubef4\STM32Cube_FW_F4_V1.10.0\Projects\STM32469I-Discovery\Applications\STemWin\STemWin_SampleDemo\GUIResource
同时,工程中添加如下图
把3.1中 UI设计窗生成的文件添加至下图:
文件添加完,准备更改。
1) 找到 main 函数 修改:
//GUIDEMO_Main(); //注释原来的演示例程 CreateWindow();//添加创建窗体 此函数的外部声明自己添加
2)添加在创建窗体的源文件中 WindowDLG.c
建立ICON应用 图标资源
/* ÓÃÓÚ×ÀÃæICONVIEWͼ±ê´´½¨ */
typedef struct
{
const GUI_BITMAP * pBitmap;
const char * pText;
} BITMAP_ITEM;
/* ÓÃÓÚ×ÀÃæICONVIEWͼ±ê´´½¨ */
static const BITMAP_ITEM _aBitmapItem1[] =
{
{&bmimage, "image"},
{&bmmusic, "music"},
{&bmmovie, "movie"},
{&bmphoto, "camera"},
{&bmtext, "text"},
{&bmtool, "tool"},
};
在窗体的消息回调中,添加背景图的显示
static void _cbDialog(WM_MESSAGE * pMsg) {
int NCode;
int Id;
// USER START (Optionally insert additional variables)
// USER END
switch (pMsg->MsgId) {
case WM_PAINT:
//hItem = WM_GetDialogItem(pMsg->hWin, ID_IMAGE_0);
//pData = _GetImageById(ID_IMAGE_0_IMAGE_0, &FileSize);
//IMAGE_SetBMP(hItem, pData, FileSize);
GUI_DrawBitmap(&bmdesk,0,0);
break;
case WM_NOTIFY_PARENT:
创建ICONVIEW控件,及ICON应用 图标按钮
在创建窗体的下一句添加。
hWinICON = ICONVIEW_CreateEx(100, /* XÆðʼλÖÃ*/
100, /* YÆðʼλÖÃ*/
420, /* X¿í¶È*/
260, /* YÖ¸¶È*/
hWin, /* ¸¸´°Ìå¾ä±ú */
WM_CF_SHOW | WM_CF_HASTRANS, /* ´´½¨ºóÏÔʾ */
0,//ICONVIEW_CF_AUTOSCROLLBAR_V,
GUI_ID_ICONVIEW0, /* ID */
100, /* ICONͼ±ê¿í¶È */
100);/* ICONͼ±ê¸ß¶È */
//hWinICON = WM_GetDialogItem(pMsg->hWin, GUI_ID_ICONVIEW0);
for (i = 0; i < GUI_COUNTOF(_aBitmapItem1); i++)
{
ICONVIEW_AddBitmapItem(hWinICON, _aBitmapItem1.pBitmap, _aBitmapItem1.pText);
}
ICONVIEW_SetBkColor(hWinICON, ICONVIEW_CI_SEL, GUI_WHITE | 0x80000000);
ICONVIEW_SetFont(hWinICON, &GUI_Font20_1);
/* ÉèÖÃICONͼƬµÄ¼ä¾à*/
ICONVIEW_SetSpace(hWinICON, GUI_COORD_X, 60);
ICONVIEW_SetSpace(hWinICON, GUI_COORD_Y, 60);
ICONVIEW_SetIconAlign(hWinICON, ICONVIEW_IA_HCENTER|ICONVIEW_IA_TOP);
暂时没有实现ICON图标的响应,及相应的子界面,等后续更新,太晚太冷了。
有兴趣的可以下载添加的必须代码。直接按之前给的位置添加进去就能运行。
|
|