创建MFC单文档,实现金刚石图案绘制功能

来源:互联网 发布:源mac地址的作用 编辑:程序博客网 时间:2024/04/28 23:42

创建一MFC单文档的应用程序框架,在框架中添加代码或资源,实现具体应用;

系统自创各种类,不同类有不同的作用,也具有层次性;MFC一般采用视图/文档结构模式,是显示的内容与处理的数据分离开。

•        从【ClassView】面板可以看出

–       CTestApp是应用的主函数类,用来处理消息。

–       MFC中的数据是存储在CTestDoc类文档中

–       结果的显示是在CTestView类中

–       文档类负责管理和维护数据本身

–       视图类负责处理用户鼠标和键盘的操作

 

窗口最大化及窗口标题:

    m_pMainWnd->ShowWindow(SW_SHOWMAXIMIZED);

    m_pMainWnd->SetWindowText("金刚石图案绘制");

 

菜单栏与工具栏的关联:通过ID

对话框及相应的对话框的类:对话框的控件ID与对话框的类的成员的映射。对话框类继承与CDioalg;

用户也可根据需要创建一个普通类。

 

查看MFC文件代码,需要熟悉C++面向对象语言的相关知识

对象

类的成员函数

类的成员变量

成员变量的定义,初始化及使用,先定义后使用

成员函数的声明、定义及使用,规则:先声明后使用

构造函数与虚构函数特征及作用

虚函数

 

了解程序设计的文档结构

 

 

·          什么是客户区/非客户区?

·          窗口(框架/frame)的客户区和视图(view)的客户区的区别?

http://www.cnblogs.com/EverYoung/archive/2011/08/21/2147666.html

 

 摘自:孔令德 图形图像教材

金刚石图案绘制算法设计:

读入等分点个数n和园的半径r;

计算金刚石图案的起始角和等分角;

将园的等分后的顶点坐标存于数组P中;

设计二重循环,连接起点P[i]到终点P[j]的线段。

代码实现:

voidCDiamondView::Diamond()

{

    CDC * pDC=GetDC();//设备上下文指针

 

    CRect rect;//定义矩形对象

    GetClientRect(&rect);//获得客户区矩形的大小

 

    pDC->SetMapMode (MM_ANISOTROPIC);//自定义坐标系

    pDC->SetWindowExt(rect.Width(),rect.Height());//设置窗口比例

    pDC->SetViewportExt(rect.Width(),rect.Height());//设置视区比例且y轴向上

    pDC->SetViewportOrg(rect.Width()/2,rect.Height()/2);//设置客户区中心为坐标原点

 

    rect.OffsetRect(-rect.Width()/2,-rect.Height()/2);//矩形与客户区重合

 

    CPen NewPen,*pOldPen;//定义画笔

 

    NewPen.CreatePen (PS_SOLID,1,RGB(0,0,255));//创建蓝色画笔

    pOldPen=pDC->SelectObject(&NewPen);//将蓝色画笔选人设备上下文

 

    double Alpha,Theta;

    Theta=2*PI/n;//为等分角

    Alpha=PI/2-Theta;//起始角

    //极坐标求值

    for(int i=0;i<n;i++)

    {

       P[i].x=r*cos(i*Theta+Alpha);

       P[i].y=r*sin(i*Theta+Alpha);

 

    }

//二重循环,连线(P[i]为起点,P[j]为终点)

    for(i=0;i<=n-2;i++)

    {

       for(int j=i+1;j<=n-1;j++)

       {

           pDC->MoveTo(Round(P[i].x),Round(P[i].y));

           pDC->LineTo(Round(P[j].x),Round(P[j].y));

       }

    }

 

    pDC->SelectObject(pOldPen);//恢复设备环境中的元画笔

    NewPen.DeleteObject ();//删除已成自由状态的蓝色画笔

    ReleaseDC(pDC);//释放设备指针

   

}

 

 

0 0