网站修改图片链接,seo关键词推广案例,娱乐网站建设ppt模板,网站开发培训费多少钱本篇是图形函数学习的最后一篇#xff0c;相关内容暂告一段落。 在图形界面输出文字#xff0c;涉及文字字体、大小、颜色、背景、显示等问题#xff0c;完成这些需要系列函数的支持。下面做简要介绍。 一、输出文本函数 原型#xff1a;virtual BOOL te… 本篇是图形函数学习的最后一篇相关内容暂告一段落。 在图形界面输出文字涉及文字字体、大小、颜色、背景、显示等问题完成这些需要系列函数的支持。下面做简要介绍。 一、输出文本函数 原型virtual BOOL textOut(int x, int y, LPCTSTR lpszString, int nCount); BOOL TextOut(int x, int y, const CString string); 参数(x,y)输出文本起点坐标 lpszString 字符串指针 int nCount 字符串长度LPCTSTR类型获得字符串长度可用CString(str).GetLength() string 指向CString对象的指针 返回值显示成功返回非0数字失败返回0。 说明 a.这个函数属于CDC类成员函数使用时需要CDC类对象指针调用。 b.关于文字字符串起始位置若把字符串看做矩形的话起始位置是左上角。 c.如果直接调用这个函数输出文字则字体、大小、颜色等使用的都是缺省设置如需改变这些设置需要使用下面这些函数且需要在输出文字前进行设置。 d.关于参数中的字符串多字符集情况下可以使用char*、LPCTSTR类型声明对象并用直接赋值也可以使用CString声明对象并用对象调用其成员函数Format完成赋值UNICODE情况下可以使用LPCTSTR类型声明对象并用赋值也可以使用CString声明对象并用对象调用其成员函数Format完成赋值但在字符串引号前要加L。 二、定义字体函数 原型BOOL CreateFontIndirect(const LOGFONT* lpLogFont); 参数lpLogFont是字体属性结构体LOGFONT指针该结构体的使用见下。 返回值定义字体成功返回非0数否则返回0。 说明 a.这个函数时CFont的成员函数使用时需要CFont对象指针调用。 b.字体属性结构体LOGFONT常用属性 lfHeight; //字体高度、LONG类型 lfWidth; //字体宽度、LONG类型取值0时系统自动与lfHeight匹配 lfEscapement; //倾角、LONG类型文本行与X轴夹角11/10度顺时针方向为正 lfOrientation; //文本基准线、LONG类型 lfWeight; //字体笔画粗细、LONG类型取值0-900 lfItalic; //斜体标志、BYTE类型0标准、1倾斜 lfUnderline; //下划线、BYTE类型 lfStrikeOut; //删除线、BYTE类型 lfCharSet; //字符集、BYTE类型一般取值GB2312_CHARSET也可使用DEFAULT_CHARSET lfFaceName[LF_FACESIZE];//字体名、TCHAR类型、如宋体、仿宋等 c.声明LOGFONT结构体对象后一般将其用memset函数全部初始化成0缺省值然后再对需要的属性进行赋值其它的就使用缺省值。为lfFaceName赋值时不能使用“”赋值若是UNICODE模式需要使用wcscpy_s函数赋值多字符集模式使用strcpy_s函数赋值。 d.调用CreateFontIndirect生成的字体后也需要调用SelectObject函数选入CDC并用CFont*接收其返回值用于恢复缺省字体。和使用画刷相似 三、设置文字颜色函数 原型virtual COLORREF SetTextColor (COLORREF color); 参数color COLORREF类型的颜色值可直接使用16进制、也可调用RGB函数 返回值返回原来文本颜色的RGB值设置失败返回CLR_INVALID0xFFFFFFFF 说明 a.该函数是CDC类的成员函数使用时需CDC类对象或指针调用。 b.通过该函数进行文字颜色的设置应接收其返回值并在完成文字显示后恢复缺省设置。 四、设置文字背景颜色函数 原型virtual COLORREF SetBkColor(COLORREF color); 参数color为COLORREF类型的颜色值 返回值原有的背景色设置失败返回CLR_INVALID0xFFFFFFFF 说明 a.这个函数是CDC类的成员函数使用是需CDC类对象或指针调用。 b.所谓背景色仅是显示文字的背景色不涉及其它。 五、设置背景模式函数 原型int SetBkMode(int nBkMode); 参数nBkMode有两个取值OPAQUE值2表示背景颜色设置生效默认设置不调用这个函数的效果TRANSPARENT值1表示背景透明背景颜色不改变。 返回返回原背景模式。 说明这个函数的TRANSPARENT模式在实际使用时更有用处。也就是当我们设置了字体颜色背景颜色随已有图形颜色时就没必要在设置背景颜色只要把背景模式设置为TRANSPARENT即可。 六、举例程序 使用红(0000FF)、橙(007FFF)、黄(00FFFF)、绿(00FF00)、青(FFFF00)、蓝(FF0000)、紫(FF008B)、黑(000000)八种颜色在自定义坐标系中绘制8个填充扇形每个扇形占半个象限在扇形中用文字标出颜色名。 步骤一在CMFC2DGraphView.h中定义一个全局宏代码
#define PI 3.14159 步骤二在CMFC2DGraphView.h中找到CMFC2DGraphView类在类内public下声明自定义画扇形函数代码 public:
//声明自定义画扇形函数void myPie(double startRad, double endRad, COLORREF fillColor, LPCTSTR str, COLORREF strColor);//参数说明startRad-扇形起点弧度、endRad-终点弧度、fillColor-填充颜色、// str-标识文字、strColor-表示文字颜色 步骤三在CMFC2DGraphView.cpp中实现myPie函数代码
//实现自定义画扇形函数
void CMFC2DGraphView::myPie(double startRad, double endRad, COLORREF fillColor, LPCTSTR str, COLORREF strColor)
{//自定义坐标系CRect rect;GetClientRect(rect);CDC* pDC;pDC GetDC();/*做一点说明GetDC()函数是CWnd类成员函数使用时需要CWind类对象或指针调用但由于我们是在视图类中作图而视图类的基类就是CWnd类所以使用this指针就可以调用而this指针可以省略所以这个函数在视图类中可以直接使用就像全局函数一样。*/pDC-SetMapMode(MM_ANISOTROPIC); pDC-SetWindowExt(rect.Width(), rect.Height()); pDC-SetViewportExt(rect.Width(), -rect.Height());pDC-SetViewportOrg(rect.Width() / 2, rect.Height() / 2);rect.OffsetRect(-rect.Width() / 2, -rect.Height() / 2);//以当前窗口宽、高最小者的35%为扇形半径int r min(rect.Width(), rect.Height()) * 0.35;//定义扇形填充颜色画刷、同颜色画笔并选入CDCCBrush brush(fillColor);CBrush* oldBrush pDC-SelectObject(brush);CPen pen(PS_SOLID, 1, fillColor);CPen* oldPenpDC-SelectObject(pen);//绘制扇形pDC-Pie(-r,r,r,-r, r*cos(startRad),r*sin(startRad), r * cos(endRad), r * sin(endRad));//恢复缺省画刷、画笔pDC-SelectObject(oldBrush);pDC-SelectObject(oldPen);//定义字体、字体颜色、背景模式并选入CDCLOGFONT logfont; //字体属性结构体设置memset(logfont, 0, sizeof(logfont));logfont.lfCharSet DEFAULT_CHARSET;wcscpy_s(logfont.lfFaceName,L仿宋);logfont.lfHeight 35;logfont.lfEscapement (startRad (endRad - startRad) / 2) * (-180) / PI;CFont cfont; //字体生成cfont.CreateFontIndirectW(logfont);CFont* oldFontpDC-SelectObject(cfont);COLORREF oldColor pDC-SetTextColor(strColor); //字体颜色设置pDC-SetBkMode(TRANSPARENT);//显示文字pDC-TextOutW(r * 0.7 * cos(startRad (endRad - startRad) / 2)-18,r * 0.7 * sin(startRad (endRad - startRad) / 2)18,str, CString(str).GetLength());//恢复字体、字体颜色、背景模式缺省设置pDC-SelectObject(oldFont);pDC-SetTextColor(oldColor);pDC-SetBkColor(OPAQUE);ReleaseDC(pDC); //前面用GetDC获取了pDC这里要释放函数性质同GetDC
}
步骤四在OnDraw函数中调用myPie函数画出要求的扇形代码 myPie(0 * PI / 4, 1 * PI / 4, 0x0000ff, L红, 0x000000);//填充红、文字黑myPie(1 * PI / 4, 2 * PI / 4, 0x007fff, L橙, 0x8b00ff);//填充橙、文字紫myPie(2 * PI / 4, 3 * PI / 4, 0x00ffff, L黄, 0xff0000);//填充黄、文字蓝myPie(3 * PI / 4, 4 * PI / 4, 0x00ff00, L绿, 0x000000);//填充绿、文字黑myPie(4 * PI / 4, 5 * PI / 4, 0xffff00, L青, 0xff0000);//填充青、文字蓝myPie(5 * PI / 4, 6 * PI / 4, 0xff0000, L蓝, 0x0000ff);//填充青、文字红myPie(6 * PI / 4, 7 * PI / 4, 0xff008B, L紫, 0x00ffff);//填充青、文字黄myPie(7 * PI / 4, 8 * PI / 4, 0x000000, L黑, 0x00ffff);//填充青、文字黄 以上代码也可以写成循环颜色定义成COLORREF数组 七、程序运行效果截图