OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 6257|回复: 9

STemWin貼圖一問

[复制链接]

4

主题

11

帖子

0

精华

新手上路

积分
36
金钱
36
注册时间
2016-8-3
在线时间
10 小时
发表于 2017-5-10 15:01:34 | 显示全部楼层 |阅读模式
1金钱
因為用stemwin來解JPEG很慢,所以目前使用Libjpeg來解JPEG已經可以正常顯示。

若我想使用STemwin來做一些簡易的按鍵控制,然後將解好的JPEG圖檔當背景圖,且這背景圖每50ms就要重刷一次。
目前使用uCGUIBulider畫了一個按鍵,背景是白色。目前執行的結果我貼上去的背景圖會被蓋過去。因為我解壓後的JPEG是直接填入LCD顯示記憶區。
請問要怎麼做才能將自行解壓的JPEG圖檔用來取代背景,而不會被覆蓋呢? 感謝大家

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

120

主题

7877

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12010
金钱
12010
注册时间
2013-9-10
在线时间
427 小时
发表于 2017-5-10 15:55:30 | 显示全部楼层
emwin有个背景层,将你的图片数据填充到那里去,这样再刷看看
回复

使用道具 举报

9

主题

1385

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
11471
金钱
11471
注册时间
2013-3-8
在线时间
1226 小时
发表于 2017-5-10 17:29:13 | 显示全部楼层
重绘按键就可以解决
回复

使用道具 举报

9

主题

1385

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
11471
金钱
11471
注册时间
2013-3-8
在线时间
1226 小时
发表于 2017-5-10 17:30:01 | 显示全部楼层
#define ID_WINDOW_0 (GUI_ID_USER + 0x00) #define ID_ICONVIEW_0 (GUI_ID_USER + 0x01) #define ID_BUTTON_0 (GUI_ID_USER + 0x02) #define ID_TEXT_0 (GUI_ID_USER + 0x03)  static const GUI_WIDGET_CREATE_INFO _aDialogCreate[] = {   { WINDOW_CreateIndirect, "Window", ID_WINDOW_0, 0, 0, 480, 320, 0, 0x0, 0 },         { BUTTON_CreateIndirect, "", ID_BUTTON_0, 5, 5, 40, 40, 0, 0x0, 0 },         { TEXT_CreateIndirect, "Text", ID_TEXT_0, 48, 13, 136, 20, 0, 0x64, 0 }, //  { ICONVIEW_CreateIndirect, "Iconview", ID_ICONVIEW_0, 34, 99, 420, 140, 0, 0x0, 0 }, };  GUI_HMEM hMem; char *acbuf=NULL; GUI_HMEM hMem1; char *acbuf1=NULL; GUI_HMEM hMem2; char *acbuf2=NULL;  static void _cbButton0(WM_MESSAGE * pMsg)  {           WM_HWIN  hWin;     hWin  = pMsg->hWin;           switch (pMsg->MsgId)      {         case WM_PAINT:             if (BUTTON_IsPressed(hWin))                                      {     //                                        GUI_SetBkColor(GUI_WHITE);      //                                        GUI_Clear();                                              GUI_SetAlpha(0xb0);                                              GUI_DrawBitmap(&bmbluetooth_bmp, 0,0);                                         GUI_SetAlpha(0);                                       }                                      else                                      {                                              GUI_DrawBitmap(&bmbluetooth_bmp, 0, 0);                                      }                            break;                                default:                                     BUTTON_Callback(pMsg);           }  }  /********************************************************************* * *       _cbDialog */ static void _cbDialog(WM_MESSAGE * pMsg) {   int NCode;   int Id;   static int Iconview0_Sel;   WM_HWIN hItem;            switch (pMsg->MsgId)          {                 case WM_INIT_DIALOG:                                          hItem = ICONVIEW_CreateEx(34, 79,412,130,                             pMsg->hWin, WM_CF_SHOW | WM_CF_HASTRANS,                             ICONVIEW_CF_AUTOSCROLLBAR_V, ID_ICONVIEW_0, 100, 120);         //                hItem = WM_GetDialogItem(pMsg->hWin, ID_ICONVIEW_0);                 ICONVIEW_SetFont(hItem,&GUI_Font16_ASCII);                  ICONVIEW_SetBkColor(hItem, ICONVIEW_CI_SEL, GUI_BLUE | 0xff000000);                 ICONVIEW_SetSpace(hItem,GUI_COORD_X,56);                 ICONVIEW_SetSpace(hItem,GUI_COORD_Y,20);                 ICONVIEW_SetIconAlign(hItem,ICONVIEW_IA_HCENTER|ICONVIEW_IA_VCENTER);                 ICONVIEW_SetTextColor(hItem,ICONVIEW_CI_UNSEL,GUI_RED);                 ICONVIEW_SetTextAlign(hItem,GUI_TA_HCENTER|GUI_TA_BOTTOM);                 home_HM(hItem);                 WM_SetFocus(hItem);                                  hItem = WM_GetDialogItem(pMsg->hWin, ID_BUTTON_0);                     WM_SetHasTrans(hItem);                           WM_SetCallback(hItem, _cbButton0);
回复

使用道具 举报

9

主题

1385

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
11471
金钱
11471
注册时间
2013-3-8
在线时间
1226 小时
发表于 2017-5-10 17:30:15 | 显示全部楼层
#define ID_WINDOW_0 (GUI_ID_USER + 0x00)
#define ID_ICONVIEW_0 (GUI_ID_USER + 0x01)
#define ID_BUTTON_0 (GUI_ID_USER + 0x02)
#define ID_TEXT_0 (GUI_ID_USER + 0x03)

static const GUI_WIDGET_CREATE_INFO _aDialogCreate[] = {
  { WINDOW_CreateIndirect, "Window", ID_WINDOW_0, 0, 0, 480, 320, 0, 0x0, 0 },
        { BUTTON_CreateIndirect, "", ID_BUTTON_0, 5, 5, 40, 40, 0, 0x0, 0 },
        { TEXT_CreateIndirect, "Text", ID_TEXT_0, 48, 13, 136, 20, 0, 0x64, 0 },
//  { ICONVIEW_CreateIndirect, "Iconview", ID_ICONVIEW_0, 34, 99, 420, 140, 0, 0x0, 0 },
};

GUI_HMEM hMem;
char *acbuf=NULL;
GUI_HMEM hMem1;
char *acbuf1=NULL;
GUI_HMEM hMem2;
char *acbuf2=NULL;

static void _cbButton0(WM_MESSAGE * pMsg)
{  
        WM_HWIN  hWin;

hWin  = pMsg->hWin;  
        switch (pMsg->MsgId)   
  {  
      case WM_PAINT:   
        if (BUTTON_IsPressed(hWin))     
                                {   
//                                        GUI_SetBkColor(GUI_WHITE);     
//                                        GUI_Clear();     
                                        GUI_SetAlpha(0xb0);     
                                        GUI_DrawBitmap(&bmbluetooth_bmp, 0,0);
                                        GUI_SetAlpha(0);      
                                }     
                                else     
                                {     
                                        GUI_DrawBitmap(&bmbluetooth_bmp, 0, 0);     
                                }   
                        break;      
                        default:   
                                BUTTON_Callback(pMsg);  
        }
}
/*********************************************************************
*
*       _cbDialog
*/
static void _cbDialog(WM_MESSAGE * pMsg) {
  int NCode;
  int Id;
  static int Iconview0_Sel;
  WM_HWIN hItem;
       
  switch (pMsg->MsgId)
        {
                case WM_INIT_DIALOG:
                       
                hItem = ICONVIEW_CreateEx(34, 79,412,130,
                           pMsg->hWin, WM_CF_SHOW | WM_CF_HASTRANS,
                           ICONVIEW_CF_AUTOSCROLLBAR_V, ID_ICONVIEW_0, 100, 120);       
//                hItem = WM_GetDialogItem(pMsg->hWin, ID_ICONVIEW_0);
                ICONVIEW_SetFont(hItem,&GUI_Font16_ASCII);

                ICONVIEW_SetBkColor(hItem, ICONVIEW_CI_SEL, GUI_BLUE | 0xff000000);
                ICONVIEW_SetSpace(hItem,GUI_COORD_X,56);
                ICONVIEW_SetSpace(hItem,GUI_COORD_Y,20);
                ICONVIEW_SetIconAlign(hItem,ICONVIEW_IA_HCENTER|ICONVIEW_IA_VCENTER);
                ICONVIEW_SetTextColor(hItem,ICONVIEW_CI_UNSEL,GUI_RED);
                ICONVIEW_SetTextAlign(hItem,GUI_TA_HCENTER|GUI_TA_BOTTOM);
                home_HM(hItem);
                WM_SetFocus(hItem);
               
                hItem = WM_GetDialogItem(pMsg->hWin, ID_BUTTON_0);   
                WM_SetHasTrans(hItem);         
                WM_SetCallback(hItem, _cbButton0);
回复

使用道具 举报

4

主题

11

帖子

0

精华

新手上路

积分
36
金钱
36
注册时间
2016-8-3
在线时间
10 小时
 楼主| 发表于 2017-5-11 08:09:30 | 显示全部楼层
augustedward 发表于 2017-5-10 17:30
#define ID_WINDOW_0 (GUI_ID_USER + 0x00)
#define ID_ICONVIEW_0 (GUI_ID_USER + 0x01)
#define ID_BUT ...

augustedward您好:
謝謝你的回覆,我看您提供的程式碼,調用了_cbButton0的回調函數,這裡我看的懂。但另一個_cbDialog的內容我就不太懂了,可以麻煩您解釋一下嗎? 謝謝你
回复

使用道具 举报

9

主题

1385

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
11471
金钱
11471
注册时间
2013-3-8
在线时间
1226 小时
发表于 2017-5-11 09:22:08 | 显示全部楼层
victor0726 发表于 2017-5-11 08:09
augustedward您好:
謝謝你的回覆,我看您提供的程式碼,調用了_cbButton0的回調函數,這裡我看的懂。 ...

/*********************************************************************
*
*       Public code
*
**********************************************************************
*/
/*********************************************************************
*
*       CreateWindow
*/
WM_HWIN Create_HOME_Window(void) {
  WM_HWIN hWin;
  hWin = GUI_CreateDialogBox(_aDialogCreate, GUI_COUNTOF(_aDialogCreate), _cbDialog, WM_HBKWIN, 0, 0);
  return hWin;
}
另一个回调是给创建Window界面用的
回复

使用道具 举报

9

主题

1385

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
11471
金钱
11471
注册时间
2013-3-8
在线时间
1226 小时
发表于 2017-5-11 09:22:57 | 显示全部楼层
augustedward 发表于 2017-5-11 09:22
/*********************************************************************
*
*       Public code

涉及公司,所以不方便把源码全部贴出来
回复

使用道具 举报

4

主题

11

帖子

0

精华

新手上路

积分
36
金钱
36
注册时间
2016-8-3
在线时间
10 小时
 楼主| 发表于 2017-5-11 17:19:31 | 显示全部楼层
augustedward 发表于 2017-5-11 09:22
涉及公司,所以不方便把源码全部贴出来

augustedward 謝謝回覆:

可以請問你流程嗎? 為什麼按鍵要另外產生回調函數呢? 和原來的窗口在同一個回調函數中不行嗎? 另外下列2行程式是將按鍵設成透明嗎? 為什麼要這麼做呢? 不好意思問題很多,但很謝謝您的回覆。感謝~

hItem = WM_GetDialogItem(pMsg->hWin, ID_BUTTON_0);   
                WM_SetHasTrans(hItem);   
回复

使用道具 举报

9

主题

1385

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
11471
金钱
11471
注册时间
2013-3-8
在线时间
1226 小时
发表于 2017-5-11 20:31:49 | 显示全部楼层
victor0726 发表于 2017-5-11 17:19
augustedward 謝謝回覆:

可以請問你流程嗎? 為什麼按鍵要另外產生回調函數呢? 和原來的窗口在同一個 ...

是把按建背影设置为透明,因为按键用的不是库中的形状,需要重绘,才给按键单独做的回调函数,如果不调用这个回调函数,则按键形状为默认形状
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-23 08:09

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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