硬汉嵌入式论坛

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

[emWin] 建立ICONVIEW控件并加载图标仅显示文本后不显示图,当对其发送WM_PAINT后才显示图标

[复制链接]

27

主题

82

回帖

163

积分

初级会员

积分
163
发表于 2015-5-29 10:15:59 | 显示全部楼层 |阅读模式
//建立窗口
void CreatSysWin(void){     
        hWinSys = WM_CreateWindowAsChild(0,0,800,480,    WM_HBKWIN, WM_CF_SHOW| WM_CF_MEMDEV,_cbSYSWindow,0);
        WM_CreateWindowAsChild                    (0,0,800,480, hWinSys,  WM_CF_SHOW | WM_CF_MEMDEV,_cbIconWin,0);   
}
//回调函数,其中CreatIconWin()为建立ICONVIEW控件

void CreatIconWin(void){
   
    uint8_t i;
   
    uint16_t ICONVIEW_HNum = 3;  /* ICONVIEWÔúˮƽ·½ÏòμÄí¼Ïñêy */
    uint16_t ICONVIEW_VNum = 4;  /* ICONVIEWÔú′1Ö±·½ÏòμÄí¼Ïñêy */
   
    prevent_refresh = 0;
    /* éèÖÃICONVIEWμÄÏÔê¾Î»Öà ********************************************************************/
    ICONVIEW_VNum = (LCD_GetYSize() - ICONVIEW_TBorder - ICONVIEW_BBorder) / ICONVIEW_Height;
    ICONVIEW_HNum = (LCD_GetXSize() - ICONVIEW_LBorder - ICONVIEW_RBorder) / ICONVIEW_Width;
   
    /*ÔúÖ¸¶¨Î»ÖÃ′′½¨Ö¸¶¨3ß′çμÄICONVIEW D¡1¤¾ß*/
    hWinIcon = ICONVIEW_CreateEx(ICONVIEW_TBorder,ICONVIEW_LBorder,                     
                             ICONVIEW_HNum * ICONVIEW_Width,ICONVIEW_VNum * ICONVIEW_Height,
                 hWinSys,WM_CF_SHOW | WM_CF_HASTRANS, 0, GUI_ID_ICONVIEW0,
                             ICONVIEW_Width, ICONVIEW_Height - ICONVIEW_YSpace);/* í¼±êμÄ′1Ö±3ß′ç */   
  
  
    for (i = 0; i < GUI_COUNTOF(_aBitmapItem); i++)     {    /* ÏòICONVIEW D¡1¤¾ßìí¼óDÂí¼±ê */   
        ICONVIEW_AddBitmapItem(hWinIcon, _aBitmapItem.pBitmap, _aBitmapItem.pText);
    }   
    ICONVIEW_SetBkColor(hWinIcon, ICONVIEW_CI_SEL, GUI_WHITE | 0x80000000);/* éèÖÃD¡1¤¾ßμı3¾°é« 32 λÑÕé«ÖμμÄÇ°8 λ¿éóÃóúalpha»ìoÏ′|àíD§1û*/
    ICONVIEW_SetFont(hWinIcon, &GUI_Font16B_ASCII);/* éèÖÃ×Öìå */   
    ICONVIEW_SetSpace(hWinIcon, GUI_COORD_Y, ICONVIEW_YSpace);    /* éèÖÃí¼±êÔúx »òy ·½ÏòéÏμļä¾à¡£*/
    ICONVIEW_SetIconAlign(hWinIcon, ICONVIEW_IA_HCENTER|ICONVIEW_IA_TOP);/* éèÖöÔÆë·½ê½ */
    ICONVIEW_SetSel(hWinIcon,-1);
}


static void _cbIconWin(WM_MESSAGE * pMsg)
{
    switch (pMsg->MsgId) {
        
        case WM_CREATE:        
                CreatIconWin();
        break;        
        case WM_PAINT:   
                GUI_SetBkColor(GUI_BLUE);
                GUI_Clear();
        break;                //WM_PAINT
     
        default:        
      WM_DefaultProc(pMsg);

        }
}
//回调函数,用于控件的操作

void CreatIconWin(void);
__IO uint8_t prevent_refresh = 0;  /* Õa¸ö2Îêy±è½ÏÖØòa£¬óÃóú·àÖ1ICON¿Ø¼tμã»÷ÏÂê±¾í′¥·¢»Øμ÷oˉêyμÄWM_PAINTÏûÏ¢*/

void _cbSYSWindow(WM_MESSAGE * pMsg){
    int  NCode,Id;

    switch (pMsg->MsgId){   
        case WM_NOTIFY_PARENT:{
            Id    = WM_GetId(pMsg->hWinSrc);     
            NCode = pMsg->Data.v;               
            switch (Id){
                case GUI_ID_ICONVIEW0:{
                    switch (NCode){
                        case WM_NOTIFICATION_RELEASED: {
                           
                            switch(ICONVIEW_GetSel(pMsg->hWinSrc)){
                                    case 9:{
                                            WM_HideWindow(hWinSys);
                                            WM_ShowWindow(hWinMain);
                                            ICONVIEW_SetSel(hWinIcon,-1);
                                        break;
                                    }                                
                                    case 7:{   
                                            ICONVIEW_SetSel(hWinIcon,-1);
                                            WM_HideWindow(hWinSys);
                                            WM_HideWindow(hWinMain);                                       
                                            WM_ShowWindow(WM_HBKWIN);
                                            ExecCalibration(&mCurrentSettings);
                                            
                                        break;
                                    }

                            }
                        break;   
                        }
                    }
                break;
                }
            }     
        break;
        }
            
        case WM_PAINT:{
                    GUI_SetBkColor(GUI_BLUE);
                    GUI_Clear();   
        break;   
        }   
        default:
            WM_DefaultProc(pMsg);
        break;   
    }   
}   
回复

使用道具 举报

27

主题

82

回帖

163

积分

初级会员

积分
163
 楼主| 发表于 2015-5-29 10:17:18 | 显示全部楼层

请大侠帮找下原因谢谢

请大侠帮找下原因谢谢
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107868
QQ
发表于 2015-6-1 16:01:42 | 显示全部楼层
估计是因为动态内存小造成的,你是不是使能ICONVIEW使用内存设备了,ICONVIEW巨耗动态内存。
回复

使用道具 举报

27

主题

82

回帖

163

积分

初级会员

积分
163
 楼主| 发表于 2015-6-3 16:13:50 | 显示全部楼层

回 eric2013 的帖子

eric2013:估计是因为动态内存小造成的,你是不是使能ICONVIEW使用内存设备了,ICONVIEW巨耗动态内存。 (2015-06-01 16:01) 
是的,您的意思是不使用动态内存?我现在是初始化后连续刷新两遍
WM_ShowWindow(hWin);
GUI_Exec();   
WM_InvalidateWindow(hWin);
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107868
QQ
发表于 2015-6-3 21:58:04 | 显示全部楼层

回 sss3s 的帖子

sss3s:是的,您的意思是不使用动态内存?我现在是初始化后连续刷新两遍
WM_ShowWindow(hWin);
GUI_Exec();    
WM_InvalidateWindow(hWin); (2015-06-03 16:13) 
动态内存小就这样,你得想个别的版本解决下。或不让其开启窗口内存设备。
回复

使用道具 举报

27

主题

82

回帖

163

积分

初级会员

积分
163
 楼主| 发表于 2015-6-4 10:26:16 | 显示全部楼层
非常感谢[s:140]
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-6-16 22:26 , Processed in 0.168840 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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