• VC :在对话框中绘图


    主要代码如下:
    显示代码如下:
    CDC * pDialogDC = GetDC();
    Invalidate();
    UpdateWindow();
    CPen pen(PS_SOLID,2,RGB(255,0,0));
    pDialogDC->SelectObject(&pen);

    for (int i = 0;i < picVector.size(); i++)
    {

    switch(picVector[i]->picFlag)
    {
    case 0:
    pDialogDC->MoveTo(picVector[i]->startPoint);
    pDialogDC->LineTo(picVector[i]->endPoint);
    break;
    case 1:
    pDialogDC->Ellipse(picVector[i]->startPoint.x,picVector[i]->startPoint.y,picVector[i]->endPoint.x,picVector[i]->endPoint.y);
    break;
    case 2:
    pDialogDC->Rectangle(picVector[i]->startPoint.x,picVector[i]->startPoint.y,picVector[i]->endPoint.x,picVector[i]->endPoint.y);
    break;
    }
    }
    ReleaseDC(pDialogDC);
    往vector容器中添加获取的元素(包括所画图的类型,鼠标按下、抬起两点):
    void CForwardBackDlg::OnLButtonUp(UINT nFlags, CPoint point)
    {
    // TODO: Add your message handler code here and/or call default
    upPoint = point;

    CPicture * pPic = new CPicture();

    pPic->picFlag = style;
    pPic->startPoint = downPoint;
    pPic->endPoint = upPoint;
    picVector.push_back(pPic);
    bakeupVector.push_back(pPic);
    //delete pPic;//检查传递到容器中是否是地址传递,答案: 是
    Invalidate();//只刷新对话框中控件 不刷新对话框自身
    //UpdateWindow();
    CDialog::OnLButtonUp(nFlags, point);
    }
    撤销代码如下:
    if(picVector.size() > 0)
    {
    //delete picVector[picVector.size() - 1];
    picVector.pop_back();

    参考:

    void CForwardBackDlg::OnPaint()

         CDC * pControlDC = GetDC();
         Invalidate();
         UpdateWindow();
         pControlDC->SelectStockObject(BLACK_BRUSH);
         pControlDC->Rectangle(0,0,100,100);
         ReleaseDC(pControlDC);

    }

  • 相关阅读:
    一些坑爹的错误
    鼠标键盘钩子捕获(初版)
    【Win10】我们无法更新系统保留的分区
    实验一:c++简单程序设计(1)
    《Java 8 in Action》Chapter 1:为什么要关心Java 8
    《Java 8 in Action》Chapter 2:通过行为参数化传递代码
    Java集合类综合
    Java内存模型
    你真的会阅读Java的异常信息吗?
    Java常用异常整理
  • 原文地址:https://www.cnblogs.com/shenchao/p/2711455.html
Copyright © 2020-2023  润新知