C++应用程序中,画图程序 创建画笔的代码 急~~
1个回答
推荐于2017-12-16
展开全部
要想在MFC中画出有颜色的线条,首先就要设置DC的画笔,我们可以按如下方法来设置画笔:
第一步:在View类中添加一个COLORREF类型的数据成员m_Color(用来保存画笔颜色值),在构造函数中对其初始化,
m_Color(RGB(255,0,0))
第二步:在WM_LBUTTONDOWN和WM_LBUTTONUP消息的处理函数OnLButtonDown和OnLButtonUp中添加如下代码:
void CdrView::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
m_StartPoint=point; //用来保存画线起始点的位置,即鼠标左键第一次按下时的位置,类型为CPoint
CView::OnLButtonDown(nFlags, point);
}
void CdrView::OnLButtonUp(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
//第一种方法,用HDC绘图,使用API函数设置画笔颜色
/*HDC hdc;
hdc=::GetDC(m_hWnd);
::SelectObject(hdc,CreatePen(PS_SOLID,1,m_Color)); //向设备上下文(设备描述表)中插入由CreatePen函数创建的画笔
::MoveToEx(hdc,m_StartPoint.x,m_StartPoint.y,NULL);
::LineTo(hdc,point.x,point.y);
::ReleaseDC(m_hWnd,hdc);*/
//第二种,用CDC类绘图,使用CPen类构造画笔
/*CDC aDC;
CPen pen(PS_SOLID,1,m_Color); //建立一个画笔类对象,构造时设置画笔属性
aDC.m_hDC=::GetDC(m_hWnd);
aDC.SelectObject(&pen);
aDC.MoveTo(m_StartPoint);
aDC.LineTo(point);
::ReleaseDC(m_hWnd,aDC.m_hDC);*/
//第三种,用CClient类绘图,使用CPen类构造画笔,跟第二种方法不同的是用CClientDC时不用手动去获取DC,和释放DC
CClientDC aDC(this); //CClientDC的构造函数需要一个参数,这个参数是指向绘图窗口的指针,我们用this指针就可以了
CPen pen(PS_SOLID,1,m_Color); ////建立一个画笔类对象,构造时设置画笔属性
aDC.SelectObject(&pen);
aDC.MoveTo(m_StartPoint);
aDC.LineTo(point);
CView::OnLButtonUp(nFlags, point);
}
void CdrView::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
CView::OnMouseMove(nFlags, point);
}
运行程序,就可以画出红色的线条来,如果想画其它颜色,只需要设置m_Color的值即可,例如,要设置成绿色,可以在View类的构造函数处把m_Color(RGB(255,0,0))改写成m_Color(RGB(0,255,0))。颜色的改变是通过设置RGB(0,255,0)中的三个参数来实现的。RGB中的三个参数分别对应三原色的红、绿、蓝,每一个参数的取值范围都是0~255,通过不同数值的组合,就可以画出各种各样的颜色来了。
第一步:在View类中添加一个COLORREF类型的数据成员m_Color(用来保存画笔颜色值),在构造函数中对其初始化,
m_Color(RGB(255,0,0))
第二步:在WM_LBUTTONDOWN和WM_LBUTTONUP消息的处理函数OnLButtonDown和OnLButtonUp中添加如下代码:
void CdrView::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
m_StartPoint=point; //用来保存画线起始点的位置,即鼠标左键第一次按下时的位置,类型为CPoint
CView::OnLButtonDown(nFlags, point);
}
void CdrView::OnLButtonUp(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
//第一种方法,用HDC绘图,使用API函数设置画笔颜色
/*HDC hdc;
hdc=::GetDC(m_hWnd);
::SelectObject(hdc,CreatePen(PS_SOLID,1,m_Color)); //向设备上下文(设备描述表)中插入由CreatePen函数创建的画笔
::MoveToEx(hdc,m_StartPoint.x,m_StartPoint.y,NULL);
::LineTo(hdc,point.x,point.y);
::ReleaseDC(m_hWnd,hdc);*/
//第二种,用CDC类绘图,使用CPen类构造画笔
/*CDC aDC;
CPen pen(PS_SOLID,1,m_Color); //建立一个画笔类对象,构造时设置画笔属性
aDC.m_hDC=::GetDC(m_hWnd);
aDC.SelectObject(&pen);
aDC.MoveTo(m_StartPoint);
aDC.LineTo(point);
::ReleaseDC(m_hWnd,aDC.m_hDC);*/
//第三种,用CClient类绘图,使用CPen类构造画笔,跟第二种方法不同的是用CClientDC时不用手动去获取DC,和释放DC
CClientDC aDC(this); //CClientDC的构造函数需要一个参数,这个参数是指向绘图窗口的指针,我们用this指针就可以了
CPen pen(PS_SOLID,1,m_Color); ////建立一个画笔类对象,构造时设置画笔属性
aDC.SelectObject(&pen);
aDC.MoveTo(m_StartPoint);
aDC.LineTo(point);
CView::OnLButtonUp(nFlags, point);
}
void CdrView::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
CView::OnMouseMove(nFlags, point);
}
运行程序,就可以画出红色的线条来,如果想画其它颜色,只需要设置m_Color的值即可,例如,要设置成绿色,可以在View类的构造函数处把m_Color(RGB(255,0,0))改写成m_Color(RGB(0,255,0))。颜色的改变是通过设置RGB(0,255,0)中的三个参数来实现的。RGB中的三个参数分别对应三原色的红、绿、蓝,每一个参数的取值范围都是0~255,通过不同数值的组合,就可以画出各种各样的颜色来了。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询