瑞金网站建设推广,百度收录提交入口,广州市律师网站建设价格,成都培训网站建设一、需求
想要绘制如下所示的斜体字#xff0c;45度 二、分析思路
Graphics类有个 RotateTransform方法#xff0c;可以传入任意角度的值来旋转画板。但是这个方法的旋转中心是画板的左上角#xff0c;所以直接单单用这个方法不能满足我们的需求。此外#xff0c; G…一、需求
想要绘制如下所示的斜体字45度 二、分析思路
Graphics类有个 RotateTransform方法可以传入任意角度的值来旋转画板。但是这个方法的旋转中心是画板的左上角所以直接单单用这个方法不能满足我们的需求。此外 Graphics类还有个 TranslateTransform方法可以改变坐标的原点而且这个方法是沿着矩形的x,y轴平移的即就算图片旋转了一定的角度后再调用 translatetransform 方法它还是沿着x,y轴平移。于是通过以下三个步骤即可实现图片中心旋转。 旋转前字体区域顶部为AB旋转后字体区域顶部为CB文本AB旋转后为CB1、将原点平移到C点2、绕着新原点C点逆时针旋转45°3、在新原点C处绘制字符4、取消旋转已知ABBCwidth,∠ABC45°B坐标为(Xb,Yb),原点在左上角求C坐标。CD BD BC ÷ √2 width ÷ √2Xc Xb - BD Xb - width ÷ √2 Yc Yb CD Yb width ÷ √2 三、代码
#define TOP_EMPTY_HEIGHT 10
#define LEFT_YRULE_WDITH 50 //左侧Y轴间隔
#define RIGHT_YRULE_WDITH 15//右侧Y轴间隔
#define BOTTOM_XRULE_HEIGHT 80 //底部X轴的高度
#define TEXT_RECT_WIDTH 55 //文字区域宽度
#define TEXT_RECT_HEIGHT 13 //文字区域高度DoPaint(HDC hDC, const RECT rcPaint)
{RECT rectFrame m_rcItem;rectFrame.top TOP_EMPTY_HEIGHT;rectFrame.left LEFT_YRULE_WDITH;rectFrame.right - RIGHT_YRULE_WDITH;rectFrame.bottom - BOTTOM_XRULE_HEIGHT;Gdiplus::Graphics graphics(hDC);int nFont 12; //字体大小DWORD dwTxtColor 0xFF999999;//文字颜色wstring strText L软件服务;RECT rcText;//原字体区域rcText.right rectFrame.left 10;rcText.left rcText.right - TEXT_RECT_WIDTH ;//---------------------------------------------字体样式---------------------------------------//字体Gdiplus::FontFamily fontFamily(L微软雅黑);Gdiplus::Font font(fontFamily, (Gdiplus::REAL)nFont, Gdiplus::FontStyleRegular, Gdiplus::UnitPixel);//画刷Gdiplus::SolidBrush brush(dwTxtColor );//字符格式Gdiplus::StringFormat stringformat;stringformat.SetAlignment(Gdiplus::StringAlignmentFar);// 对应右对齐DT_RIGHTstringformat.SetLineAlignment(Gdiplus::StringAlignmentCenter);//对应垂直居中DT_VCENTERstringformat.SetTrimming(Gdiplus::StringTrimmingEllipsisCharacter);//句末显示不完是否使用...代替DT_END_ELLIPSISstringformat.SetFormatFlags(Gdiplus::StringFormatFlagsNoWrap);//对应单行显示DT_SINGLELINE//---------------------------------------------绘制不旋转的字符---------------------------------------Gdiplus::RectF rcfText1(rcText.left, rcText.top, TEXT_RECT_WIDTH, TEXT_RECT_HEIGHT);graphics.DrawString(strText.c_str(), -1, font, rcfText1, stringformat, brush);//----------------------------------------------绘制旋转字符---------------------------------------//translatetransform平移 rotatetransform旋转//1、把画板(graphics对象)原点平移到位置(x, y)float x rcText.right - TEXT_RECT_WIDTH / sqrt(2);float y rcText.top TEXT_RECT_WIDTH / sqrt(2);graphics.TranslateTransform(x, y);//2、绕新原点(x, y)逆时针旋转画板45度graphics.RotateTransform(-45);//3、在新原点(x, y)处绘制字符Gdiplus::RectF rcfText2(0, 0, TEXT_RECT_WIDTH , TEXT_RECT_HEIGHT );graphics.DrawString(strText.c_str(),-1, font, rcfText2, stringformat, brush);//4、取消旋转graphics.ResetTransform();
} 参考
1、C# 使用 GDI 实现添加中心旋转(任意角度)的文字_C#_服务器之家
2、GDI 中图像矩阵变换_litanyuan的博客-CSDN博客
3、https://greambwang.blog.csdn.net/article/details/98651600
4、关于Duilib中字体穿透变暗的几种可能性解决方案_8687137的技术博客_51CTO博客