emwin之BUTTON控件显示位图和流位图出现卡顿延迟的情况
时间: 2024-05-18 09:16:02 浏览: 12
BUTTON控件显示位图和流位图出现卡顿延迟的情况可能是因为以下原因:
1. 资源加载速度较慢。如果位图或流位图的大小较大,加载速度较慢,可能会导致控件显示卡顿延迟的情况。
2. 控件刷新速度慢。如果控件的刷新速度较慢,可能会导致控件显示卡顿延迟的情况。
3. 系统资源不足。如果系统资源不足,可能会导致控件显示卡顿延迟的情况。
为了解决这个问题,你可以尝试以下方法:
1. 对于资源加载速度较慢的情况,可以考虑优化资源的大小和加载方式,或者采用异步加载的方式。
2. 对于控件刷新速度慢的情况,可以考虑优化控件的绘制方式,或者采用双缓冲技术。
3. 对于系统资源不足的情况,可以考虑关闭一些不必要的程序或者服务,或者升级硬件配置。
同时,对于emWin控件的使用,建议参考官方文档和示例程序,以确保代码的正确性和效率。
相关问题
Emwin的BUTTON显示汉字
如果要在EmWin的BUTTON控件上显示汉字,需要先将汉字转换为Unicode编码,并且需要使用支持Unicode编码的字体。在EmWin中,可以使用Unicode字体库UCGUI_Font_UNICODE进行显示。
以下是一个简单的示例代码,可以用来在BUTTON控件上显示汉字:
```
#include "GUI.h"
void MainTask(void) {
GUI_Init();
GUI_UC_SetEncodeUTF8();
BUTTON_SetFont(&GUI_Font32_1);
BUTTON_SetText(WM_GetDialogItem(hDlg, ID_BUTTON), "你好世界");
while (1) {
GUI_Delay(100);
}
}
```
在这个示例中,我们使用了GUI_UC_SetEncodeUTF8()函数来指定使用UTF-8编码(即Unicode编码)来显示文本。然后,我们将BUTTON控件的字体设置为GUI_Font32_1,这是一个支持Unicode编码的字体。最后,我们使用BUTTON_SetText()函数来设置BUTTON控件上显示的文本,这里是“你好世界”。
请注意,如果您想在BUTTON控件中显示更复杂的汉字,可能需要使用更大的字体。同时,如果您的应用程序需要支持多种语言,可能需要使用多种Unicode字体库来支持不同的语言。
给出emwin利用进度控件实现环形进度条的案例详细代码
以下是使用emWin库实现环形进度条的案例详细代码:
```c
#include "GUI.h"
#include "DIALOG.h"
/*********************************************************************
*
* Defines
*
**********************************************************************
*/
#define ID_FRAMEWIN_0 (GUI_ID_USER + 0x00)
#define ID_GRAPH_0 (GUI_ID_USER + 0x01)
#define ID_BUTTON_0 (GUI_ID_USER + 0x02)
#define ID_BUTTON_1 (GUI_ID_USER + 0x03)
#define ID_BUTTON_2 (GUI_ID_USER + 0x04)
#define ID_BUTTON_3 (GUI_ID_USER + 0x05)
#define ID_BUTTON_4 (GUI_ID_USER + 0x06)
#define ID_PROGBAR_0 (GUI_ID_USER + 0x07)
#define PROGBAR_RADIUS 70
#define PROGBAR_WIDTH 20
/*********************************************************************
*
* Static data
*
**********************************************************************
*/
static const GUI_POINT aPoints[] = {
{ 0, 0},
{ 50, 0},
{ 50, -50},
{ 0, -50}
};
static WM_HWIN _hGraph;
static WM_HWIN _hProgBar;
/*********************************************************************
*
* Static code
*
**********************************************************************
*/
/*********************************************************************
*
* _cbBkWindow
*
**********************************************************************
*/
static void _cbBkWindow(WM_MESSAGE * pMsg) {
int NCode;
int Id;
switch (pMsg->MsgId) {
case WM_NOTIFY_PARENT:
Id = WM_GetId(pMsg->hWinSrc); /* Id of widget */
NCode = pMsg->Data.v; /* Notification code */
switch (Id) {
case ID_BUTTON_0: /* React to clicks of the button */
if (NCode == WM_NOTIFICATION_CLICKED) {
PROGBAR_SetValue(_hProgBar, PROGBAR_GetValue(_hProgBar) + 10);
}
break;
case ID_BUTTON_1: /* React to clicks of the button */
if (NCode == WM_NOTIFICATION_CLICKED) {
PROGBAR_SetValue(_hProgBar, PROGBAR_GetValue(_hProgBar) - 10);
}
break;
case ID_BUTTON_2: /* React to clicks of the button */
if (NCode == WM_NOTIFICATION_CLICKED) {
PROGBAR_SetValue(_hProgBar, 0);
}
break;
case ID_BUTTON_3: /* React to clicks of the button */
if (NCode == WM_NOTIFICATION_CLICKED) {
PROGBAR_SetValue(_hProgBar, 100);
}
break;
case ID_BUTTON_4: /* React to clicks of the button */
if (NCode == WM_NOTIFICATION_CLICKED) {
WM_DeleteWindow(pMsg->hWinSrc);
}
break;
}
break;
default:
WM_DefaultProc(pMsg);
break;
}
}
/*********************************************************************
*
* _cbGraph
*
**********************************************************************
*/
static void _cbGraph(WM_MESSAGE * pMsg) {
switch (pMsg->MsgId) {
case WM_PAINT:
GUI_SetColor(GUI_RED);
GUI_AA_FillRoundedRect(0, 0, PROGBAR_RADIUS * 2, PROGBAR_RADIUS * 2, PROGBAR_RADIUS);
GUI_SetColor(GUI_WHITE);
GUI_AA_FillCircle(PROGBAR_RADIUS, PROGBAR_RADIUS, PROGBAR_RADIUS - PROGBAR_WIDTH);
GUI_AA_DrawPolygon(&aPoints[0], GUI_COUNTOF(aPoints), PROGBAR_RADIUS, PROGBAR_RADIUS);
break;
default:
WM_DefaultProc(pMsg);
break;
}
}
/*********************************************************************
*
* _cbProgBar
*
**********************************************************************
*/
static void _cbProgBar(WM_MESSAGE * pMsg) {
switch (pMsg->MsgId) {
case WM_PAINT:
GUI_SetColor(GUI_BLUE);
GUI_AA_FillCircle(PROGBAR_RADIUS, PROGBAR_RADIUS, PROGBAR_RADIUS - PROGBAR_WIDTH);
break;
default:
PROGBAR_Callback(pMsg);
break;
}
}
/*********************************************************************
*
* Public code
*
**********************************************************************
*/
/*********************************************************************
*
* MainTask
*
**********************************************************************
*/
void MainTask(void) {
WM_HWIN hFrame;
WM_HWIN hItem;
int xPos;
int yPos;
GUI_Init();
WM_SetCallback(WM_HBKWIN, _cbBkWindow);
hFrame = FRAMEWIN_CreateEx(10, 10, 300, 220, WM_HBKWIN, WM_CF_SHOW, 0, ID_FRAMEWIN_0, "emWin Progress Bar");
xPos = (WM_GetWindowSizeX(hFrame) - PROGBAR_RADIUS * 2) / 2;
yPos = (WM_GetWindowSizeY(hFrame) - PROGBAR_RADIUS * 2) / 2;
_hGraph = WM_GetDialogItem(hFrame, ID_GRAPH_0);
GRAPH_SetUserDraw(_hGraph, _cbGraph);
WM_SetSize(_hGraph, PROGBAR_RADIUS * 2, PROGBAR_RADIUS * 2);
WM_MoveTo(_hGraph, xPos, yPos);
_hProgBar = PROGBAR_CreateEx(xPos, yPos, PROGBAR_RADIUS * 2, PROGBAR_RADIUS * 2, hFrame, WM_CF_SHOW, PROGBAR_CF_HORIZONTAL, ID_PROGBAR_0);
PROGBAR_SetMinMax(_hProgBar, 0, 100);
PROGBAR_SetValue(_hProgBar, 50);
WM_SetCallback(_hProgBar, _cbProgBar);
hItem = BUTTON_CreateEx(40, 160, 30, 20, hFrame, WM_CF_SHOW, 0, ID_BUTTON_0);
BUTTON_SetText(hItem, "+10");
hItem = BUTTON_CreateEx(90, 160, 30, 20, hFrame, WM_CF_SHOW, 0, ID_BUTTON_1);
BUTTON_SetText(hItem, "-10");
hItem = BUTTON_CreateEx(140, 160, 30, 20, hFrame, WM_CF_SHOW, 0, ID_BUTTON_2);
BUTTON_SetText(hItem, "0");
hItem = BUTTON_CreateEx(190, 160, 30, 20, hFrame, WM_CF_SHOW, 0, ID_BUTTON_3);
BUTTON_SetText(hItem, "100");
hItem = BUTTON_CreateEx(240, 160, 30, 20, hFrame, WM_CF_SHOW, 0, ID_BUTTON_4);
BUTTON_SetText(hItem, "Close");
while (1) {
GUI_Delay(10);
}
}
```
该代码使用了GUI库提供的GRAPH和PROGBAR控件,其中GRAPH控件用于绘制环形进度条的边框,PROGBAR控件用于显示进度条的进度。在主函数中创建了一个窗口,包含了GRAPH控件、PROGBAR控件和几个按钮控件。GRAPH控件使用了回调函数_cbGraph,自定义绘制了环形进度条的边框,PROGBAR控件使用了回调函数_cbProgBar,自定义绘制了进度条的进度。按钮控件用于增加、减少、清空和关闭进度条。
相关推荐
![](https://img-home.csdnimg.cn/images/20210720083646.png)
![](https://img-home.csdnimg.cn/images/20210720083646.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)