
引出
VC++学习(4)——简单绘图,划线的几种实现方式,画笔画刷及其颜色,如何画一个扇形
第四讲


加入点击弹窗
框架类CMainFrame中加入不生效,需要在CDrawView中加入

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

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

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

划线的实现1

鼠标的抬起与放下的事件定义
/////////////////////////////////////////////////////////////////////////////
// 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

CWindowDC dc(GetParent());
dc.MoveTo(m_ptOrigin);
dc.LineTo(point);


不同的颜色画笔

// 创建画笔
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); // 先前的画笔选择回设备描述表

不同颜色画刷
// 创建画刷
CBrush brush(RGB(255,0,0));
CClientDC dc(this);
dc.FillRect(CRect(m_ptOrigin,point),&brush);

位图



外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
CBitmap bitmap;
bitmap.LoadBitmap(IDB_BITMAP1);
CBrush brush(&bitmap);
CClientDC dc(this);
dc.FillRect(CRect(m_ptOrigin,point),&brush);

空的矩形

画笔实现


构造函数初始化为false

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

鼠标抬起,设置为false

画出连续的线条

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);
}
换个红色的画笔

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);
}
画个扇形



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

画出边线
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++学习(4)——简单绘图,划线的几种实现方式,画笔画刷及其颜色,如何画一个扇形
——简单绘图,划线的几种实现方式,画笔画刷及其颜色,如何画一个扇形&spm=1001.2101.3001.5002&articleId=139000232&d=1&t=3&u=bdfe7aaae56a42199ac03ee03176b75d)
4304

被折叠的 条评论
为什么被折叠?



