硬汉嵌入式论坛

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

[emWin] BUTTON控件要如何建置在BMP圖片上

[复制链接]

13

主题

34

回帖

73

积分

初级会员

积分
73
发表于 2016-4-18 17:45:05 | 显示全部楼层 |阅读模式
請問ERIC2013
BMP圖片是要從SD卡讀取 當作背景圖  再把BUTTON控件加在此背景圖上
如附圖 但是BUTTON卻無法顯示顏色(如左圖)    顯示了顏色卻無BMP背景圖(如右圖)
附上我的程序 請問要如何修改  謝謝你!


有BMP背景圖 但BUTTON無顏色

有BMP背景圖 但BUTTON無顏色

BUTTON有顏色 但無BMP背景圖

BUTTON有顏色 但無BMP背景圖



/*
*********************************************************************************************************
*                                      
*    Ä£¿éÃû3Æ : GUI½çÃæèÎÎñ
*    ÎļtÃû3Æ : MainTask.c
*    °æ    ±¾ : V3.0
*    Ëμ    Ã÷ : GUI½çÃæÖ÷oˉêy£¬í¨1y±ß¶á±ßÏÔê¾μÄ·½ê½êμÏÖBMPí¼Æ¬ÏÔ꾡£
*    DT¸Ä¼Ç¼ :
*        °æ±¾oÅ    èÕÆú          ×÷Õß               ËμÃ÷
*        V1.0    2013-03-26    Eric2013        °æ±¾emWin5.16
*       V2.0    2014-02-23    Eric2013        °æ±¾STemWin5.22
*        V3.0    2015-04-08    Eric2013        1. éy¼¶1ì¼t¿aμ½V1.5.0
*                                             2. éy¼¶BSP°å¼¶Ö§3Ö°ü
*                                             3. éy¼¶fatfsμ½0.11
*                                             4. éy¼¶STemWinμ½5.26
*                                             5. ¸ü¸ÄÎaDÂμÄËÄμã′¥ÃtD£×¼Ëã·¨£¬2¢ÖØ2é±àÅÅ′¥Ãt¼ì2aèÎÎñ
*                                             6. ìí¼ó7′ç800*480·Ö±æÂêμçèYÆáÖ§3Ö£¬ìí¼ó3.5′ç480*320μÄILI9488Ö§3Ö¡£
*                                             7. DT¸Ä¶Ô»°¿òÏÔê¾′óD¡1춨Îa480*272£¬òÔ′Ëà′êêó|ËùóDÆá¡£
*                                             8. ÖØDÂÕûàí×¢êí£¬ê1Æä¸ü¼ó1æ·¶¡£
*
*      Copyright (C), 2015-2020, °2¸»à3μç×ó www.armfly.com
*
*********************************************************************************************************
*/
#include "includes.h"
#include "MainTask.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 &quotROGBAR.h"
#include "SCROLLBAR.h"
#include "LISTVIEW.h"


/* êμ¼êμÄ2aêÔDèòaêÇí¼Ïñ¿í¶èμÄ4±¶¼′¿é£¬ÇD¼Ç(ò2¾íêDZ£֤ÿ¸öÏñËØèç1ûêÇ32λêy¾YμÄÇé¿ö) */
static char _acBuffer[480*4];


/*********************************************************************
*
*       Dialog resource
*
* This table conatins the info required to create the dialog.
* It has been created by ucGUIbuilder.
*/

static const GUI_WIDGET_CREATE_INFO _aDialogCreate[] = {
// { FRAMEWIN_CreateIndirect,  "BTN_IMAGE",0,0,0,800,4800,FRAMEWIN_CF_MOVEABLE,0},
    { BUTTON_CreateIndirect,    "START", GUI_ID_BUTTON0, 297,130,200,100,0,0}
};



/*****************************************************************
**      FunctionName:void PaintDialog(WM_MESSAGE * pMsg)
**      Function: to initialize the Dialog items
**                                                      
**      call this function in _cbCallback --> WM_PAINT
*****************************************************************/

void PaintDialog(WM_MESSAGE * pMsg)
{
    WM_HWIN hWin = pMsg->hWin;

}



/*****************************************************************
**      FunctionName:void InitDialog(WM_MESSAGE * pMsg)
**      Function: to initialize the Dialog items
**                                                      
**      call this function in _cbCallback --> WM_INIT_DIALOG
*****************************************************************/

void InitDialog(WM_MESSAGE * pMsg)
{
    WM_HWIN hWin = pMsg->hWin;
    //
    //FRAMEWIN
    //
   
    FRAMEWIN_SetClientColor(hWin,0xff0000);
    FRAMEWIN_SetFont(hWin,&GUI_Font16B_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,16);
   
    //
    //GUI_ID_BUTTON0
    //
    BUTTON_SetBkColor(WM_GetDialogItem(hWin,GUI_ID_BUTTON0),BUTTON_CI_UNPRESSED,0x00c000);
    BUTTON_SetBkColor(WM_GetDialogItem(hWin,GUI_ID_BUTTON0),BUTTON_CI_PRESSED,0xc0ffc0);
    BUTTON_SetFont(WM_GetDialogItem(hWin,GUI_ID_BUTTON0),&GUI_Font24B_ASCII);

}




/*********************************************************************
*
*       Dialog callback routine
*/
static void _cbCallback(WM_MESSAGE * pMsg)
{
    int NCode, Id;
    WM_HWIN hWin = pMsg->hWin;
    switch (pMsg->MsgId)
    {
        case WM_PAINT:                  
                    PaintDialog(pMsg);
            break;
        case WM_INIT_DIALOG:
            InitDialog(pMsg);
            break;
        case WM_KEY:
            switch (((WM_KEY_INFO*)(pMsg->Data.p))->Key)
            {
                case GUI_KEY_ESCAPE:
                    GUI_EndDialog(hWin, 1);
                    break;
                case GUI_KEY_ENTER:
                    GUI_EndDialog(hWin, 0);
                    break;
            }
            break;
        case WM_NOTIFY_PARENT:
            Id = WM_GetId(pMsg->hWinSrc);
            NCode = pMsg->Data.v;        
            switch (Id)
            {
                case GUI_ID_OK:
                    if(NCode==WM_NOTIFICATION_RELEASED)
                        GUI_EndDialog(hWin, 0);
                    break;
                case GUI_ID_CANCEL:
                    if(NCode==WM_NOTIFICATION_RELEASED)
                        GUI_EndDialog(hWin, 0);
                    break;
                case GUI_ID_BUTTON0:
                    switch(NCode)
                    {
                        case WM_NOTIFICATION_CLICKED:
                          //  OnButtonClicked(pMsg);
                            break;
                        case WM_NOTIFICATION_RELEASED:
                          //  OnButtonReleased(pMsg);
                            break;
                        case WM_NOTIFICATION_MOVED_OUT:
                          //  OnButtonMovedOut(pMsg);
                            break;
                    }
                    break;

            }
            break;
        default:
            WM_DefaultProc(pMsg);
    }
}


/*
*********************************************************************************************************
*    oˉ êy Ãû: _GetData
*    1|ÄüËμÃ÷: ±»oˉêyGUI_BMP_DrawEx()μ÷óÃ
*    DΠ   2Σop             FILààDíêy¾Y
*             NumBytesReq   ÇëÇó¶áè¡μÄ×Ö½úêy
*             ppData        êy¾YÖ¸Õë
*             Off           èç1ûOff = 1£¬ÄÇÃ′½«ÖØDÂ′óÆäêμλÖöáè¡                 
*    ·μ »Ø Öμ: ·μ»Ø¶áè¡μÄ×Ö½úêy
*********************************************************************************************************
*/
static int _GetData(void * p, const U8 ** ppData, unsigned NumBytesReq, U32 Off)
{
    static int FileAddress = 0;
    UINT NumBytesRead;
    FIL *PicFile;

    PicFile = (FIL *)p;

    /*
    * ¼ì2a»o′æ′óD¡
    */
    if (NumBytesReq > sizeof(_acBuffer)) {
    NumBytesReq = sizeof(_acBuffer);
    }

    /*
    * éèÖöáè¡Î»ÖÃ
    */
    if(Off == 1) FileAddress = 0;
    else FileAddress = Off;
    result =f_lseek(PicFile, FileAddress);

    /*
    * ¶áè¡êy¾Yμ½»o′æ
    */
    result = f_read(PicFile, _acBuffer, NumBytesReq, &NumBytesRead);

    /*
    * èÃÖ¸ÕëppDataÖ¸Ïò¶áè¡μÄoˉêy
    */
    *ppData = (const U8 *)_acBuffer;

    /*
    * ·μ»Ø¶áè¡μÄ×Ö½úêy
    */
    return NumBytesRead;
}

/*
*********************************************************************************************************
*    oˉ êy Ãû: _ShowBMPEx
*    1|ÄüËμÃ÷: ÏÔê¾BMPí¼Æ¬
*    DΠ   2ΣosFilename òaÏÔê¾í¼Æ¬μÄÃû×Ö
*    ·μ »Ø Öμ: ÎT
*********************************************************************************************************
*/
static void _ShowBMPEx(const char * sFilename)
{   
      
    OS_ERR          err;
     
        
    /* ′ò¿aÎļt */        
    result = f_open(&file, sFilename, FA_OPEN_EXISTING | FA_READ | FA_OPEN_ALWAYS);
    if (result != FR_OK)
    {
        return;
    }
   
//    XSize = GUI_BMP_GetXSizeEx(_GetData, &file);
//    YSize = GUI_BMP_GetYSizeEx(_GetData, &file);

    OSSchedLock(&err);
   
    GUI_BMP_DrawEx(_GetData, &file, 0, 0);
     
    OSSchedUnlock(&err);

    f_close(&file);
}

/*
*********************************************************************************************************
*    oˉ êy Ãû: MainTask
*    1|ÄüËμÃ÷: GUIÖ÷oˉêy
*    DΠ   2ΣoÎT
*    ·μ »Ø Öμ: ÎT
*********************************************************************************************************
*/
/*********************************************************************
*
*       MainTask
*
**********************************************************************
*/
void MainTask(void)
{
    GUI_Init();
    //WM_SetDesktopColor(GUI_WHITE);      /* Automacally update desktop window */
    WM_SetCreateFlags(WM_CF_MEMDEV);  /* Use memory devices on all windows to avoid flicker */
    //PROGBAR_SetDefaultSkin(PROGBAR_SKIN_FLEX);
    //FRAMEWIN_SetDefaultSkin(FRAMEWIN_SKIN_FLEX);
    //PROGBAR_SetDefaultSkin(PROGBAR_SKIN_FLEX);
    //BUTTON_SetDefaultSkin(BUTTON_SKIN_FLEX);
    //CHECKBOX_SetDefaultSkin(CHECKBOX_SKIN_FLEX);
    //DROPDOWN_SetDefaultSkin(DROPDOWN_SKIN_FLEX);
    //SCROLLBAR_SetDefaultSkin(SCROLLBAR_SKIN_FLEX);
    //SLIDER_SetDefaultSkin(SLIDER_SKIN_FLEX);
    //HEADER_SetDefaultSkin(HEADER_SKIN_FLEX);
    //RADIO_SetDefaultSkin(RADIO_SKIN_FLEX);
      _ShowBMPEx("SKY3.bmp");   
      GUI_CreateDialogBox(_aDialogCreate, GUI_COUNTOF(_aDialogCreate), &_cbCallback, 0, 0, 0);
    while(1)
    {
      
            GUI_Delay(200);   
    }
}
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117586
QQ
发表于 2016-4-19 01:46:50 | 显示全部楼层
你的图片是直接建立在桌面窗口的,一旦建立了对话框就覆盖掉了,而且背景图片没有做动态刷新。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-8-17 01:48 , Processed in 0.041251 second(s), 27 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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