注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

Leo

笑:胸怀,傲:实力,才能笑傲江湖。

 
 
 

日志

 
 

C++学习——MFC图画编程  

2012-04-12 12:35:56|  分类: 大学留笔 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

MFC图画编程

一、新建MFC单文档。

二、用消息相应,鼠标按下消息和鼠标释放消息,得到坐标值,就可以画线了。添加消息相应函数:

MainFrame类中添加消息相应,点击客户区域的时候不会相应,而在View类中添加消息相应的时候会相应,这是因为View类覆盖在Frame类框架上了,点击的时候就会相应到View类上。

void CMainFrame::OnLButtonDown(UINT nFlags, CPoint point) 

{

// TODO: Add your message handler code here and/or call default

MessageBox("11");

CFrameWnd::OnLButtonDown(nFlags, point);

}

消息处理:WindowProc函数

WINCORE.CPP中,有定义:

LRESULT CWnd::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)

{

// OnWndMsg does most of the work, except for DefWindowProc call

LRESULT lResult = 0;

if (!OnWndMsg(message, wParam, lParam, &lResult))

lResult = DefWindowProc(message, wParam, lParam);

return lResult;

}

BOOL CWnd::OnWndMsg(UINT message, WPARAM wParam, LPARAM lParam, LRESULT* pResult)

void CDrawView::OnLButtonUp(UINT nFlags, CPoint point) //按下鼠标

{

M_UpPoint = point;

CView::OnLButtonUp(nFlags, point);

}

方法一:

//画线代码

画线前,需要获得设备的句柄,就是ID号了。

HDC hdc;//DC句柄 CDC是类

hdc = ::GetDC(m_hWnd);//m_hWnd 窗口句柄,是c++内部定义的一个窗口对象!

//用全局的GetDC,否则会认为是调用CWndGetDC

MoveToEx(hdc,M_DnPoint.x,M_DnPoint.y,NULL);//将点移动到鼠标点击的点。

LineTo(hdc,M_UpPoint.x,M_UpPoint.y);

::ReleaseDC(m_hWnd,hdc);

方法二:

CDC *pDc = GetDC();//CWnd类封装了一个CWnd::GetDC()函数,返回值就是CDC*,直接获取句柄

pDc->MoveTo(M_DnPoint);

pDc->LineTo(M_UpPoint);

ReleaseDC(pDc);

方法三:

CClientDC dc(this);//CClientDC::CClientDC  CClientDC( CWnd* pWnd )需要构造CWnd* pWnd

dc.MoveTo(M_DnPoint);

dc.LineTo(M_UpPoint);

方法四:

CClientDC dc(GetParent());//获得副窗口

dc.MoveTo(M_DnPoint);

dc.LineTo(M_UpPoint);

方法五:

// CWindowDC dc(this);

CWindowDC dc(GetParent());

dc.MoveTo(M_DnPoint);

dc.LineTo(M_UpPoint);

方法六:划到桌面上

CWindowDC dc(GetDesktopWindow());

dc.MoveTo(M_DnPoint);

dc.LineTo(M_UpPoint);

画其它颜色的线:

先创建一个画笔,定义它,在用到画线中。

CPen Pen(PS_SOLID,5,RGB(255,0,0));

CClientDC dc(this);

CPen *pPen = dc.SelectObject(&Pen);//函数返回的是原来的画笔指针,最后再把原来的选进去,还原。

dc.MoveTo(M_DnPoint);

dc.LineTo(M_UpPoint);

dc.SelectObject(pPen);

CBrush brush(RGB(255,0,0));//指定的画笔填充到指定的区域。

CClientDC dc(this);

dc.FillRect(CRect(M_DnPoint,M_UpPoint),&brush);

  评论这张
 
阅读(451)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017