MFC绘图
//20171/12
1 两点一线 比如鼠标左击和鼠标弹起的两个消息 然后响应从而获取一条线
2 添加响应函数方法 类图->右击->addwindowsmessage
3 Dview和main中同时的添加消息函数 弹出框 发现只会在view类中才会有响应
4 删除通过向导来生成的函数时,方法:函数上面右键 delete
5 双击类名到头文件
6 增加一个响应函数实际上会在三个地方做出补充
(1)头文件 加入消息函数声明
(2)源文件中begin_message和end_message之间加入一个消息响应宏 通过宏把消息响应函数关联起来
7 消息映射 基类有虚函数 子类要响应就重写这个函数 子类有调用子类 没有调用父类
MFC采用消息映射 句柄和指针对照表 当收到消息的时候 通过句柄找到指针 传给
查看mfc源代码时候 wincore中windowproc f3跟踪查找->windowmessage->根据消息种类判断查找源文件消息映射声明等3个地方 然后由消息函数来响应
8 MFC把作图相关的都放在了cdc中
9 颜色 宏RGB000 黑色 三个255 白色 255 0 0 红色
10 工具栏插入->resourse->Bitmap
void CTest_DrawView::OnLButtonUp(UINT nFlags, CPoint point)
{
/*采用window SDK方法划线
// TODO: Add your message handler code here and/or call default
HDC hdc;//定义一个句柄
hdc = ::GetDC(m_hWnd);
/*BOOL MoveToEx(
HDC hdc, // handle to device context
int X, // x-coordinate of new current position
int Y, // y-coordinate of new current position
LPPOINT lpPoint // old current position
);*/
//MoveToEx(hdc,m_ptOrigin.x,m_ptOrigin.y,NULL);//null大写 //划线
/*BOOL LineTo(
int x,
int y
);
BOOL LineTo(
POINT point
);
LineTo(hdc,point.x,point.y);
::ReleaseDC(m_hWnd,hdc);*/ /*CDC *pDC;
pDC = GetDC();//返回值为指针 所以
pDC->MoveTo(m_ptOrigin);
pDC->LineTo(point);
ReleaseDC(pDC);*/ /*//CClientDC 在构造的时候调用getdc获得句柄 析构释放dc句柄 这样不用显示调用
// CWnd* GetParent( ) const;
CClinetDC dc(GetParent());//得到父窗口的指针
CClientDC dc(this);//构造dc
dc.MoveTo(m_ptOrigin);
dc.LineTo(point);
CView::OnLButtonUp(nFlags, point);*/ /*explicit CWindowDC(
CWnd* pWnd
);意味着这个对象可以访问整个屏幕区域 包括客户区域*/ /*CWindowDC dc(GetParent());
dc.MoveTo(m_ptOrigin);
dc.LineTo(point);
CView::OnLButtonUp(nFlags, point);*/ //获取桌面窗口
/*CWindowDC dc(GetDesktopWindow());
dc.MoveTo(m_ptOrigin);
dc.LineTo(point);
CView::OnLButtonUp(nFlags, point);*/ //画笔颜色等类 CPen
//CPen pen(PS_SOLID,10,RGB(255,0,0));//红色 实线
/*CPen pen(PS_DOT,1,RGB(255,0,0));//点线 为1
CClientDC dc(this);
//新的设备描述表 来覆盖前面的DC 也是还原
CPen *pOldPen = dc.SelectObject(&pen);
dc.MoveTo(m_ptOrigin);
dc.LineTo(point);
dc.SelectObject(pOldPen);
CView::OnLButtonUp(nFlags, point);*/ //画刷
//CBrush brush(RGB(255,0,0));
/*CBitmap bitmap;
bitmap.LoadBitmap(IDB_BITMAP1);//加载位图
CBrush brush(&bitmap);//画刷
CClientDC dc(this);
dc.FillRect(CRect(m_ptOrigin,point),&brush);
CView::OnLButtonUp(nFlags, point);*/ //透明画刷的创建
CClientDC dc(this);
CBrush *pBrush = CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH));
//dc.Rectangle(CRect(m_ptOrigin,point));//画矩形 此时是重叠的
CBrush *pOldBrush = dc.SelectObject(pBrush);//替换
CView::OnLButtonUp(nFlags, point);
dc.Rectangle(CRect(m_ptOrigin,point));
dc.SelectObject(pOldBrush);//还原先前的画刷
CView::OnLButtonUp(nFlags, point); }
MFC绘图的更多相关文章
- 【MFC】MFC绘图不闪烁——双缓冲技术
MFC绘图不闪烁——双缓冲技术[转] 2010-04-30 09:33:33| 分类: VC|举报|字号 订阅 [转自:http://blog.163.com/yuanlong_zheng@126/ ...
- MFC绘图(转载)
http://www.cppblog.com/bestcln/articles/83189.html 1 几何对象的结构和类 为了使用绘图函数,应该先了解绘图所用到的几种表示几何对象的结构和类.这些结 ...
- 【转】OPenGL MFC绘图
一.简介 GDI是通过设备句柄(Device Context以下简称"DC")来绘图,而OpenGL则需要绘制环境(Rendering Context,以下简称"RC&q ...
- MFC绘图相关GDI工具对象和函数介绍
在利用MFC进行界面编程时,除了需要熟悉各种类型控件的操作外,还会经常遇到图形绘制和显示的问题,比如时频分析界面.图像处理界面等.处理这些软件界面开发问题时,不可避免地需要用到一系列GDI工具对象和相 ...
- MFC绘图基础
·MFC中三种坐标系统: 1.屏幕坐标系 坐标原点位于屏幕左上角 2.(非客户区)窗口坐标系 坐标原点位于窗口左上角(包括标题栏) 3.客户区坐标系 坐标原点位于客户区左上角(不包括标题栏) ·坐标系 ...
- MFC绘图小实验(1)
这学期开了一门计算机图形学的课程,感觉蛮有趣的,所以想把书上的那些样例程序都实现一遍,了解基本的绘图原理和要点. 1,使用用户自定义的映射模式,设置窗口大小和视区相等的二维坐标系.视区中x轴水平向右为 ...
- MFC绘图基础——上机操作步骤
一.上机之前的介绍 软件环境:VC++6.0 目的:熟悉基本的MFC框架搭建和了解界面 二.MFC上机操作步骤 1,在Windows桌面上运行VC++6.0. 2,新建项目工程文件. 3,在MFC 应 ...
- MFC绘图小实验(3)
1,使用默认的文本背景模式,在点(-200,20)处输出黄底红字“Computer Graphics Based on VC++”;在(50,20)处输出黄底红字“BoChuang Research ...
- MFC绘图小实验(2)
1,以正五边形的5个顶点为基础,隔点存储构成五角星.填充模式采用WINDING.五角星边界线为5个像素宽的蓝色实线,内部使用红色填充. CRect rect; //定义矩形 GetClientRect ...
随机推荐
- 【BZOJ3939】Cow Hopscotch(动态开点线段树)
题意: 就像人类喜欢跳格子游戏一样,FJ的奶牛们发明了一种新的跳格子游戏.虽然这种接近一吨的笨拙的动物玩跳格子游戏几乎总是不愉快地结束,但是这并没有阻止奶牛们在每天下午参加跳格子游戏 游戏在一个R* ...
- PatentTips - Reducing Write Amplification in a Flash Memory
BACKGROUND OF THE INVENTION Conventional NAND Flash memories move data in the background to write ov ...
- for-else和wihle-else组合用法
当for和else组合一起使用的时候,for循环正常执行完毕,会执行else语句,否则,不会执行else语句 for i in range(10): if i == 2: break else: pr ...
- hdu1072(bfs)
#include<iostream> #include<queue> #include<cstring> using namespace std; int a[10 ...
- 240.Search in a 2D Matrix II
/* * 240.Search in a 2D Matrix II * 2016-6-17by Mingyang * From left-bottom to right-top * 他这道题目虽说是用 ...
- 高清(200万像素)多灯红外防水枪型网络摄像机 DH-IPC-HFW5200-IRA
DH-IPC-HFW5200-IRA-0722A http://download.dahuatech.com/instruction_download.php?classOne=3907&cl ...
- Linux中断处理驱动程序编写
本章节我们一起来探讨一下Linux中的中断 中断与定时器:中断的概念:指CPU在执行过程中,出现某些突发事件急待处理,CPU暂停执行当前程序,转去处理突发事件,处理完后CPU又返回原程序被中断的位置继 ...
- 【scrapy】Item及Spider
Items Item objects are simple containers used to collect the scraped data.They provide a dictionary- ...
- linux 下shell脚本执行多个命令的方法
1.每个命令之间用;隔开说明:各命令的执行给果,不会影响其它命令的执行.换句话说,各个命令都会执行,但不保证每个命令都执行成功. 2.每个命令之间用&&隔开说明:若前面的命令执行成功, ...
- Linux学习笔记总结
零.求人不如求已: 1. 在Linux中,文件,目录,驱动,命令,脚本都视为文件,也即一切皆file. 2.记住使用Linux 的关键就是六个字: 命令.选项.參数. 3.学会看帮助,不 ...