深入浅出话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 引言 当我们需要在用户区显示一些图形时,先把图形在客户区画上,虽然已经画好但此时我们还无法看到,还要通过 程序 ...
随机推荐
- JAVA的包装类 【转】
Java语言是一个面向对象的语言,但是Java中的基本数据类型却是不面向对象的,这在实际使用时存在很多的不便,为了解决这个不足,在设计类时为每个基本数据类型设计了一个对应的类进行代表,这样八个和基本数 ...
- 【浅析】IMU代码
IMU的代码的引自https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/imumargalgo ...
- underscore 笔记
//reduce是汇总 递归 var perDesc=[ {name: "haha", "email": "haha@email.com"} ...
- MVC dirname(——FILE——)
1.MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑.数据.界面显示分离的方法组织 ...
- 64位Win7下运行ASP+Access网站的方法
64位Win7下运行ASP+Access网站的方法 近日系统升级为WIN7 64位之后,突然发现原本运行正常的ASP+ACCESS网站无法正常连接数据库. 网上搜索多次,终于解决了问题,总结了几条经验 ...
- 生产力工具之vimwiki 和 calendar
vimwiki下载地址: http://www.vim.org/scripts/script.php?script_id=2226 calendar下载地址: https://github.com/i ...
- DetailsView的添加,修改,删除,查询
前台代码: <div> <asp:DetailsView ID="gvDepart" runat="server" AutoGenerateR ...
- POJ 3348 - Cows 凸包面积
求凸包面积.求结果后不用加绝对值,这是BBS()排序决定的. //Ps 熟练了template <class T>之后用起来真心方便= = //POJ 3348 //凸包面积 //1A 2 ...
- JSON.parse()和JSON.stringify()(转载)
parse用于从一个字符串中解析出json对象,如 var str = '{"name":"huangxiaojian","age":&qu ...
- sql语句执行插入后返回ID
insert into table1(aaa,bbb) values('aaa','bbb') select @@identity