硬汉嵌入式论坛

 找回密码
 立即注册
查看: 3341|回复: 1
收起左侧

[emWin] 使用流位图显示背景窗口

[复制链接]

39

主题

127

回帖

244

积分

高级会员

积分
244
发表于 2016-9-7 22:30:11 | 显示全部楼层 |阅读模式
#include "DIALOG.h"
#include "ButtonUse.h"
#include "led.h"
#include "beep.h"
#include "GUI.h"
#include "usart.h"
#include "ff.h"
#include "malloc.h"
/*********************************************************************
*
*       Defines
*
**********************************************************************
*/
#define ID_FRAMEWIN_0    (GUI_ID_USER + 0x00)
#define ID_BUTTON_0    (GUI_ID_USER + 0x01)
#define ID_BUTTON_1    (GUI_ID_USER + 0x02)

/* 变量定义和声明 */
FRESULT result;
extern FIL file;
extern UINT bw;

// USER START (Optionally insert additional defines)
// USER END

/*********************************************************************
*
*       Static data
*
**********************************************************************
*/

// USER START (Optionally insert additional static data)
// USER END

/*********************************************************************
*
*       _aDialogCreate
*/
static const GUI_WIDGET_CREATE_INFO _aDialogCreate[] = {
  { FRAMEWIN_CreateIndirect, "Framewin", ID_FRAMEWIN_0, 0, 0, 240, 320, 0, 0x64, 0 },
  { BUTTON_CreateIndirect, "Button", ID_BUTTON_0, 70, 50, 80, 60, 0, 0x0, 0 },
  { BUTTON_CreateIndirect, "Button", ID_BUTTON_1, 70, 135, 80, 60, 0, 0x0, 0 },
  // USER START (Optionally insert additional widgets)
  // USER END
};


//static void _ShowStreamBitmap(const char * sFilename)
//{      GUI_HMEM hMem;
//        char *_acBuffer2;      
//        /* 申请一块内存空间 并且将其清零    */
//        hMem = GUI_ALLOC_AllocZero(1024*20);
//        /* 将申请到内存的句柄转换成指针类型 */
//        _acBuffer2 = GUI_ALLOC_h2p(hMem);  
//        /* 打开文件 */               
//        result = f_open(&file, sFilename, FA_OPEN_EXISTING | FA_READ | FA_OPEN_ALWAYS);
//        /* 读取数据 */
//        result = f_read(&file, _acBuffer2, file.fsize, &bw);
//        /* 显示 */
//        GUI_DrawStreamedBitmapAuto(_acBuffer2, 50, 50);               
//    /* 释放动态内存 */     
//        GUI_ALLOC_Free(hMem);
//          f_close(&file);}
static void _cbDialog(WM_MESSAGE * pMsg) {
  WM_HWIN hItem;
  int     NCode;
  int     Id;
  switch (pMsg->MsgId) {
//    case WM_PAINT:
//        _ShowStreamBitmap("1:logo.dta");
//    break;
  case WM_INIT_DIALOG:   
    hItem = pMsg->hWin;
    FRAMEWIN_SetFont(hItem, GUI_FONT_16B_ASCII);
    FRAMEWIN_SetText(hItem, "jinbu");
    FRAMEWIN_SetTextColor(hItem, 0x00000000);
    FRAMEWIN_SetTitleHeight(hItem, 20);
    FRAMEWIN_SetTextAlign(hItem, GUI_TA_HCENTER | GUI_TA_VCENTER);
    //
    // Initialization of 'Button'
    //
    hItem = WM_GetDialogItem(pMsg->hWin, ID_BUTTON_0);
    BUTTON_SetFont(hItem, GUI_FONT_32B_ASCII);
    BUTTON_SetText(hItem, "LCD");
    //
    // Initialization of 'Button'
    //
    hItem = WM_GetDialogItem(pMsg->hWin, ID_BUTTON_1);
    BUTTON_SetText(hItem, "FMQ");
    BUTTON_SetFont(hItem, GUI_FONT_32_ASCII);
    // USER START (Optionally insert additional code for further widget initialization)
    // USER END
    break;
        case WM_NOTIFY_PARENT:   
            Id    = WM_GetId(pMsg->hWinSrc);
            NCode = pMsg->Data.v;   
            switch(Id)
            {
                case ID_BUTTON_0: //BUTTON_0的通知代码,控制LED1
                    switch(NCode)
                    {
                        case WM_NOTIFICATION_CLICKED:
                            break;
                        case WM_NOTIFICATION_RELEASED: //按钮被按下并释放            
                            LED1=~LED1;        //LED1反转                                       
                            //BEEP=~BEEP;
                            break;   
                    }
                    break;
                case ID_BUTTON_1: //BUTTON_1的通知代码,控制BEEP
                    switch(NCode)
                    {
                        case WM_NOTIFICATION_CLICKED:
                            break;
                        case WM_NOTIFICATION_RELEASED:
                            BEEP=~BEEP;        //蜂鸣器反转
                            //LED1=~LED1;
                            break;
                    }
                    break;
            }
    break;
  // USER START (Optionally insert additional message handling)
  // USER END
  default:
    WM_DefaultProc(pMsg);
    break;
  }
}

/*********************************************************************
*
*       Public code
*
**********************************************************************
*/
/*********************************************************************
*
*       CreateFramewin
*/
//WM_HWIN CreateFramewin(void) {
//  WM_HWIN hWin;

//  hWin = GUI_CreateDialogBox(_aDialogCreate, GUI_COUNTOF(_aDialogCreate), _cbDialog, WM_HBKWIN, 0, 0);
//  return hWin;
//}

// USER START (Optionally insert additional public code)
// USER END



/*************************** End of file ****************************/


#define Method3  /* 用于选择使用的显示方法 */
/*
*********************************************************************************************************
*    函 数 名: _ShowStreamBitmap
*    功能说明: 显示流位图
*    形    参:sFilename  要读取的文件名
*    返 回 值: 无
*********************************************************************************************************
*/
static void _ShowStreamBitmap(const char * sFilename)
{
     GUI_HMEM hMem;
     char *_acBuffer2;
     BUTTON_Handle hButton;
   GUI_BITMAP Bitmap;
    GUI_LOGPALETTE Palette;
    /* 创建一个按钮 */
    hButton = GUI_CreateDialogBox(_aDialogCreate, GUI_COUNTOF(_aDialogCreate), _cbDialog, WM_HBKWIN, 0, 0);
     /* 申请一块内存空间 并且将其清零    */
    hMem = GUI_ALLOC_AllocZero(1024*512);
     /* 将申请到内存的句柄转换成指针类型 */
     _acBuffer2 = GUI_ALLOC_h2p(hMem);
   
     /* 打开文件 */        
     result = f_open(&file, sFilename, FA_OPEN_EXISTING | FA_READ | FA_OPEN_ALWAYS);
     if (result != FR_OK)
     {
         return;
     }
     /* 读取文件到动态内存 */
     result = f_read(&file, _acBuffer2, file.fsize, &bw);
     if (result != FR_OK)
     {
         return;
     }
     /* 显示方法一 */
#if defined Method1
     GUI_DrawStreamedBitmapAuto(_acBuffer2, 15, 15);
   
     /* 显示方法二 */
#elif defined Method2
    GUI_CreateBitmapFromStream(&Bitmap, &ampalette, _acBuffer2);
     GUI_DrawBitmap(&Bitmap, 15, 15);
   
     /* 显示方法三 */
#elif defined Method3
     GUI_CreateBitmapFromStream565(&Bitmap, &ampalette, _acBuffer2);
     GUI_DrawBitmap(&Bitmap, 15, 15);
#endif
     /* 下面几个函数没有调试出来,留作以后调试 */
//   BUTTON_SetStreamedBitmap(hButton, BUTTON_CI_UNPRESSED, (const GUI_BITMAP_STREAM *)&Bitmap);
//  BUTTON_SetBitmap(hButton, BUTTON_BI_UNPRESSED, &Bitmap);
//   BUTTON_SetStreamedBitmapEx(hButton, BUTTON_BI_UNPRESSED, (const GUI_BITMAP_STREAM *)&Bitmap,0,0);
   
    /* 释放动态内存 */   
     GUI_ALLOC_Free(hMem);
     f_close(&file);
}

//BUTTO演示函数
void ButtonUse_Demo(void)
{
  _ShowStreamBitmap("0:logo.dta");
    while(1)
    {
        GUI_Delay(100);
    }
}
对流文图不怎么了解,修改以后不显示背景图片,请问这是什么原因啊?
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115717
QQ
发表于 2016-9-8 09:10:15 | 显示全部楼层
这个问题修正过一次,看这里

http://www.armbbs.cn/forum.php?mod=viewthread&tid=14578
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-5-14 05:23 , Processed in 0.197125 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表