你的浏览器版本过低,可能导致网站不能正常访问!为了你能正常使用网站功能,请使用这些浏览器。
大器所成 发表于 2014-12-12 21:02 既然没人好意思说上注释,那我说吧,求注释!!!!
巅峰残狼 发表于 2014-12-12 15:03 嗯,很不错,谢谢分享
lovewyufeng 发表于 2014-12-13 22:52 写了两次 提交之后 代码就只剩下一点点了!!!真心不想再写了 版主能解释一下么 ...
意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器
已注释 欢迎顶贴!
#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);
写了两次 提交之后 代码就只剩下一点点了!!!真心不想再写了 版主能解释一下么
写了两次 提交之后 代码就只剩下一点点了!!!真心不想再写了 版主能解释一下么
明天问一下管理员,这个我也看不到