GDI画笔和CPen
如果需要改变画线方式,需要创建一个GDI画笔,再由CDC::SelectObject选入设备描述表。
CPen类创建GDI画笔
CPen pen(PS_SOLID,RGB(255,0,0));
调用CPen::CreatePen创建GDI画笔
CPen pen;
Pen.CreatePen(PS_SOLID,1,RGB(255,0,0));
向LOGPEN结构中填充画笔参数,调用CPen::CreatePenIndirect生成画笔
CPen pen;
LOGPEN lp;
Lp.lopnStyle=PS_SOLID;
Lp.lopnWidth.x=1;//画笔宽度
Lp.lopnColor=RGB(255,0,0);
Pen.CreatePenIndirect(&lp);
常见画笔样式
PS_SOLID 实线
PS_DASH , PS_DOT ,PS_DASHDOT ,PS_DASHDOTDOT
PS_NULL NULL画笔
用CDC::Ellipse画一个圆,windows会自动用当前选入设备描述表的画笔给圆加边框。可以将NULL画笔选入设备描述表,这样圆就没有可见的边框了。
将笔选入设备描述表就可以使用了
CPen pen(PS_SOLID,10,RGB(255,0,0));
CPen * pOldPen=dc.SelectObject(&pen);
De.Ellipse(0,0,100,100);
GDI画刷和CBrush
默认情况下,CDC输出函数画出的封闭图形填充白色像素点。
通过创建GDI画刷并在画图前将它选入设备描述表可以改变图形的填充色。
画刷有3种基本类型:单色、带阴影线和带图案。
创建画刷
将值传递给CBrush构造函数,创建画刷
CBrush brush(RGB(255,0,0));
//创建一个阴影线画刷
CBrush brush(HS_DIAGCROSS,RGB(255,0,0));
调用CBrush::CreateSolidBrush创建画刷
CBrush brush;
Brush.CreateSolidBrush(RGB(255,0,0));
//创建一个阴影线画刷
Brush.CreateSolidBrush(HS_DIAGCROSS,RGB(255,0,0));
通过初始化LOGBRUSH并调用创建画刷
绘制五星
void CMfc2View::DrawTri(CDC * MemDC)
{
static POINT apt[5], apt1[5];
int r = 50;      
static POINT point, point1;
point.x = point.y = 100;
point1.x = point1.y =1;
for(int i = 0; i < 5; i++)
{
apt[i].y = (long)(point.y - r * cos(2*3.14159 * 72 * i / 360));
apt[i].x = (long)(point.x + r * sin(2*3.14159 * 72 * i / 360));
}
apt1[0] = apt[0];
apt1[1] = apt[2];
apt1[2] = apt[4];
apt1[3] = apt[1];
apt1[4] = apt[3];
LOGPEN logPen;
logPen.lopnColor = RGB(255,0,0);
logPen.lopnStyle = PS_NULL;
logPen.lopnWidth = point1;
(*MemDC).SelectObject(CreatePenIndirect(&logPen));
(*MemDC).SetPolyFillMode(WINDING);
(*MemDC).SelectObject(CreateSolidBrush(RGB(255,0,0)));
//绘制五角星
(*MemDC).Polygon(apt1, 5);
}
输出字符
右对齐输出
CString str=_T(“Now is the time”);
CSize size=dc.GetTextExtent(str);
dc.SetTextJustification(mWidth-size.cx,3);
dc.TextOut(0,y,str);
旋转文字
void CMfc2View::OnPaint()
{
CPaintDC dc(this); // device context for painting
// TODO: Add your message handler code here
CRect rect;
       GetClientRect(&rect);
       dc.SetViewportOrg(rect.Width()/2,rect.Height()/2);
       dc.SetBkMode(TRANSPARENT);
       for(int i=0;i<3600;i+=150)
       {
              LOGFONT lf;
              ZeroMemory(&lf,sizeof(lf));
              lf.lfHeight=50;
              lf.lfWeight=FW_BOLD;
              lf.lfEscapement=i;
              lf.lfOrientation=i;
              lstrcpy(lf.lfFaceName,_T("Arial"));
              CFont font;
              font.CreateFontIndirect(&lf);
              CFont * pOldFont=dc.SelectObject(&font);
              dc.TextOut(0,0,CString(_T("Hello,MFC")));
              dc.SelectObject(pOldFont);
       }
}
选入备用对象
CGdiObject::CreateStockObject创建
CDC::SelectStockObject选入设备
英寸标尺
void CRulerView::OnPaint()
{
CPaintDC dc(this); // device context for painting
// TODO: Add your message handler code here
dc.SetMapMode(MM_LOENGLISH);//单位0.01in.
dc.SetTextAlign(TA_CENTER|TA_BOTTOM);//对齐方式
dc.SetBkMode(TRANSPARENT);
CBrush brush(RGB(255,255,0));
CBrush * pOldBrush=dc.SelectObject(&brush);
dc.Rectangle(100,-100,1300,-200);
dc.SelectObject(pOldBrush);
for(int i=200;i<1300;i+=100)
{
dc.MoveTo(i,-175);
dc.LineTo(i,-200);
CString str;
str.Format(_T("%d"),(i/100)-1);
dc.TextOut(i,-175,str);
}
for(i=150;i<1300;i+=50)
{
dc.MoveTo(i,-184);
dc.LineTo(i,-200);
}
for(i=125;i<1300;i+=25)
{
dc.MoveTo(i,-192);
dc.LineTo(i,-200);
}
// Do not call CView::OnPaint() for painting messages
}

MFC Windows 程序设计(3)相关推荐

  1. MFC Windows 程序设计[192]之六只眼八卦图按钮组(附源码)

    MFC Windows 程序设计[192]之六只眼八卦图按钮组 程序之美 前言 主体 运行效果 核心代码 逻辑分析 结束语 程序之美 前言 MFC是微软公司提供的一个类库(class librarie ...

  2. MFC Windows 程序设计[253]之美丽的编辑搜索框(附源码)

    MFC Windows 程序设计[253]之美丽的编辑搜索框 程序之美 前言 主体 运行效果 核心代码 逻辑分析 结束语 程序之美 前言 MFC是微软公司提供的一个类库(class libraries ...

  3. MFC Windows 程序设计[323]之噪声特征流显示gribble2(附源码)

    MFC Windows 程序设计[323]之噪声特征流显示gribble2 程序之美 前言 主体 运行效果 核心代码 逻辑分析 结束语 程序之美 前言 MFC是微软公司提供的一个类库(class li ...

  4. MFC Windows 程序设计[五十六]之开启子对话框(附源码)

    MFC Windows 程序设计[五十六]之开启子对话框 程序之美 前言 主体 运行效果 核心代码 逻辑分析 结束语 程序之美 前言 MFC是微软公司提供的一个类库(class libraries), ...

  5. MFC Windows 程序设计[315]之磁盘文件列举器(附源码)

    MFC Windows 程序设计[315]之磁盘文件列举器 程序之美 前言 主体 运行效果 核心代码 逻辑分析 结束语 程序之美 前言 MFC是微软公司提供的一个类库(class libraries) ...

  6. MFC Windows 程序设计[218]之网络打印机(附源码)

    MFC Windows 程序设计[218]之网络打印机 程序之美 前言 主体 运行效果 核心代码 逻辑分析 结束语 程序之美 前言 MFC是微软公司提供的一个类库(class libraries),以 ...

  7. 模式对话框和非模式对话框的区别(出自MFC windows程序设计第二版p370)

    模式对话框和非模式对话框的区别:(出自<MFC windows程序设计>第二版p370) 1.显示模式对话框需要调用CDialog::DoModal,而显示无模式对话框则要调用CDialo ...

  8. MFC Windows 程序设计[325]之表格控件例程(附源码)

    MFC Windows 程序设计[325]之表格控件例程 程序之美 前言 主体 运行效果 核心代码 逻辑分析 结束语 程序之美 前言 MFC是微软公司提供的一个类库(class libraries), ...

  9. MFC Windows 程序设计[六十]之窗口分屏(附源码)

    MFC Windows 程序设计[六十]之窗口分屏 程序之美 前言 主体 运行效果 核心代码 逻辑分析 结束语 程序之美 前言 MFC是微软公司提供的一个类库(class libraries),以C+ ...

  10. MFC Windows 程序设计[195]之最大最小化串连格子(附源码)

    MFC Windows 程序设计[195]之最大最小化串连格子 程序之美 前言 主体 运行效果 核心代码 逻辑分析 结束语 程序之美 前言 MFC是微软公司提供的一个类库(class librarie ...

最新文章

  1. 【web安全】Spring boot heapdump获取敏感信息
  2. 网页按钮跳转位置_RPA工具BizRobo!之运用网页数据处理
  3. windows 10安装gensim、nltk
  4. 如何让你的webapp也能跳窗口搜索
  5. go语言json解析的坑 注意事项
  6. 堆溢出的DWORD Shoot核心原理-口语化
  7. 赠书 | SkyWalking 观测 Service Mesh 技术大公开
  8. 正月初二 | 2月13日 星期六 | 大年初一单日票房创新纪录;除夕当天外卖订单增七成;央视春晚直播受众达11.4亿人...
  9. Office 365 online的基本概念
  10. IBM AIX5.3 linux下C/C++实现HTTPS接口
  11. myeclipse中JSP页面不能更新时候的做法
  12. C/C++[codeup 5901]回文串
  13. wamp添加mysql版本_最新版PHPWAMP自定义添加PHP版本教程,支持无限添加PHP和Mysql版本...
  14. python爬取酷狗音乐源码_python爬虫教程:爬取酷狗音乐
  15. 水滴的“创益矩阵”:“万物”皆可连接公益
  16. 关于计算机听课如何做笔记,如何高效地听课记录笔记
  17. 华为交换机配置基础命令
  18. c++基础题:判断奇偶数
  19. 语义分割-建筑物提取数据集
  20. 什么是集合,集合和数组的区别是什么

热门文章

  1. windows10 64bit 环境下安装Memcached
  2. 精神病人防走丢报警系统--精神病人员定位--新导智能
  3. 流形上的微积分和微分形式的可视化导论(三)
  4. 阿里巴巴电话面试被鄙视经历
  5. java中类似实例化顺序_由浅入深详解Java 类的实例化顺序
  6. python画图显示中文_Python的matplotlib库画图不能显示中文问题解决
  7. squid 和squid 集群
  8. mysql存储过程创建
  9. Java IO类库之管道流PipeInputStream与PipeOutputStream
  10. jiecao播放视频