zoukankan      html  css  js  c++  java
  • 孙鑫vc++学习(vs2008)笔记之第四课MFC消息映射、画图

    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
     1 void CDrawView::OnLButtonDown(UINT nFlags, CPoint point)
    2 {
    3 // TODO: 在此添加消息处理程序代码和/或调用默认值
    4 m_ptOrigin = m_ptOld = point;
    5 m_bDraw = TRUE;
    6
    7
    8 CView::OnLButtonDown(nFlags, point);
    9 }
    10
    11 void CDrawView::OnLButtonUp(UINT nFlags, CPoint point)
    12 {
    13 // TODO: 在此添加消息处理程序代码和/或调用默认值
    14 //HDC hdc;
    15 //hdc = ::GetDC(m_hWnd);
    16 ////从CWnd所派生出来的类当中都有一个数据成员保存了跟这个类相关的句柄m_hWnd
    17 //::MoveToEx(hdc,m_ptOrigin.x,m_ptOrigin.y,NULL); //移动到原点
    18 //LineTo(hdc,point.x,point.y); //画线
    19 //::ReleaseDC(m_hWnd,hdc); //释放DC
    20
    21 //CDC类
    22 //CDC *pDC = GetDC(); //CWnd类的成员函数GetDC
    23 //pDC->MoveTo(m_ptOrigin);
    24 //pDC->LineTo(point);
    25 //ReleaseDC(pDC);
    26
    27 //CClientDC类
    28 //CClientDC dc(this);
    29 ////CClientDC dc(GetParent());
    30 //dc.MoveTo(m_ptOrigin);
    31 //dc.LineTo(point);
    32
    33 //CWindowDC dc(this); //CWindowDC可以访问客户区和非客户区
    34 //CWindowDC dc(GetParent());
    35 //CWindowDC dc(GetDesktopWindow()); //获取桌面句柄
    36 //dc.MoveTo(m_ptOrigin);
    37 //dc.LineTo(point);
    38
    39 //CPen pen(PS_DOT,1,RGB(0,255,0)); //定义画笔
    40 //CClientDC dc(this);
    41 //CPen *pOldPen = dc.SelectObject(&pen); //颜色切换
    42 //dc.MoveTo(m_ptOrigin);
    43 //dc.LineTo(point);
    44 //dc.SelectObject(pOldPen);
    45
    46 //画刷,填充矩形区域
    47 //CBrush brush(RGB(255,0,0));
    48 //CBitmap bitmap;
    49 //bitmap.LoadBitmap(IDB_BITMAP1); //位图画刷
    50 //CBrush brush(&bitmap);
    51 //CClientDC dc(this);
    52 ////dc.FillRect(CRect(m_ptOrigin,point),&brush);
    53 //CBrush *pBrush = CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH)); //透明矩形
    54 ////FromHandle是静态成员函数
    55 //CBrush *pOldBrush = dc.SelectObject(pBrush);
    56 //dc.Rectangle(CRect(m_ptOrigin,point)); //画矩形
    57 //dc.SelectObject(pOldBrush);
    58
    59 m_bDraw = FALSE;
    60 CView::OnLButtonUp(nFlags, point);
    61 }
    62
    63 void CDrawView::OnMouseMove(UINT nFlags, CPoint point)
    64 {
    65 // TODO: 在此添加消息处理程序代码和/或调用默认值
    66 CClientDC dc(this);
    67 CPen pen(PS_SOLID,1,RGB(255,0,0));
    68 CPen *pOldPen = dc.SelectObject(&pen);
    69 if (m_bDraw)
    70 {
    71 dc.SetROP2(R2_BLACK); //设置绘画模式
    72 dc.MoveTo(m_ptOrigin);
    73 //dc.LineTo(point); //连续画画
    74 //m_ptOrigin = point; //下一次起点是上一次的终点
    75 dc.LineTo(m_ptOld); //画扇形
    76 //dc.MoveTo(m_ptOrigin);
    77 dc.MoveTo(m_ptOld);
    78 dc.LineTo(point);
    79 m_ptOld = point;
    80
    81 }
    82 dc.SelectObject(pOldPen);
    83 CView::OnMouseMove(nFlags, point);
    84 }

     

  • 相关阅读:
    401. Binary Watch
    46. Permutations
    61. Rotate List
    142. Linked List Cycle II
    86. Partition List
    234. Palindrome Linked List
    19. Remove Nth Node From End of List
    141. Linked List Cycle
    524. Longest Word in Dictionary through Deleting
    android ListView详解
  • 原文地址:https://www.cnblogs.com/quantumplan/p/2348388.html
Copyright © 2011-2022 走看看