你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STEMWIN 自定义控件demo 学习使用官方没有的控件 带注释 精华  

[复制链接]
lovewyufeng 发布时间:2014-12-12 14:50
阅读主题, 点击返回1楼
收藏 5 评论35 发布时间:2014-12-12 14:50
35个回答
lovewyufeng 回答时间:2014-12-13 22:21:38
大器所成 发表于 2014-12-12 21:02
既然没人好意思说上注释,那我说吧,求注释!!!!

已注释  欢迎顶贴!
lovewyufeng 回答时间:2014-12-13 22:41:33
察。。。注释完了。。。提交 再查看没有内容了,,,只好返回 重新写注释  累死俺了
lovewyufeng 回答时间:2014-12-13 22:47:04

#include "WM.h"
#include "DIALOG_Intern.h"      /* Req. for Create indirect data structure */
#include "WIDGET.h"
#include <stdint.h>
#include "..\GUI\Include\GRAPH_Private.h"
#define  DEMO_Widget_ID      0x34455854 /* DEMO_Widget */
#define DEMO_Widget_INIT_ID(p) p->DebugId = DEMO_Widget_ID
typedef struct {
    WIDGET Widget;//第一项必须窗口 控件WM管理器使用
    GUI_COLOR aBkColor[2];//根据需要添加  本控件 的两项颜色值   分别为上图的 背景黑色 和白色
    GUI_COLOR RECT_Color;//上图外框的蓝色
    WM_HMEM hpText;//未用到
    WM_HMEM ahDrawObj[1];//未用到
    int size_base;//中间最短一条的长度
    GRAPH_PROPS Props;//盗用其他控件的  颜色, 绘外框的时候使用
    uint16_t Sta_MAX;//控件的最大条数
    uint16_t State;//当前显示的 信息

#if GUI_DEBUG_LEVEL >= GUI_DEBUG_LEVEL_CHECK_ALL
    int DebugId;
#endif  
} DEMO_Widget_Obj;
GUI_HMEM Create_demowidget(int x0, int y0, int xsize, int ysize, WM_HWIN hParent, int WinFlags, int ExFlags, int Id);
void Set_demowidget_Sta(GUI_HMEM hObj,int state);
void Set_demowidget_Sta_MAX(GUI_HMEM hObj,int MAX);
void Set_demowidget_Base(GUI_HMEM hObj,int base);


下面是 .c

#include "demowidget.h"
//这个函数负责显示  控件的外观  主要是调用一下  GUI 2D  绘图函数或者 有必要的话显示文本
void _Paint(DEMO_Widget_Obj *pObj,GUI_HMEM hObj,GUI_RECT * pRectInvalid)
{  
        GUI_RECT RectClient;
        int i,size_x;
        GUI_RECT rClient, rInside,Rect={0,0,0,0},Rect1={0,0,0,0},Rect2={0,0,0,0};
      GUI_GetClientRect(&RectClient);
      rClient = RectClient;
      Rect=rClient;
      GUI_Clear();
      GUI_SetBkColor(pObj->Props.aColor[1]);
      GUI_SetColor(pObj->Props.aColor[2]);

      GUI_DrawRectEx(&Rect);
      GUI__ReduceRect(&Rect, &Rect, 1);
      GUI_DrawRectEx(&Rect);
      Rect=rClient;

      GUI__ReduceRect(&rClient, &rClient, 3);
      LCD_SetBkColor (pObj->aBkColor[0]);
      LCD_SetColor   (pObj->RECT_Color);
      size_x=(rClient.x1-pObj->size_base+1)/2/pObj->Sta_MAX;
      Rect.x0=rClient.x0+pObj->Sta_MAX*size_x;
      Rect.x1=rClient.x1-pObj->Sta_MAX*size_x;
      Rect.y1=(rClient.y1/2)+rClient.y1/(pObj->Sta_MAX*2+1)/2-1;
      Rect.y0=(rClient.y1/2)-rClient.y1/(pObj->Sta_MAX*2+1)/2;
      GUI__ReduceRect(&Rect1,&Rect,0);
      GUI__ReduceRect(&Rect2,&Rect,0);
      GUI_DrawRectEx(&Rect);
      for(i=0;i<pObj->Sta_MAX;i++)
      {
          Rect1.x0+=-size_x;
          Rect1.x1+=+size_x;
          Rect1.y0+=-rClient.y1/(pObj->Sta_MAX)/2;
          Rect1.y1+=-rClient.y1/(pObj->Sta_MAX)/2;
          Rect2.x0+=-size_x;
          Rect2.x1+=+size_x;
          Rect2.y0+=+rClient.y1/(pObj->Sta_MAX)/2;
          Rect2.y1+=+rClient.y1/(pObj->Sta_MAX)/2;
          GUI_DrawRectEx(&Rect1);
          GUI_DrawRectEx(&Rect2);
      }
      LCD_SetColor(GUI_GREEN);
      LCD_SetBkColor (pObj->aBkColor[0]);
      GUI__ReduceRect(&Rect1,&Rect,1);
      GUI__ReduceRect(&Rect2,&Rect,1);
      GUI_FillRectEx(&Rect1);
      for(i=0;i<pObj->State;i++)
      {
          LCD_SetColor((255-((255/pObj->Sta_MAX)*i)<<8)|((255/pObj->Sta_MAX*i)));
          Rect1.x0+=-size_x;
          Rect1.x1+=+size_x;
          Rect1.y0+=-rClient.y1/(pObj->Sta_MAX)/2;
          Rect1.y1+=-rClient.y1/(pObj->Sta_MAX)/2;
          Rect2.x0+=-size_x;
          Rect2.x1+=+size_x;
          Rect2.y0+=+rClient.y1/(pObj->Sta_MAX)/2;
          Rect2.y1+=+rClient.y1/(pObj->Sta_MAX)/2;
          GUI_FillRectEx(&Rect1);
          GUI_FillRectEx(&Rect2);
      }
      LCD_SetColor(pObj->aBkColor[1]);
      for(;i<pObj->Sta_MAX;i++)
      {
          Rect1.x0+=-size_x;
          Rect1.x1+=+size_x;
          Rect1.y0+=-rClient.y1/(pObj->Sta_MAX)/2;
          Rect1.y1+=-rClient.y1/(pObj->Sta_MAX)/2;
          Rect2.x0+=-size_x;
          Rect2.x1+=+size_x;
          Rect2.y0+=+rClient.y1/(pObj->Sta_MAX)/2;
          Rect2.y1+=+rClient.y1/(pObj->Sta_MAX)/2;
          GUI_FillRectEx(&Rect1);
          GUI_FillRectEx(&Rect2);
      }
}
static void _Delete(DEMO_Widget_Obj* pObj) {
    GUI_ALLOC_FreePtrArray(pObj->ahDrawObj, GUI_COUNTOF(pObj->ahDrawObj));
}

void DEMO_Widget_callback(WM_MESSAGE*pMsg)
{
    GUI_HMEM hObj=pMsg->hWin;
    DEMO_Widget_Obj * pObj;
    if (WIDGET_HandleActive(hObj, pMsg) == 0) {
        return;
    }
     pObj= (DEMO_Widget_Obj *)GUI_ALLOC_h2p(hObj);

     switch(pMsg->MsgId)
     {
         case WM_PAINT://响应重绘命令,显示自己 WM管理器在需要显示的时候自动发送。
             _Paint(pObj, hObj,(GUI_RECT*)pMsg->Data.p);
lovewyufeng 回答时间:2014-12-13 22:50:49
QQ截图20141213224901.png

写了两次  提交之后  代码就只剩下一点点了!!!真心不想再写了  版主能解释一下么
lovewyufeng 回答时间:2014-12-13 22:52:46
巅峰残狼 发表于 2014-12-12 15:03
嗯,很不错,谢谢分享


   QQ截图20141213224901.png

写了两次  提交之后  代码就只剩下一点点了!!!真心不想再写了  版主能解释一下么
lovewyufeng 回答时间:2014-12-13 23:03:04

  1.              return;
  2.          case WM_DELETE:
  3.              _Delete(pObj);
  4.              break;       /* No return here ... WM_DefaultProc needs to be called */
复制代码


巅峰残狼 回答时间:2014-12-14 16:28:56
lovewyufeng 发表于 2014-12-13 22:52
写了两次  提交之后  代码就只剩下一点点了!!!真心不想再写了  版主能解释一下么 ...

明天问一下管理员,这个我也看不到
adersonl 回答时间:2014-12-14 20:43:09
MARK下,反正我也是要用到,时间的问题
╄风、吹不散 回答时间:2015-1-7 09:27:13
顶一下、、、、、、、、、、、
流浪的方丈2015 回答时间:2015-1-7 12:59:33
学习学习,受教!

所属标签

STM32团队

意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器


最新内容

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版