您的位置:首页 > 编程语言 > C语言/C++

孙鑫vc++学习(vs2008)笔记之第四课MFC消息映射、画图

2012-02-12 22:04 585 查看
1.view类始终在框架类窗口之上

2.删除类成员函数:在属性窗口消息里面找到相应的消息相应函数下拉菜单删除。

3.增加一个消息响应函数的时候,在三个地方修改代码:①头文件中增加消息相应函数声明;②源文件中BEGIN_MESSAGE_MAP和END_MESSAGE_MAP(消息映射表)之间加入相应函数宏,通过这个宏把消息和消息响应函数联系起来;③消息响应代码。

4.处理机制:消息映射。

5.WindowProc在wincore.cpp中,其中调用OnWndMsg完成消息映射的处理

6.从CWnd所派生出来的类当中都有一个数据成员保存了跟这个类相关的句柄,m_hWnd

7.CDC类,跟作图有关的操作封装在CDC类中

8.作图区域:client and nonclient areas,客户区和非客户区

9.静态函数:不属于某个具体的对象,只属于所属的类本身,非静态成员函数属于对象。静态函数在类创建的时候分配空间,非静态函数在定义对象的时候分配空间。内存里面有分配才能调用。静态成员变量必须初始化。

10.用到的一些函数在程序注释里面。。。。

View Code

void CDrawView::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
m_ptOrigin = m_ptOld = point;
m_bDraw = TRUE;

CView::OnLButtonDown(nFlags, point);
}

void CDrawView::OnLButtonUp(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
//HDC hdc;
//hdc = ::GetDC(m_hWnd);
////从CWnd所派生出来的类当中都有一个数据成员保存了跟这个类相关的句柄m_hWnd
//::MoveToEx(hdc,m_ptOrigin.x,m_ptOrigin.y,NULL);  //移动到原点
//LineTo(hdc,point.x,point.y);       //画线
//::ReleaseDC(m_hWnd,hdc);            //释放DC

//CDC类
//CDC *pDC = GetDC();       //CWnd类的成员函数GetDC
//pDC->MoveTo(m_ptOrigin);
//pDC->LineTo(point);
//ReleaseDC(pDC);

//CClientDC类
//CClientDC dc(this);
////CClientDC dc(GetParent());
//dc.MoveTo(m_ptOrigin);
//dc.LineTo(point);

//CWindowDC dc(this);              //CWindowDC可以访问客户区和非客户区
//CWindowDC dc(GetParent());
//CWindowDC dc(GetDesktopWindow());  //获取桌面句柄
//dc.MoveTo(m_ptOrigin);
//dc.LineTo(point);

//CPen pen(PS_DOT,1,RGB(0,255,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));
//CBitmap bitmap;
//bitmap.LoadBitmap(IDB_BITMAP1);   //位图画刷
//CBrush brush(&bitmap);
//CClientDC dc(this);
////dc.FillRect(CRect(m_ptOrigin,point),&brush);
//CBrush *pBrush = CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH));  //透明矩形
////FromHandle是静态成员函数
//CBrush *pOldBrush = dc.SelectObject(pBrush);
//dc.Rectangle(CRect(m_ptOrigin,point));      //画矩形
//dc.SelectObject(pOldBrush);

m_bDraw = FALSE;
CView::OnLButtonUp(nFlags, point);
}

void CDrawView::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
CClientDC dc(this);
CPen pen(PS_SOLID,1,RGB(255,0,0));
CPen *pOldPen = dc.SelectObject(&pen);
if (m_bDraw)
{
dc.SetROP2(R2_BLACK);    //设置绘画模式
dc.MoveTo(m_ptOrigin);
//dc.LineTo(point);       //连续画画
//m_ptOrigin = point;   //下一次起点是上一次的终点
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);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: