emWin默认皮肤下重新设置颜色

本文介绍了一种在EmWin环境下解决按钮使用默认皮肤后无法直接修改颜色的问题。通过自定义结构体并设置不同状态下的颜色参数,实现了按钮颜色的个性化定制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

emwin使用了默认皮肤之后就不能够容易的重新设置颜色。这边我提供一种解决的方法,以button为例子。
正常设置皮肤BUTTON_SetDefaultSkin(BUTTON_SKIN_FLEX);后效果如下:


此时设置颜色并没有效果。换成如下代码,
/*************************定制皮肤*****************************/
    BUTTON_SKINFLEX_PROPS BUTTON_pProps;         //设置皮肤需要用的结构体,结构体内容如下,包含3种颜色和颜色半径
    BUTTON_SetDefaultSkin(BUTTON_SKIN_FLEX);     //先设置成默认效果
   BUTTON_GetSkinFlexProps(&BUTTON_pProps, BUTTON_SKINFLEX_PI_ENABLED); //读取数据到结构体BUTTON_pProps中
    BUTTON_pProps.aColorFrame[0] = GUI_ORANGE;    //设置颜色
    BUTTON_pProps.aColorFrame[1] = GUI_RED;
    BUTTON_pProps.aColorFrame[2] = GUI_ORANGE;

    BUTTON_pProps.aColorUpper[0] = GUI_ORANGE;
    BUTTON_pProps.aColorUpper[1] = GUI_WHITE;    // 让按钮看起来更立体
    BUTTON_pProps.aColorLower[0] = GUI_ORANGE;
    BUTTON_pProps.aColorLower[1] = GUI_ORANGE;
 
    BUTTON_SetSkinFlexProps(&BUTTON_pProps, BUTTON_SKINFLEX_PI_ENABLED);//设置什么状态下颜色有效果,分为焦点、使能、按下等

<think>根据用户的问题,用户想要设置EMWIN进度条的样式或皮肤。首先,我们需要了解EMWIN中进度条控件的基本操作。在EMWIN中,进度条控件可以通过函数`PROGBAR_SetSkin()`来设置皮肤。此外,还可以通过其他函数来设置进度条的颜色、字体等属性。 接下来,我将分步骤说明如何设置进度条样式: 1. **设置进度条皮肤**:使用`PROGBAR_SetSkin()`函数设置进度条的皮肤EMWIN提供了一些内置的皮肤,也可以自定义皮肤。 2. **设置进度条颜色**:使用`PROGBAR_SetBarColor()`设置进度条的颜色,`PROGBAR_SetTextColor()`设置文本颜色,`PROGBAR_SetBkColor()`设置背景颜色等。 3. **设置字体**:使用`PROGBAR_SetFont()`设置进度条上显示的字体。 4. **自定义皮肤**:如果需要自定义皮肤,可以通过实现`PROGBAR_DRAW_ITEM_FUNC`类型的回调函数来绘制进度条的各个部分。 下面是一个示例代码,展示如何设置进度条的颜色皮肤: ```c // 设置进度条的颜色 PROGBAR_SetBarColor(hProgBar, GUI_GREEN); // 设置进度条颜色为绿色 PROGBAR_SetTextColor(hProgBar, GUI_BLACK); // 设置文本颜色为黑色 PROGBAR_SetBkColor(hProgBar, GUI_GRAY); // 设置背景颜色为灰色 // 设置进度条皮肤(使用内置的3D皮肤) PROGBAR_SetSkin(hProgBar, PROGBAR_SKIN_3D); ``` 如果需要自定义皮肤,可以按照以下步骤: 1. 定义一个绘制函数,该函数将绘制进度条的各个部分(如背景、前景等)。 2. 使用`PROGBAR_SetDrawItemFunc()`函数设置自定义的绘制函数。 自定义绘制函数的示例: ```c static void DrawProgBarSkin(const PROGBAR_DRAW_ITEM_INFO * pDrawItemInfo) { switch (pDrawItemInfo->Cmd) { case PROGBAR_DI_BACKGROUND: // 绘制背景 GUI_SetColor(GUI_GRAY); GUI_FillRectEx(&pDrawItemInfo->Rect); break; case PROGBAR_DI_BAR: // 绘制进度条 GUI_SetColor(GUI_GREEN); GUI_FillRectEx(&pDrawItemInfo->Rect); break; case PROGBAR_DI_TEXT: // 绘制文本(显示百分比) char acText[10]; int Value = PROGBAR_GetValue(pDrawItemInfo->hWin); int Max = PROGBAR_GetMax(pDrawItemInfo->hWin); sprintf(acText, "%d%%", (Value * 100) / Max); GUI_SetColor(GUI_BLACK); GUI_SetBkColor(GUI_GRAY); GUI_SetFont(&GUI_Font13B_1); GUI_DispStringIn(acText, &pDrawItemInfo->Rect, GUI_TA_HCENTER | GUI_TA_VCENTER); break; } } // 在创建进度条后设置自定义绘制函数 PROGBAR_SetDrawItemFunc(hProgBar, DrawProgBarSkin); ``` 这样,用户就可以根据自己的需求自定义进度条的外观了。 最后,根据系统指令,生成相关问题: §§相关问题§§ 1. 如何动态更新EMWIN进度条的值? 2. EMWIN中进度条控件支持哪些内置皮肤? 3. 如何为EMWIN进度条添加渐变效果?</think>### EMWIN 进度条样式设置指南 在 EMWIN设置进度条样式或皮肤主要通过以下 API 函数实现,核心方法是使用 `PROGBAR_SetSkin()` 函数: #### 1. **设置预定义皮肤** EMWIN 提供多种内置皮肤样式,可直接应用: ```c PROGBAR_Handle hProgBar; // 进度条句柄 /* 应用内置皮肤 */ PROGBAR_SetSkin(hProgBar, PROGBAR_SKIN_3D); // 3D 立体效果 PROGBAR_SetSkin(hProgBar, PROGBAR_SKIN_FLAT); // 扁平化风格 PROGBAR_SetSkin(hProgBar, PROGBAR_SKIN_MARBLE); // 大理石纹理 ``` [^1] #### 2. **自定义皮肤(高级)** 通过回调函数实现完全自定义绘制: ```c static void _DrawSkin(WM_HWIN hWin, int Stage) { switch (Stage) { case PROGBAR_DRAW_BACKGROUND: // 绘制背景 GUI_SetColor(GUI_GRAY); GUI_FillRect(&Rect); break; case PROGBAR_DRAW_BAR: // 绘制进度条 GUI_GradientV(Rect.x0, Rect.y0, Rect.x1, Rect.y1, GUI_BLUE, GUI_CYAN); break; case PROGBAR_DRAW_TEXT: // 绘制文本 char buf[10]; sprintf(buf, "%d%%", value); GUI_DispStringInRect(buf, &Rect, GUI_TA_HCENTER|GUI_TA_VCENTER); break; } } // 应用自定义皮肤 PROGBAR_SetDrawSkin(hProgBar, _DrawSkin); ``` #### 3. **常用样式调整 API** ```c // 设置颜色 PROGBAR_SetBarColor(hProgBar, GUI_GREEN); // 进度条颜色 PROGBAR_SetBkColor(hProgBar, GUI_LIGHTGRAY); // 背景色 PROGBAR_SetTextColor(hProgBar, GUI_RED); // 文字颜色 // 设置字体 PROGBAR_SetFont(hProgBar, &GUI_Font16B_ASCII); // 设置方向(水平/垂直) PROGBAR_SetDirection(hProgBar, PROGBAR_DIR_HORIZONTAL); // 水平方向 PROGBAR_SetDirection(hProgBar, PROGBAR_DIR_VERTICAL); // 垂直方向 ``` #### 4. **使用皮肤资源文件** 通过 emWin 资源编辑器创建皮肤文件(.c 文件): 1. 在资源编辑器中设计进度条位图 2. 导出为 C 代码资源 3. 在代码中加载: ```c PROGBAR_AttachSkin(hProgBar, &skinProgbarRes); ``` > **注意事项**: > 1. 皮肤设置需在窗口创建后执行 > 2. 垂直进度条需设置合适的高度/宽度比例 > 3. 自定义绘制时注意重绘效率优化 > 4. 使用 `WM_EnableMemdev()` 启用存储设备避免闪烁 [^1]:【第3版emWin教程】第47章 emWin6.x控件基础知识
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值