深入浅出话VC++(3)——VC++实现绘图操作
VC++实现绘图操作,说白了也就是对API熟练操作了,下面介绍几种绘图
1. 绘制线条
具体实现代码如下:
// 鼠标左键按下时的处理函数
void CDrawView::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
originP=point;
CEditView::OnLButtonDown(nFlags, point);
} // 鼠标左键弹起时的处理函数,Point为弹起时鼠标的点坐标
void CDrawView::OnLButtonUp(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
//#pragma region 1.利用SDK全局函数实现画线功能
//// 首先获得窗口的设备描述表
//HDC hdc;
//hdc=::GetDC(m_hWnd); //// 移动到线条的起点
//MoveToEx(hdc,originP.x,originP.y,NULL); //// 画线
//LineTo(hdc,point.x,point.y); //// 释放设备描述表
//::ReleaseDC(m_hWnd,hdc); //#pragma endregion
//#pragma region 2. 利用MFC的CDC类实现画线功能
//CDC* mfcDC=GetDC();
//mfcDC->MoveTo(originP);
//mfcDC->LineTo(point);
//ReleaseDC(mfcDC); //#pragma endregion //#pragma region 3. 利用MFC的CClientDC类实现画线功能
//CClientDC dc(this);
//dc.MoveTo(originP);
//dc.LineTo(point); //#pragma endregion
//#pragma region 4. 利用MFC的CWindowDC类实现画线功能
//CWindowDC wdc(this);
//wdc.MoveTo(originP);
//wdc.LineTo(point); //#pragma endregion #pragma region 5. 在桌面窗口中绘制彩色线
// 指定画笔GDI对象
CPen pen(PS_SOLID,,RGB(,,)); // 获得桌面设备描述符
CWindowDC wdc(GetDesktopWindow()); // 使用SelectObject函数来实现把GDI对象选入设备描述表中
// SelectObject函数返回指向先前被选对象的指针
CPen* pOldPen =wdc.SelectObject(&pen);
wdc.MoveTo(originP);
wdc.LineTo(point); // 把先前的GDI对象选入设备描述表,以便恢复到先前的状态
wdc.SelectObject(pOldPen);
#pragma endregion
CEditView::OnLButtonUp(nFlags, point);
}
2. 使用画刷绘制一块区域
实现代码:
// CDrawRegionView 消息处理程序 // 鼠标左键按下消息处理函数
void CDrawRegionView::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
originPoint=point;
CTreeView::OnLButtonDown(nFlags, point);
} // 鼠标左键弹起消息处理函数
void CDrawRegionView::OnLButtonUp(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
#pragma region 1. 简单画刷
//// 创建一个红色画刷
//CBrush brush(RGB(255,0,0));
//// 创建并获得设备描述表
//CClientDC dc(this);
//// 利用红色画刷填充鼠标拖拽过程中形成的矩形区域
//dc.FillRect(CRect(originPoint,point),&brush);
#pragma endregion #pragma region 2. 位图画刷
// 创建位图对象
CBitmap bitmap;
// 加载位图资源
bitmap.LoadBitmapW(IDB_BITMAP1);
// 创建位图画刷
CBrush bitmapBrush(&bitmap);
// 创建并获得设备描述表
CClientDC dc2(this);
// 利用位图画刷填充鼠标拖拽过程中形成的矩形区域
dc2.FillRect(CRect(originPoint,point),&bitmapBrush); #pragma endregion #pragma region 3. 透明画刷
// 创建并获得设备描述表
CClientDC dc3(this); // 创建一个空画刷
CBrush *pBrush =CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH)); // 将空画刷选入设备描述表中
CBrush *oldBrush =dc3.SelectObject(pBrush);
// 绘制一个矩形
dc3.Rectangle(CRect(originPoint,point)); // 恢复先前的画刷
dc3.SelectObject(oldBrush);
#pragma endregion
CTreeView::OnLButtonUp(nFlags, point);
}
3. 绘制连续的线条
实现代码:
void CDrawContinuousLineView::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
originPt =point;
isBeginDraw=true;
CEditView::OnLButtonDown(nFlags, point);
} void CDrawContinuousLineView::OnLButtonUp(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
isBeginDraw=false;
CEditView::OnLButtonUp(nFlags, point);
} // 鼠标移动消息的处理函数
void CDrawContinuousLineView::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
CClientDC dc(this); // 创建一个红色,宽度为1的实现画笔
CPen pen(PS_SOLID,,RGB(,,));
// 把创建的画笔选入设备描述表中
CPen* oldPen =dc.SelectObject(&pen);
if(isBeginDraw==true)
{
dc.MoveTo(originPt);
dc.LineTo(point);
// 修改线段的起点
originPt=point;
} // 恢复设备描述表
dc.SelectObject(oldPen);
CEditView::OnMouseMove(nFlags, point);
}
完整的实现源码下载:C++实现绘图
深入浅出话VC++(3)——VC++实现绘图操作的更多相关文章
- WPF学习之深入浅出话模板
图形用户界面应用程序较之控制台界面应用程序最大的好处就是界面友好.数据显示直观.CUI程序中数据只能以文本的形式线性显示,GUI程序则允许数据以文本.列表.图形等多种形式立体显示. 用户体验在GUI程 ...
- MATLAB绘图功能(1) 二维高层绘图操作
文末源代码 部分源代码 %% 基本绘图操作 x=:*pi; y=sin(x); plot(x,y); % 第二个参数为矩阵 y1=sin(x); y2=cos(x); y3=0.002*exp(x); ...
- 封装CoreGraphics的API简化绘图操作
封装CoreGraphics的API简化绘图操作 效果 说明 1. 将CoreGraphics的API接口抽象为对象,让绘图变得简单易懂 2. 简化常用的绘制操作 3. 源码长期更新 源码 https ...
- Android通过onDraw实现在View中绘图操作
Android绘图操作,通过继承View实现,在onDraw函数中实现绘图. 下面是一个简单的例子: public class AndroidTest extends Activity { /** C ...
- matlab学习笔记8 基本绘图命令-基本绘图操作
一起来学matlab-matlab学习笔记8 基本绘图命令_2基本绘图操作 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考书籍 <matlab 程序设计与综合应用>张德丰等著 ...
- IDG资本全球拼图:近10年揽26家独角兽,最敢出手VC再造"VC+"
IDG资本全球拼图:近10年揽26家独角兽,最敢出手VC再造"VC+" 2017-04-01 15:33 两天前,IDG资本合伙人过以宏提出的“VC+”,又有了新的内涵——全球 ...
- 深入浅出话VC++(2)——MFC的本质
一.引言 上一专题中,纯手动地完成了一个Windows应用程序,然而,在实际开发中,我们大多数都是使用已有的类库来开发Windows应用程序.MFC(Microsoft Foundation Clas ...
- 深入浅出话VC++(1)——Windows程序内部运行机制
一.引言 要想熟练掌握Windows应用程序的开发,首先需要理解Windows平台下程序运行的内部机制,然而在.NET平台下,创建一个Windows桌面程序,只需要简单地选择Windows窗体应用程序 ...
- VC++大数据量绘图时无闪烁刷屏技术实现(我的理解是,在内存上作画,然后手动显示,而不再直接需要经过WM_PAINT来处理了)
http://hantayi.blog.51cto.com/1100843/383578 引言 当我们需要在用户区显示一些图形时,先把图形在客户区画上,虽然已经画好但此时我们还无法看到,还要通过 程序 ...
随机推荐
- 安装 ppsycopg2报错, Error: You need to install postgresql-server-dev-X.Y for building a server-side extension or libpq-dev for building a client-side application
sudo apt-get install libpq-dev
- java 字节数组转int
4字节数组转int类型 小端模式 /** * 数组转int类型 * * @param src * @return */ public static int bytesToInt(byte[] src) ...
- Linux防火墙
9.1 认识防火墙 只要能够分析与过滤进出我们管理之网域的封包数据, 就可以称为防火墙. 硬件防火墙 由厂商设计好的主机硬件, 这部硬件防火墙内的操作系统主要以提供封包数据的过滤机制为主,并将其他 ...
- spark Mllib基本功系列编程入门之 SVM实现分类
话不多说.直接上代码咯.欢迎交流. /** * Created by whuscalaman on 1/7/16. */import org.apache.spark.{SparkConf, Spar ...
- nginx 命令
nginx 命令 sudo /etc/init.d/nginx configtest 测试是否配置有错 sudo /usr/local/nginx/sbin/nginx -s reload ...
- jQuery下拉框插件8种效果
jQuery自定义漂亮的下拉框插件8种效果 jquery美化选择器实例有:边框.下划线. 伸缩 .滑动. 覆盖. 旋转. 弹出层选择 .环形效果. 在线预览 <body class=" ...
- SPI数据传输(库函数方法)
主机端: /********************************* 代码功能:SPI数据传输(主机端) 引脚说明: SS/CS:片选(高电平屏蔽,低电平启用) MOSI :主机送出信号 M ...
- 如何创建多个Memcached服务
在学习Memcached时,为了模拟分布存储,常常需要建多个Memcached服务,如何建呢,只能使用命令行了 运行cmd,输入如下命令 sc create "Memcached Serve ...
- SAP 打开账期
1.先OB52修改账期: 如下界面开得公司9000下面 7.8月份的账期 2.mmpv 关闭上两个账期 3.mmrv 查看现在账期情况
- python学习之——计算文件行数
# -*- coding: cp936 -*- #转载源于:http://blog.csdn.net/houyj1986/article/details/21196027 #计算文件行数 #1.文件比 ...