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

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扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版