硬汉嵌入式论坛

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

[emWin] 在对话框切换中,绘制BMP图片到内存设备失败

[复制链接]

17

主题

70

回帖

121

积分

初级会员

积分
121
发表于 2018-8-14 23:10:23 | 显示全部楼层 |阅读模式
在对话框A的控件处理函数中,进行窗口切换:隐藏当前对话框A,创建新对话框B。  
        WM_HideWindow(pMsg->hWin);
        App_Keyboard(WM_HBKWIN);
然后,在对话框B的WM_INIT_DIALOG中创建内存设备hMemBk,选中内存设备hMemBk,使用GUI_BMP_Draw绘制BMP文件到hMemBk。对话框B的WM_PAINT中使用hMemBk完成重绘。
发现问题,显示花屏。(使用GUI_MEMDEV_GetDataPtr发现使用GUI_BMP_Draw时发现数据没写入hMemBk)
验证1:对内存设备只使用GUI_SetBkColor(GUI_BLACK);GUI_Clear();不进行BMP文件的绘制。显示花屏。     

验证2:使用GUI_MEMDEV_GetDataPtr获取数据区,对内存设备的数据区全部设置为0。显示黑色。
验证3:将内存设备hMemBk提前创建绘制完毕,再创建对话框A,然后在对话框A的控件处理函数中隐藏当前对话框A,创建新对话框B。显示正常。
验证4:不使用窗口切换,直接创建对话框B,显示正常。

大佬,帮忙分析一下感觉像是使用不当

回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115765
QQ
发表于 2018-8-15 01:38:09 | 显示全部楼层
方便的话,直接上传个模拟器的测试代码,我帮你测试下。
回复

使用道具 举报

17

主题

70

回帖

121

积分

初级会员

积分
121
 楼主| 发表于 2018-8-15 23:05:43 | 显示全部楼层
eric2013 发表于 2018-8-15 01:38
方便的话,直接上传个模拟器的测试代码,我帮你测试下。

上传的这部分我把bmp文件的绘制给屏蔽了,单独刷蓝色给按键界面。用仿真器大部分时候正常运行,切换到按键界面能刷蓝色的。但有的时候切换过去偶尔出现棕色。尤其在点击密码框的边框位置时,特别容易出现这个问题。在板子上也是这样。
然后在此基础上,在WM_INIT_DIALOG处加入bmp绘制。发现也是大部分时候显示正常,偶尔花屏。实在不行,我就只能在创建这两个界面之前提前申请内存了。这样就没法做到随时申请随时释放,有效利用ram了。

keyboard.bmp

App_KeyboardDLG.c

26.71 KB, 阅读权限: 255, 下载次数: 15

App_SigninDLG.c

11.31 KB, 阅读权限: 255, 下载次数: 16

GUISimulationDebug.exe

871.5 KB, 阅读权限: 255, 下载次数: 16

回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115765
QQ
发表于 2018-8-16 02:46:24 | 显示全部楼层
1314一路向前 发表于 2018-8-15 23:05
上传的这部分我把bmp文件的绘制给屏蔽了,单独刷蓝色给按键界面。用仿真器大部分时候正常运行,切换到按 ...

模拟器上测试了下,界面效果是下面这种样子,没法测试有什么问题。另外你的这个存储设备提前创建的话,是否还有你说的问题
QQ截图20180816024635.png
回复

使用道具 举报

17

主题

70

回帖

121

积分

初级会员

积分
121
 楼主| 发表于 2018-8-16 08:37:35 | 显示全部楼层
正常应该是这样,你截图的就是有问题的。我正常使用时将那张bmp用作背景
TIM图片20180816083521.png
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115765
QQ
发表于 2018-8-16 16:30:10 | 显示全部楼层
你把你这里也修改成565就正常了
QQ截图20180816162959.png
QQ截图20180816163213.png


效果:
QQ截图20180816163325.png



回复

使用道具 举报

17

主题

70

回帖

121

积分

初级会员

积分
121
 楼主| 发表于 2018-8-16 20:49:34 | 显示全部楼层
eric2013 发表于 2018-8-16 16:30
你把你这里也修改成565就正常了

为什么需要改成透明?我这是刷蓝色的窗口,叠加在背景窗口上。不需要使用透明效果啊。再说加透明效果会增加透明度的存储量和运算时间。头疼
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115765
QQ
发表于 2018-8-17 00:49:49 | 显示全部楼层
1314一路向前 发表于 2018-8-16 20:49
为什么需要改成透明?我这是刷蓝色的窗口,叠加在背景窗口上。不需要使用透明效果啊。再说加透明效果会增 ...

这个没有要求,这个是我随手改了一下。用惯这个参数了。
回复

使用道具 举报

17

主题

70

回帖

121

积分

初级会员

积分
121
 楼主| 发表于 2018-8-17 12:19:33 | 显示全部楼层
eric2013 发表于 2018-8-17 00:49
这个没有要求,这个是我随手改了一下。用惯这个参数了。

哦哦。实际工程我试了还是不行,问题依然存在。红色框位置实际是个退出界面的按键,就是图片上的发送键。你可以用来来回切换一下两个界面
TIM图片20180816083521.png
225537ajtqz4jvac96qvmv.bmp
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115765
QQ
发表于 2018-8-17 12:56:16 | 显示全部楼层
把你的代码简化了下,在我们V6板子上面测试完全没问题啊,下面是GIF效果。
1.gif


  1. #include "MainTask.h"


  2. #include "string.h"
  3. #include "DIALOG.h"


  4. /*********************************************************************
  5. *
  6. *       Defines
  7. *
  8. **********************************************************************
  9. */
  10. #define ID_WINDOW_0     (GUI_ID_USER + 0x00)
  11. #define ID_MULTIEDIT_0    (GUI_ID_USER + 0x01)
  12. #define ID_BUTTON_0     (GUI_ID_USER + 0x02)
  13. #define ID_BUTTON_1     (GUI_ID_USER + 0x03)
  14. #define ID_BUTTON_2     (GUI_ID_USER + 0x04)
  15. #define ID_BUTTON_3     (GUI_ID_USER + 0x05)
  16. #define ID_BUTTON_4     (GUI_ID_USER + 0x06)
  17. #define ID_BUTTON_5     (GUI_ID_USER + 0x07)
  18. #define ID_BUTTON_6     (GUI_ID_USER + 0x08)
  19. #define ID_BUTTON_7     (GUI_ID_USER + 0x09)
  20. #define ID_BUTTON_8     (GUI_ID_USER + 0x0A)
  21. #define ID_BUTTON_9     (GUI_ID_USER + 0x0B)
  22. #define ID_BUTTON_10     (GUI_ID_USER + 0x0C)
  23. #define ID_BUTTON_11     (GUI_ID_USER + 0x0D)
  24. #define ID_BUTTON_12     (GUI_ID_USER + 0x0E)
  25. #define ID_BUTTON_13     (GUI_ID_USER + 0x0F)
  26. #define ID_BUTTON_14     (GUI_ID_USER + 0x10)
  27. #define ID_BUTTON_15     (GUI_ID_USER + 0x11)
  28. #define ID_BUTTON_16     (GUI_ID_USER + 0x12)
  29. #define ID_BUTTON_17     (GUI_ID_USER + 0x13)
  30. #define ID_BUTTON_18     (GUI_ID_USER + 0x14)
  31. #define ID_BUTTON_19     (GUI_ID_USER + 0x15)
  32. #define ID_BUTTON_20     (GUI_ID_USER + 0x16)
  33. #define ID_BUTTON_21     (GUI_ID_USER + 0x17)


  34. // USER START (Optionally insert additional defines)

  35. // USER END

  36. /*********************************************************************
  37. *
  38. *       Static data
  39. *
  40. **********************************************************************
  41. */

  42. // USER START (Optionally insert additional static data)
  43. #define MAX_PASSWORD_BYTE        20
  44. typedef struct {
  45.         GUI_MEMDEV_Handle hMemBk;
  46.         char Password[MAX_PASSWORD_BYTE];
  47. }KEYBOARD_PARA;
  48. KEYBOARD_PARA Keyboard_info;
  49. WM_HWIN hWinKeyboard;
  50. // USER END

  51. /*********************************************************************
  52. *
  53. *       _aDialogCreate
  54. */
  55. static const GUI_WIDGET_CREATE_INFO _aDialogCreate[] = {
  56.   { WINDOW_CreateIndirect, "App_Keyboard", ID_WINDOW_0, 0, 0, 360, 300, 0, 0x0, 0 },
  57.   { BUTTON_CreateIndirect, "Button", ID_BUTTON_21, 310, 8, 44, 33, 0, 0x0, 0 },

  58. };

  59. // USER END

  60. /*********************************************************************
  61. *
  62. *       _cbDialog
  63. */
  64.         GUI_MEMDEV_Handle hMemPrv;
  65. static void _cbDialog(WM_MESSAGE * pMsg) {
  66.   WM_HWIN hItem;
  67.   int     NCode;
  68.   int     Id;

  69.   switch (pMsg->MsgId) {
  70.   case WM_INIT_DIALOG:
  71.         Keyboard_info.hMemBk = GUI_MEMDEV_CreateFixed(0,0,360,300,GUI_MEMDEV_HASTRANS,GUI_MEMDEV_APILIST_16,GUICC_M565);
  72.         GUI_MEMDEV_Select(Keyboard_info.hMemBk);  
  73.         GUI_SetBkColor(GUI_BLUE);
  74.         GUI_Clear();
  75.         GUI_MEMDEV_Select(0);
  76.     break;

  77.   case WM_PAINT:
  78.           GUI_MEMDEV_WriteAt(Keyboard_info.hMemBk,0,0);
  79.           break;

  80.   case WM_DELETE:
  81.           GUI_MEMDEV_Delete(Keyboard_info.hMemBk);        
  82.           break;

  83.   case WM_NOTIFY_PARENT:
  84.     Id    = WM_GetId(pMsg->hWinSrc);
  85.     NCode = pMsg->Data.v;
  86.     switch(Id) {
  87.     case ID_BUTTON_21: // Notifications sent by 'Button'
  88.       switch(NCode) {
  89.       case WM_NOTIFICATION_CLICKED:
  90.         // USER START (Optionally insert code for reacting on notification message)
  91.                 WM_DeleteWindow(pMsg->hWin);
  92.         break;
  93.       }
  94.       break;

  95.     }
  96.     break;

  97.   default:
  98.     WM_DefaultProc(pMsg);
  99.     break;
  100.   }
  101. }

  102. WM_HWIN App_Keyboard(WM_HWIN hWin);
  103. WM_HWIN App_Keyboard(WM_HWIN hWin) {

  104.   hWinKeyboard = GUI_CreateDialogBox(_aDialogCreate, GUI_COUNTOF(_aDialogCreate), _cbDialog, hWin, 0, 0);
  105.   return hWinKeyboard;
  106. }

  107. #include "GUI.h"
  108. #include "DROPDOWN.H"
  109. // USER END

  110. #include "DIALOG.h"

  111. extern WM_HWIN App_Keyboard(WM_HWIN hWin);
  112. /*********************************************************************
  113. *
  114. *       Defines
  115. *
  116. **********************************************************************
  117. */
  118. //#define XSIZE_PHYS 480
  119. //#define YSIZE_PHYS 320

  120. #define ID_WINDOW_0      (GUI_ID_USER + 0x00)
  121. #define ID_DROPDOWN_0      (GUI_ID_USER + 0x01)


  122. // USER START (Optionally insert additional defines)
  123. #define MSG_KEYINPUT              (WM_USER + 0x52)
  124. #define PIX_RGB24_TO_GUIRGB(B,G,R)    ( (B<<16) | (G<<8) | R )
  125. // USER END

  126. /*********************************************************************
  127. *
  128. *       Static data
  129. *
  130. **********************************************************************
  131. */

  132. // USER START (Optionally insert additional static data)
  133. typedef struct{
  134.         GUI_MEMDEV_Handle hMemBk;
  135. }SIGNIN_PARA;
  136. SIGNIN_PARA Signin_info;
  137. WM_HWIN hWinSignin;
  138. // USER END

  139. /*********************************************************************
  140. *
  141. *       _aDialogCreate
  142. */
  143. static const GUI_WIDGET_CREATE_INFO _aDialogCreate1[] = {
  144.   { WINDOW_CreateIndirect, "App_Signin", ID_WINDOW_0, 0, 0, 480, 320, 0, 0x0, 0 },
  145.   { DROPDOWN_CreateIndirect, "Dropdown", ID_DROPDOWN_0, 140, 167, 200, 20, 0, 0x0, 0 },
  146.   { BUTTON_CreateIndirect, "Button", ID_BUTTON_0, 140, 232, 200, 26, 0, 0x0, 0 },
  147.   { MULTIEDIT_CreateIndirect, "Multiedit", ID_MULTIEDIT_0, 140, 196, 200, 22, 0, 0x0, 0 },
  148.   // USER START (Optionally insert additional widgets)
  149.   // USER END
  150. };

  151. /*********************************************************************
  152. *
  153. *       Static code
  154. *
  155. **********************************************************************
  156. */

  157. // USER START (Optionally insert additional static code)
  158. static void _cbButton(WM_MESSAGE * pMsg)
  159. {
  160.         WM_HWIN hWin;
  161.         int x,y;
  162.         
  163.         hWin = pMsg->hWin;
  164.         x = WM_GetWindowOrgX(hWin);
  165.         y = WM_GetWindowOrgY(hWin);
  166.         switch (pMsg->MsgId)
  167.         {
  168.                 case WM_PAINT:
  169.                         if (BUTTON_IsPressed(hWin))
  170.                         {
  171.                                 GUI_SetBkColor(GUI_RED);
  172.                                 GUI_Clear();
  173.                                 GUI_SetFont(&GUI_Font16_ASCII);
  174.                                 GUI_SetColor(GUI_BLUE);
  175.                                 GUI_DispStringHCenterAt("OK",100,3);
  176.                         }
  177.                         else
  178.                         {
  179.                                 /*dispbmp((uint8_t*)"0:/PICTURE/USER/signin1.bmp",0,-x,-y,1,1);*/
  180. //                                GUI_MEMDEV_WriteAt(Signin_info.hMemBk,0,0);
  181.                         }
  182.                         break;
  183.                 default:
  184.                         BUTTON_Callback(pMsg);
  185.         }
  186. }
  187. // USER END


  188. /*********************************************************************
  189. *
  190. *       _cbDialog
  191. */
  192. static void _cbDialog1(WM_MESSAGE * pMsg) {
  193.   WM_HWIN hItem;
  194.   int     NCode;
  195.   int     Id;
  196.   // USER START (Optionally insert additional variables)
  197.   DROPDOWN_SKINFLEX_PROPS user_skin;
  198.   GUI_MEMDEV_Handle hMemPrv;
  199.         // USER END

  200.   switch (pMsg->MsgId) {
  201.   case WM_INIT_DIALOG:
  202.         //dispbmp((uint8_t*)"0:/PICTURE/USER/signin1.bmp",0,0,0,1,1);
  203.     //
  204.     // Initialization of 'Dropdown'
  205.     //
  206.     hItem = WM_GetDialogItem(pMsg->hWin, ID_DROPDOWN_0);
  207.     DROPDOWN_SetListHeight(hItem, 80);
  208.         WIDGET_SetEffect(hItem, &WIDGET_Effect_None);
  209.         DROPDOWN_SetFont(hItem, GUI_FONT_16_ASCII);
  210.     DROPDOWN_AddString(hItem, "1fdgewd@aaa.com");
  211.         DROPDOWN_AddString(hItem, "212dfsdf@aaa.com");
  212.         DROPDOWN_AddString(hItem, "3adsfweq@aaa.com");
  213.         DROPDOWN_GetSkinFlexProps(&user_skin,DROPDOWN_SKINFLEX_PI_EXPANDED);
  214.         user_skin.aColorFrame[0] = PIX_RGB24_TO_GUIRGB(181,186,219);
  215.         user_skin.aColorFrame[1] = PIX_RGB24_TO_GUIRGB(152,152,173);
  216.         user_skin.aColorFrame[2] = PIX_RGB24_TO_GUIRGB(255,255,255);
  217.         user_skin.aColorUpper[0] = PIX_RGB24_TO_GUIRGB(255,255,255);
  218.         user_skin.aColorUpper[1] = PIX_RGB24_TO_GUIRGB(255,255,255);
  219.         user_skin.aColorLower[0] = PIX_RGB24_TO_GUIRGB(255,255,255);
  220.         user_skin.aColorLower[1] = PIX_RGB24_TO_GUIRGB(255,255,255);
  221.         user_skin.ColorArrow         = PIX_RGB24_TO_GUIRGB(108,109,130);
  222.         user_skin.ColorSep                 = PIX_RGB24_TO_GUIRGB(181,186,219);
  223.         user_skin.ColorText                 = PIX_RGB24_TO_GUIRGB(78,79,100);        
  224.         user_skin.Radius                 = 3;
  225.         DROPDOWN_SetSkinFlexProps(&user_skin,DROPDOWN_SKINFLEX_PI_EXPANDED);
  226.         DROPDOWN_GetSkinFlexProps(&user_skin, DROPDOWN_SKINFLEX_PI_FOCUSSED);
  227.         user_skin.aColorFrame[0] = PIX_RGB24_TO_GUIRGB(181,186,219);
  228.         user_skin.aColorFrame[1] = PIX_RGB24_TO_GUIRGB(152,152,173);
  229.         user_skin.aColorFrame[2] = PIX_RGB24_TO_GUIRGB(255,255,255);
  230.         user_skin.aColorUpper[0] = PIX_RGB24_TO_GUIRGB(255,255,255);
  231.         user_skin.aColorUpper[1] = PIX_RGB24_TO_GUIRGB(255,255,255);
  232.         user_skin.aColorLower[0] = PIX_RGB24_TO_GUIRGB(255,255,255);
  233.         user_skin.aColorLower[1] = PIX_RGB24_TO_GUIRGB(255,255,255);
  234.         user_skin.ColorArrow         = PIX_RGB24_TO_GUIRGB(108,109,130);
  235.         user_skin.ColorSep                 = PIX_RGB24_TO_GUIRGB(181,186,219);
  236.         user_skin.ColorText                 = PIX_RGB24_TO_GUIRGB(78,79,100);
  237.         user_skin.Radius                 = 3;
  238.         DROPDOWN_SetSkinFlexProps(&user_skin, DROPDOWN_SKINFLEX_PI_FOCUSSED);
  239.           DROPDOWN_GetSkinFlexProps(&user_skin,DROPDOWN_SKINFLEX_PI_ENABLED);
  240.         user_skin.aColorFrame[0] = PIX_RGB24_TO_GUIRGB(255,255,255);
  241.         user_skin.aColorFrame[1] = PIX_RGB24_TO_GUIRGB(255,255,255);
  242.         user_skin.aColorFrame[2] = PIX_RGB24_TO_GUIRGB(255,255,255);
  243.         user_skin.aColorUpper[0] = PIX_RGB24_TO_GUIRGB(255,255,255);
  244.         user_skin.aColorUpper[1] = PIX_RGB24_TO_GUIRGB(255,255,255);
  245.         user_skin.aColorLower[0] = PIX_RGB24_TO_GUIRGB(255,255,255);
  246.         user_skin.aColorLower[1] = PIX_RGB24_TO_GUIRGB(255,255,255);
  247.         user_skin.ColorArrow         = PIX_RGB24_TO_GUIRGB(108,109,130);
  248.         user_skin.ColorSep                 = PIX_RGB24_TO_GUIRGB(181,186,219);
  249.         user_skin.ColorText                 = PIX_RGB24_TO_GUIRGB(78,79,100);
  250.         user_skin.Radius                 = 3;
  251.         DROPDOWN_SetSkinFlexProps(&user_skin,DROPDOWN_SKINFLEX_PI_ENABLED);
  252.         DROPDOWN_GetSkinFlexProps(&user_skin,DROPDOWN_SKINFLEX_PI_DISABLED);
  253.     DROPDOWN_SetSkinFlexProps(&user_skin,DROPDOWN_SKINFLEX_PI_DISABLED);
  254.     //
  255.     // Initialization of 'Multiedit'
  256.     //
  257.     hItem = WM_GetDialogItem(pMsg->hWin, ID_MULTIEDIT_0);
  258.         MULTIEDIT_SetPasswordMode(hItem,1);
  259.     MULTIEDIT_SetText(hItem, "Password");
  260.     MULTIEDIT_SetFont(hItem, &GUI_Font16_ASCII);
  261.         MULTIEDIT_EnableBlink(hItem,1000,1);
  262.         MULTIEDIT_SetReadOnly(hItem,1);
  263.         WIDGET_SetEffect(hItem, &WIDGET_Effect_None);
  264.     // USER START (Optionally insert additional code for further widget initialization)
  265.         hItem = WM_GetDialogItem(pMsg->hWin, ID_BUTTON_0);
  266.         WM_SetCallback(hItem, _cbButton);
  267.     // USER END
  268.     break;
  269.   case WM_PAINT:
  270.          // dispbmp((uint8_t*)"0:/PICTURE/USER/signin1.bmp",0,0,0,1,1);
  271.           break;
  272.   case MSG_KEYINPUT:
  273.           hItem = WM_GetDialogItem(pMsg->hWin, ID_MULTIEDIT_0);
  274.       MULTIEDIT_SetText(hItem, pMsg->Data.p);
  275.           break;
  276.   case WM_NOTIFY_PARENT:
  277.     Id    = WM_GetId(pMsg->hWinSrc);
  278.     NCode = pMsg->Data.v;
  279.     switch(Id) {

  280.         case ID_MULTIEDIT_0: // Notifications sent by 'Multiedit'
  281.       switch(NCode) {
  282.       case WM_NOTIFICATION_CLICKED:
  283.                 App_Keyboard(WM_HBKWIN);
  284.                 // USER END
  285.         break;
  286.       case WM_NOTIFICATION_RELEASED:
  287.         // USER START (Optionally insert code for reacting on notification message)
  288. //        App_Keyboard(pMsg->hWin);
  289.                 // USER END
  290.         break;
  291.       case WM_NOTIFICATION_VALUE_CHANGED:
  292.         // USER START (Optionally insert code for reacting on notification message)
  293.         // USER END
  294.         break;
  295.       // USER START (Optionally insert additional code for further notification handling)
  296.       // USER END
  297.       }
  298.       break;
  299.     // USER START (Optionally insert additional code for further Ids)
  300.     // USER END
  301.     }
  302.     break;
  303.   // USER START (Optionally insert additional message handling)
  304.   // USER END
  305.   default:
  306.     WM_DefaultProc(pMsg);
  307.     break;
  308.   }
  309. }

  310. /*********************************************************************
  311. *
  312. *       Public code
  313. *
  314. **********************************************************************
  315. */
  316. /*********************************************************************
  317. *
  318. *       CreateApp_Signin
  319. */
  320. WM_HWIN App_Signin(WM_HWIN hWin);
  321. WM_HWIN App_Signin(WM_HWIN hWin) {

  322.   hWinSignin = GUI_CreateDialogBox(_aDialogCreate1, GUI_COUNTOF(_aDialogCreate1), _cbDialog1, WM_HBKWIN, 0, 0);
  323.   return hWinSignin;
  324. }

  325. // USER START (Optionally insert additional public code)
  326. void _CB_DefaultBK(WM_MESSAGE * pMsg)
  327. {
  328.         const GUI_BITMAP  *pBm;
  329.         int x, y;

  330.         switch (pMsg->MsgId)
  331.         {
  332.         case WM_PAINT:
  333.                 GUI_SetBkColor(GUI_BLACK);
  334.                 GUI_Clear();
  335.                 break;
  336.         default:
  337.                 WM_DefaultProc(pMsg);
  338.                 break;
  339.         }
  340. }


  341. /*
  342. *********************************************************************************************************
  343. *        函 数 名: MainTask
  344. *        功能说明: GUI主函数
  345. *        形    参: 无
  346. *        返 回 值: 无
  347. *********************************************************************************************************
  348. */
  349. void MainTask(void)
  350. {
  351.         
  352.         /* 初始化 */
  353.         GUI_Init();
  354.         
  355.         /*
  356.          关于多缓冲和窗口内存设备的设置说明
  357.            1. 使能多缓冲是调用的如下函数,用户要在LCDConf_Lin_Template.c文件中配置了多缓冲,调用此函数才有效:
  358.                   WM_MULTIBUF_Enable(1);
  359.            2. 窗口使能使用内存设备是调用函数:WM_SetCreateFlags(WM_CF_MEMDEV);
  360.            3. 如果emWin的配置多缓冲和窗口内存设备都支持,二选一即可,且务必优先选择使用多缓冲,实际使用
  361.                   STM32F429BIT6 + 32位SDRAM + RGB565/RGB888平台测试,多缓冲可以有效的降低窗口移动或者滑动时的撕裂
  362.                   感,并有效的提高流畅性,通过使能窗口使用内存设备是做不到的。
  363.            4. 所有emWin例子默认是开启三缓冲。
  364.         */
  365.         WM_MULTIBUF_Enable(1);
  366.         
  367.         /*
  368.        触摸校准函数默认是注释掉的,电阻屏需要校准,电容屏无需校准。如果用户需要校准电阻屏的话,执行
  369.            此函数即可,会将触摸校准参数保存到EEPROM里面,以后系统上电会自动从EEPROM里面加载。
  370.         */
  371.     //TOUCH_Calibration();
  372.         WM_SetCallback(WM_HBKWIN, _CB_DefaultBK);

  373.         //        App_Keyboard(WM_HBKWIN);while(1){GUI_Delay(1000);};
  374.         //登录界面
  375.         App_Signin(WM_HBKWIN);
  376.         
  377.                
  378.         while(1)
  379.         {
  380.                 GUI_Delay(1000);
  381.         }
  382. }
复制代码



回复

使用道具 举报

17

主题

70

回帖

121

积分

初级会员

积分
121
 楼主| 发表于 2018-8-17 23:24:23 | 显示全部楼层
eric2013 发表于 2018-8-17 12:56
把你的代码简化了下,在我们V6板子上面测试完全没问题啊,下面是GIF效果。

在对话框Keyboard的WM_INIT_DIALOG消息中使用WM_GetActiveWindow,发现此时的活跃窗口是对话框Signin中的MultiEdit控件!!!这也就解释了之前为什么会出现一小条蓝色的问题。于是在对话框Keyboard的WM_PAINT中:确认当前活跃窗口是对话框Keyboard的句柄后,再创建并绘制bmp到内存设备。完美解决花屏问题!!嘿嘿,大问题解决。
另外,还有一个小问题。在对话框Signin和对话框Keyboard这两个界面的显示过程中,都是其中的MultiEdit控件先显示,然后再刷出整个界面。打断点,发现MultiEdit控件在WM_PAINT消息之前显示的。这里又有什么套路需要考虑,还得摸索
024644tt7cdnnntd9f9ln9.png
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115765
QQ
发表于 2018-8-18 02:42:03 | 显示全部楼层
1314一路向前 发表于 2018-8-17 23:24
在对话框Keyboard的WM_INIT_DIALOG消息中使用WM_GetActiveWindow,发现此时的活跃窗口是对话框Signin中的M ...



帮你在我们开发板上面测试,无此问题,是用的三缓冲,模拟器无法开启三缓冲,要特别设置软件配置才行。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-17 07:11 , Processed in 0.370626 second(s), 27 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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