画布控件
继承基础控件。
画布控件回调函数
/**
* @brief 画布控件回调函数
*
* @param [in] pControl 画布控件指针
* @param [in] iMsg TOUCH MSG: MSG_TOUCH_DOWN/MSG_TOUCH_UP/MSG_TOUCH_MOVE
* @param [in] wParam Touch point pack value, using GetPoint(wParam)-> POINT struct
* @param [in] lParam No use
* @param [in] dwTime Timestamp
* @return 无返回值
*
* @details More details
*/
INT XXXCtrl::XXX_OnCanvasEvent(InoCanvas *pControl, UINT iMsg, WPARAM wParam, LPARAM lParam, DWORD dwTime)
例如:在画布中依据触摸点画蓝色线
STATIC POINT lastpt = {-1,-1};
VOID ResetTouchPt()
{
lastpt.x = -1;
lastpt.y = -1;
}
INT XXXCtrl::XXX_OnCanvasEvent(InoCanvas *pControl, UINT iMsg, WPARAM wParam, LPARAM lParam, DWORD dwTime)
{
if (lastpt.x == -1)
{
lastpt = GetPoint(wParam);
}
pControl->DrawLine(lastpt, GetPoint(wParam), COLOR_BLUE);
if (iMsg == MSG_TOUCH_UP)
{
ResetTouchPt();
}
else
{
lastpt = GetPoint(wParam);
}
return ERR_OK;
}
清除画布数据
/**
* @brief 用户清除画布数据
*
* @param [in] void
* @return 无返回值
*
* @details More details
*/
VOID ClearCanvas()
例如:在按键事件中清除画布数据,注意需要自行添加刷新函数
VOID XXXCtrl::XXX_OnClick(InoControl *pControl, WPARAM wParam, LPARAM lParam)
{
CLog::LogU("[%s:%s] Name:%s \n", __FILE__, __FUNCTION__, pControl->GetName().c_str());
mpCanvas1->ClearCanvas();
mpCanvas1->AddRefreshCtrl();
}
用户画像素点
/**
* @brief 用户画像素点
*
* @param [in] stPt1 点坐标(x,y),相对于画布左上角的偏移(x,y)
* @param [in] iColor 点颜色RGB值
* @return 无返回值
*
* @details More details
*/
VOID DrawPixel(POINT stPt1,UINT32 iColor = COLOR_RED);
例如:在画布坐标(50,50)画蓝色点
POINT pt={50,50};
DrawPixel(pt,COLOR_BLUE);
用户画线
/**
* @brief 用户画线
*
* @param [in] stPt1 点坐标(x,y),相对于画布左上角的偏移(x,y)
* @param [in] stPt2 点坐标(x,y),相对于画布左上角的偏移(x,y)
* @param [in] iColor 线颜色RGB值
* @param [in] iWidth 线的宽度(Unit:pixel)
* @return 无返回值
*
* @details More details
*/
VOID DrawLine(POINT stPt1, POINT stPt2, UINT32 iColor = COLOR_RED, UINT8 iWidth = 1);
例如:在画布坐标(50,50),(100,100)画蓝色线
POINT pt1={50,50};
POINT pt2={100,100};
DrawPixel(pt1,pt2,COLOR_BLUE);
用户画矩形
/**
* @brief 用户画矩形
*
* @param [in] stRect 矩形坐标(x,y,w,h),相对于画布左上角的偏移(x,y)
* @param [in] iColor 矩形线颜色RGB值
* @param [in] iWidth 矩形线的宽度(Unit:pixel)
* @return 无返回值
*
* @details More details
*/
VOID DrawRect(RECT stRect, DWORD iColor = COLOR_RED ,UINT8 iWidth = 1);
例如:在画布坐标(50,50)画宽100高100的蓝色矩形
RECT stRect={50,50,100,100};
DrawRect(stRect,COLOR_BLUE);
用户画三角形
/**
* @brief 用户画三角形
*
* @param [in] stPt1 点坐标(x,y),相对于画布左上角的偏移(x,y)
* @param [in] stPt2 点坐标(x,y),相对于画布左上角的偏移(x,y)
* @param [in] stPt3 点坐标(x,y),相对于画布左上角的偏移(x,y)
* @param [in] iColor 矩形线颜色RGB值
* @param [in] iWidth 矩形线的宽度(Unit:pixel)
* @return 无返回值
*
* @details More details
*/
VOID DrawTrigon(POINT stPt1, POINT stPt2, POINT stPt3, DWORD iColor= COLOR_RED,UINT8 iWidth = 1);
例如:在画布坐标1(50,50),坐标2(25,100),坐标3(75,100)画蓝色三角形 POINT pt1={50,50};
POINT pt2={25,100};
POINT pt3={75,100};
DrawTrigon(stPt1,stPt2,stPt3,COLOR_BLUE);
用户画曲线
/**
* @brief 用户画曲线
*
* @param [in] vX 曲线X顶点数组
* @param [in] vY 曲线Y顶点数组
* @param [in] iCnt 曲线顶点个数
* @param [in] iColor 曲线颜色RGB值
* @param [in] iWidth 曲线的宽度(Unit:pixel)
* @param [in] iStep 曲线点插值点数
* @return 无返回值
*
* @details More details
*/
VOID DrawCurve(DOUBLE *vX, DOUBLE *vY, INT iCnt, DWORD iColor= COLOR_RED,UINT8 iWidth = 1, INT iStep = 4);
例如:在画布坐标1(50,50),坐标2(25,100),坐标3(75,100)画蓝色曲线 DOUBLE vX[]={50,25,75};
DOUBLE vY[]={50,100,100};
DrawCurve(vX,vY,3,COLOR_BLUE);
用户画多边形
/**
* @brief 用户画多边形
*
* @param [in] vX 曲线X顶点数组
* @param [in] vY 曲线Y顶点数组
* @param [in] iCnt 曲线顶点个数
* @param [in] iColor 曲线颜色RGB值
* @param [in] iWidth 曲线的宽度(Unit:pixel)
* @return 无返回值
*
* @details More details
*/
VOID DrawPolygon(SINT16 *vX, SINT16 *vY, INT iCnt, DWORD iColor = COLOR_RED,UINT8 iWidth = 1);
例如:在画布坐标1(50,50),坐标2(25,100),坐标3(75,100),坐标4(100,50),画蓝色多边形 DOUBLE vX[]={50,25,75,100};
DOUBLE vY[]={50,100,100,50};
DrawPolygon(vX,vY,4,COLOR_BLUE);
用户画圆弧
/**
* @brief 用户画圆弧
*
* @param [in] iCx 圆弧中心点X坐标值
* @param [in] iCy 圆弧中心点Y坐标值
* @param [in] iRadius 圆弧半径长度
* @param [in] iSAngle 圆弧起始角度
* @param [in] iEAngle 圆弧结束角度
* @param [in] iColor 圆弧颜色RGB值
* @param [in] iWidth 圆弧的宽度(Unit:pixel)
* @return 无返回值
*
* @details More details
*/
VOID DrawArc(INT iCx, INT iCy,INT iRadius, INT iSAngle, INT iEAngle, DWORD iColor = COLOR_RED ,UINT8 iWidth = 1);
例如:在画布中心点坐标(100,100),画半径为50且开始角为0,结束角为30的蓝色圆弧
DrawArc(100,100,50,0,30,COLOR_BLUE);
用户画圆
/**
* @brief 用户画圆
*
* @param [in] iCx 圆中心点X坐标值
* @param [in] iCy 圆中心点Y坐标值
* @param [in] iRadius 圆半径长度
* @param [in] iColor 圆颜色RGB值
* @param [in] iWidth 圆的宽度(Unit:pixel)
* @return 无返回值
*
* @details More details
*/
VOID DrawCircle(INT iCx, INT iCy, INT iRadius ,DWORD iColor= COLOR_RED ,UINT8 iWidth = 1);
例如:在画布中心点坐标(100,100),画半径为50的蓝色圆
DrawCircle(100,100,50,COLOR_BLUE);
用户画圆饼
/**
* @brief 用户画圆饼
*
* @param [in] iCx 圆饼中心点X坐标值
* @param [in] iCy 圆饼中心点Y坐标值
* @param [in] iRadius 圆饼半径长度
* @param [in] iSAngle 圆弧起始角度
* @param [in] iEAngle 圆弧结束角度
* @param [in] iColor 圆饼颜色RGB值
* @param [in] iWidth 圆饼的宽度(Unit:pixel)
* @return 无返回值
*
* @details More details
*/
VOID DrawPie(INT iCx, INT iCy,INT iRadius, INT iSAngle, INT iEAngle,DWORD iColor= COLOR_RED,UINT8 iWidth = 1);
例如:在画布中心点坐标(100,100),画半径为50且开始角为0,结束角为30的蓝色圆饼
DrawPie(100,100,50,0,30,COLOR_BLUE);
用户画图片
/**
* @brief 用户画图片
*
* @param [in] strImage 图片的路径
* @param [in] stOffPt1 图片显示偏移坐标(x,y)
* @param [in] iImgAlign 图片的对齐方式
* @param [in] iBlendMode 图片的混合模式,使用默认值即可
* @return 返回值真:TRUE, 返回值假:FALSE
*
* @details More details
*/
BOOL DrawImage( STRING strImage, POINT stOffPt1 = {0,0}, INT iImgAlign = ALIGN_HVCENTER, INT iBlendMode = RD_BLENDMODE_BLEND);
例如:在画布坐标(20,20)画资源图片ID_IMG_GOLD_6
POINT ptoff={20,20}; DrawImage(mpActivity->GetResById(ID_IMG_GOLD_6),ptoff);
初始化画布待旋转/缩放的图片资源
/**
* @brief 初始化画布待旋转/缩放图片
*
* @param [in] strImage 图片资源Path
* @return 返回值真:TRUE, 返回值假:FALSE
*
* @details More details
*/
BOOL InitalRotoZoomImage(STRING strImage);
例如:初始化mpCanvas1画布的旋转/缩放图片资源(时钟分针图片ID_IMG_POINTER_M)
mpCanvas1->InitalRotoZoomImage(mpActivity->GetResById(ID_IMG_POINTER_M));
旋转/缩放处理画布图片(参考初始化画布待旋转/缩放的图片资源)
/**
* @brief 旋转/缩放处理画布图片(布图片需要使用InitalRotoZoomImage初始化)
*
* @param [in] stCasCPt 画布旋转中心点
* @param [in] stImgRPt 图片旋转点
* @param [in] fRotoAngle 图片的旋转角度
* @param [in] fZoom 图片缩放倍数
* @param [in] iSmooth 图片的抗锯齿模式开关,使用默认值即可
* @param [in] iBlendMode 图片的混合模式
* @return 返回值真:TRUE, 返回值假:FALSE
*
* @details More details
*/
BOOL RotoZoomCanvas(POINT stCasCPt,POINT stImgRPt,DOUBLE fRotoAngle, DOUBLE fZoom = 1.0f, INT iSmooth = RD_SMOOTHING_ON, INT iImgInitAngle = -90);
例如:旋转mpCanvas1画布30度,画布旋转中心点为(200,200),图片旋转点为(6,168);
mpCanvas1->RotoZoomCanvas({200, 200}, {6, 168}, (DOUBLE)30);
释放画布的旋转/缩放图片资源
/**
* @brief 释放画布的旋转/缩放图片资源
*
* @param [in] VOID
* @return 返回值真:TRUE, 返回值假:FALSE
*
* @details More details
*/
BOOL ReleaseRotoZoomImage();
例如:释放mpCanvas1画布的旋转/缩放图片资源
mpCanvas1->ReleaseRotoZoomImage();