• MFC绘图


    //20171/12
    1 两点一线 比如鼠标左击和鼠标弹起的两个消息 然后响应从而获取一条线
    2 添加响应函数方法 类图->右击->addwindowsmessage
    3 Dview和main中同时的添加消息函数 弹出框 发现只会在view类中才会有响应
    4 删除通过向导来生成的函数时,方法:函数上面右键 delete
    5 双击类名到头文件
    6 增加一个响应函数实际上会在三个地方做出补充
     (1)头文件 加入消息函数声明
     (2)源文件中begin_message和end_message之间加入一个消息响应宏 通过宏把消息响应函数关联起来
    7 消息映射 基类有虚函数 子类要响应就重写这个函数 子类有调用子类 没有调用父类
     MFC采用消息映射 句柄和指针对照表 当收到消息的时候 通过句柄找到指针 传给
     查看mfc源代码时候 wincore中windowproc f3跟踪查找->windowmessage->根据消息种类判断查找源文件消息映射声明等3个地方 然后由消息函数来响应
    8 MFC把作图相关的都放在了cdc中
    9 颜色 宏RGB000 黑色 三个255 白色 255 0 0 红色
    10 工具栏插入->resourse->Bitmap

     1 void CTest_DrawView::OnLButtonUp(UINT nFlags, CPoint point) 
     2 {
     3     /*采用window SDK方法划线
     4     // TODO: Add your message handler code here and/or call default
     5     HDC hdc;//定义一个句柄
     6     hdc = ::GetDC(m_hWnd);
     7     /*BOOL MoveToEx(    
     8       HDC hdc,          // handle to device context
     9       int X,            // x-coordinate of new current position
    10       int Y,            // y-coordinate of new current position
    11       LPPOINT lpPoint   // old current position
    12     );*/
    13     //MoveToEx(hdc,m_ptOrigin.x,m_ptOrigin.y,NULL);//null大写
    14 
    15     //划线
    16     /*BOOL LineTo(
    17    int x,
    18    int y 
    19     );
    20     BOOL LineTo(
    21    POINT point 
    22     );
    23     LineTo(hdc,point.x,point.y);
    24     ::ReleaseDC(m_hWnd,hdc);*/
    25 
    26     /*CDC *pDC;
    27     pDC = GetDC();//返回值为指针 所以
    28     pDC->MoveTo(m_ptOrigin);
    29     pDC->LineTo(point);
    30     ReleaseDC(pDC);*/
    31 
    32     /*//CClientDC 在构造的时候调用getdc获得句柄 析构释放dc句柄 这样不用显示调用
    33     // CWnd* GetParent( ) const;
    34     CClinetDC dc(GetParent());//得到父窗口的指针
    35     CClientDC dc(this);//构造dc
    36     dc.MoveTo(m_ptOrigin);
    37     dc.LineTo(point);
    38     CView::OnLButtonUp(nFlags, point);*/
    39 
    40      
    41 /*explicit CWindowDC(
    42    CWnd* pWnd 
    43 );意味着这个对象可以访问整个屏幕区域 包括客户区域*/
    44  
    45     /*CWindowDC dc(GetParent());
    46     dc.MoveTo(m_ptOrigin);
    47     dc.LineTo(point);
    48     CView::OnLButtonUp(nFlags, point);*/
    49 
    50     //获取桌面窗口
    51     /*CWindowDC dc(GetDesktopWindow());
    52     dc.MoveTo(m_ptOrigin);
    53     dc.LineTo(point);
    54     CView::OnLButtonUp(nFlags, point);*/
    55 
    56     //画笔颜色等类 CPen
    57     //CPen pen(PS_SOLID,10,RGB(255,0,0));//红色 实线
    58     /*CPen pen(PS_DOT,1,RGB(255,0,0));//点线 为1
    59     CClientDC dc(this);
    60     //新的设备描述表 来覆盖前面的DC 也是还原
    61     CPen *pOldPen = dc.SelectObject(&pen);
    62     dc.MoveTo(m_ptOrigin);
    63     dc.LineTo(point);
    64     dc.SelectObject(pOldPen);
    65     CView::OnLButtonUp(nFlags, point);*/
    66 
    67     //画刷
    68     //CBrush brush(RGB(255,0,0));
    69     /*CBitmap bitmap;
    70     bitmap.LoadBitmap(IDB_BITMAP1);//加载位图
    71     CBrush brush(&bitmap);//画刷
    72     CClientDC dc(this);
    73     dc.FillRect(CRect(m_ptOrigin,point),&brush);
    74     CView::OnLButtonUp(nFlags, point);*/
    75 
    76     //透明画刷的创建
    77     CClientDC dc(this);
    78     CBrush *pBrush = CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH));
    79     //dc.Rectangle(CRect(m_ptOrigin,point));//画矩形 此时是重叠的
    80     CBrush *pOldBrush = dc.SelectObject(pBrush);//替换
    81     CView::OnLButtonUp(nFlags, point);
    82     dc.Rectangle(CRect(m_ptOrigin,point));
    83     dc.SelectObject(pOldBrush);//还原先前的画刷
    84         CView::OnLButtonUp(nFlags, point);
    85  
    86 
    87 }
  • 相关阅读:
    Evanyou Blog 彩带
    Evanyou Blog 彩带
    复合类型的声明——是int *p还是int* p
    指针
    引用
    变量声明和变量定义
    C++内置类型如何存放于计算机内存中
    C++的几种字符类型
    第四章 表达式
    ++i && i++
  • 原文地址:https://www.cnblogs.com/lanjianhappy/p/6343397.html
Copyright © 2020-2023  润新知