前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >VC++6.0入门——第四讲 简单绘图

VC++6.0入门——第四讲 简单绘图

原创
作者头像
Arya
发布于 2024-11-18 02:21:58
发布于 2024-11-18 02:21:58
1230
举报
文章被收录于专栏:后端开发专栏后端开发专栏

文章开始之前,推荐一些别人写的很好的文章!感兴趣的也可以去读一下哦!

今日推荐:Shell编程中,当登录服务器时显示“-bash-4.2$”怎么办?

文章链接:https://cloud.tencent.com/developer/article/2465870

某一天登录远程服务器时,突然没有了登录成功的页面,报错有的时候并不复杂,复杂的是基础知识是否掌握,见到的报错是否多样,如果答案是”是“的话,那么深化下去将会变得容易。

引出


VC++6.0入门——第四讲 简单绘图

第四讲 简单绘图

本章将剖析MFC消息映射机制,探讨发送给窗口的消息是如何被MFC框架通过窗口句柄映射表和消息映射表来用窗口类的处理函数进行响应的。另外,还将讲述Class Wizard这一工具的运用,讨论设备描述表及其封装类CDC的使用,以及CDC是如何与具体的设备发生关联的,并结合具体的画图程序进行分析。

加入点击弹窗

框架类CMainFrame中加入不生效,需要在CDrawView中加入

编写代码,加入一个消息框

在头文件中,自动加入了注释宏

源文件中加入了宏,加入了消息响应函数的宏

划线的实现1

鼠标的抬起与放下的事件定义

代码语言:c++
AI代码解释
复制
/////////////////////////////////////////////////////////////////////////////
// CDrawView message handlers

void CDrawView::OnLButtonDown(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default
	// 点击的时候,拿到了点
	m_ptOrigin=point; // 获取起点
	// MessageBox("view click");
	CView::OnLButtonDown(nFlags, point);
}

void CDrawView::OnLButtonUp(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default
	HDC hdc; 
	hdc=::GetDC(m_hWnd);
	// 起点
	MoveToEx(hdc,m_ptOrigin.x,m_ptOrigin.y,NULL);
	// 划线
	LineTo(hdc,point.x,point.y);
	// 释放dc
	::ReleaseDC(m_hWnd,hdc);
	CView::OnLButtonUp(nFlags, point);
}

划线实现2

用cdc实现

划线的实现3,CClient

GetParent()

划线的实现4

代码语言:c++
AI代码解释
复制
	CWindowDC dc(GetParent());
	dc.MoveTo(m_ptOrigin);
	dc.LineTo(point);

不同的颜色画笔

代码语言:java
AI代码解释
复制
	// 创建画笔
	CPen pen(PS_DOT,1,RGB(255,0,0));
	CClientDC dc(this);
	CPen *pOldPen=dc.SelectObject(&pen);
	dc.MoveTo(m_ptOrigin);
	dc.LineTo(point);
	dc.SelectObject(pOldPen); // 先前的画笔选择回设备描述表

不同颜色画刷

代码语言:java
AI代码解释
复制
	// 创建画刷
	CBrush brush(RGB(255,0,0)); 
	CClientDC dc(this);
	dc.FillRect(CRect(m_ptOrigin,point),&brush);

位图

代码语言:java
AI代码解释
复制
	CBitmap bitmap;
	bitmap.LoadBitmap(IDB_BITMAP1);
	CBrush brush(&bitmap);
	CClientDC dc(this);
	dc.FillRect(CRect(m_ptOrigin,point),&brush);

空的矩形

画笔实现

构造函数初始化为false

鼠标按下时,设置为真,True

鼠标抬起,设置为false

画出连续的线条

代码语言:java
AI代码解释
复制
void CDrawView::OnMouseMove(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default

	// 判断鼠标状态

	CClientDC dc(this);
	if(m_bDraw==TRUE)
	{
		// 开始划线
		dc.MoveTo(m_ptOrigin);
		dc.LineTo(point);
		m_ptOrigin=point; // 终点设置为起点
	}
	
	CView::OnMouseMove(nFlags, point);
}

换个红色的画笔

代码语言:java
AI代码解释
复制
void CDrawView::OnMouseMove(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default



	CClientDC dc(this);
	// 换个颜色
	CPen pen(PS_SOLID,1,RGB(255,0,0));
	CPen *pOldPen=dc.SelectObject(&pen); // 之前的画笔

	// 判断鼠标状态
	if(m_bDraw==TRUE)
	{
		// 开始划线
		dc.MoveTo(m_ptOrigin);
		dc.LineTo(point);
		m_ptOrigin=point; // 终点设置为起点
	}
	
	dc.SelectObject(pOldPen); //设置回之前的画笔
	CView::OnMouseMove(nFlags, point);
}

画个扇形

先画出一个点,再到另一个点画出一条线,终点变化,重新划线

画出边线

代码语言:java
AI代码解释
复制
void CDrawView::OnMouseMove(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default



	CClientDC dc(this);
	// 换个颜色
	CPen pen(PS_SOLID,1,RGB(255,0,0));
	CPen *pOldPen=dc.SelectObject(&pen); // 之前的画笔

	// 判断鼠标状态
	if(m_bDraw==TRUE)
	{
		// 开始划线
		dc.MoveTo(m_ptOrigin);
		dc.LineTo(m_ptOld); // 画出一个点
		// dc.MoveTo(m_ptOrigin); // 线性的扇形
		dc.MoveTo(m_ptOld); // 画出边线
		dc.LineTo(point);
		m_ptOld=point;
	}
	dc.SelectObject(pOldPen); //设置回之前的画笔
	CView::OnMouseMove(nFlags, point);
}

总结

VC++6.0入门——第四讲 简单绘图

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档