利用文档类处理数据的程序MFC

利用文档类处理数据

    当视窗需要重画时,视类中的OnDraw () 函数被调用,因此要在OnDraw() 函数中添加画线和显示字符的代码。

程序中添加了一个类Cline,用来存放所画线段的信息,而输入的字符(通过OnChar函数)则保存在CStringList类的对象中。

    上述处理的具体步骤如下:

1. 添加Cline

(1)在添加新类对话框中完成新类的添加

  1. 执行Insert|New Class,弹出“New Class”对话框;
  2. 在“New Class”对话框中选择类的类型并输入类名:

 type: Generic Class

         Class Name: Cline

  1. 单击“OK”按纽。

(2)为Cline类添加数据成员

添加两个类型为CPoint的数据成员,m_ptStart和m_ptEnd,用来记录线段的起点和终点。

(3)修改Cline类的构造函数Cline(CPoint pt1,CPoint pt2)

在该函数中添加以下代码:

    m_ptStart.x=pt1.x;

    m_ptStart.y=pt1.y;

    m_ptEnd.x=pt2.x;

    m_ptEnd.y=pt2.y;

(4)为Cline类添加画线函数Draw()

其代码如下:

void Cline::Draw(CDC *pDC)

{

    pDC->MoveTo(m_ptStart);

pDC->LineTo(m_ptEnd);

}

2. 在文档类(Doc类)中添加保存数据的变量

public:

    CString m_strLastLine;//存放屏幕上最后一行字符

    CStringList m_strList; //存放屏幕上最后一行除外的所有字符

    CPtrList m_LineList; //链表类型成员,存放画在屏幕上的所线段

    注:CString是MFC中的字符串类(MFC的通用类之一,其他的通用类还有:数组类、链表类、日期和时间类、CPoint类、CSize类以及CRect类等)。

3. 修改视类成员函数OnButtonUp()和OnChar()

(1)在视类的源程序文件中(例如p2View.cpp)包含Cline类的头文件

    #include “Line.h”

     操作:

  1. 在VC IDE的“WorkSpace”窗口中选择“File View”页;
  2. 展开“Source File”文件夹;
  3. 双击视类的源程序文件,即可进入对该文件的编辑状态;
  4. 添加代码。

(2)修改OnButtonUp()函数,以便在画线结束后将该线段保存在文挡类的成员变量m_LineList中

该函数修改后的代码如下:

void CP2View::OnLButtonUp(……)

{

    if (m_bMouseDown)

    {

          …..

          dc.LineTo(point);

          CP2Doc *pDoc=GetDocument();//得到文挡类指针

          CLine *pLine=new Cline(m_ptStart,point);//创建Cline对象

          pDoc->m_LineList.AddTail((void *) pLine);//pLine加入到链表中

}

    ……

}

(3)修改OnChar()函数,以便每输入一行字符后,将其保存在文档类的成员m_strList中

该函数修改后的代码如下:

void P2View::OnChar(……)

{

    CP2Doc *pDoc=GetDocument();

    if (nChar==VK_RETURN)

    {

        pDoc->m_strList.AddTail(m_strDisplay);

pDoc->m_strLastLine.Empty ();

m_strDisplay.Empty ();;

……

}

else if (m_strDisplay.GetLength ()<64)

{

    m_strDisplay += nChar;

    pDoc->m_strLastLine=m_strDisplay;

}

……

}

4. 在文档类中添加重画线段和重写文本的函数

    重画线段函数:DrawLine;

    重写文本的函数:DrawText

(1)在p2Doc.cpp中包含Cline类的头文件

    #include “Line.h”

(2)添加重画线段函数DrawLine()

添加操作(略)

DrawLine()的代码:

void CP2Dow::DrawLine (CDC *pDC)

{

    CLine *pLine;

    POSITION pos=m_LineList.GetHeadPosition() ;

    for ( ;pos !=NULL;m_LineList.GetNext (pos))

    {

        pLine=(CLine *) m_LineList.GetAt(pos);

        pLine->Draw(pDC) ;

    }

}

(3)添加重显字符函数DrawText()函数

添加操作(略)

DrawText()函数的代码:

void CP2Dow::DrawText (CDC *pDC)

{

    TEXTMETRIC tm ;

    pDC->GetTextMetrics (&tm) ;

    int nLineHeight = tm.tmHeight + tm.tmExternalLeading;

    CString str ;

    Int line =0;

    POSITION pos = m_strList.GetHeadPosition ();

    for (;pos!=NULL;m_strList.GetNext (pos));

    {

        str = m_strList.GetAt (pos);

        pDC->TextOut (0,line *nLineHeight,str);

line++;
    }

 pDC->TextOut (0,line *nLineHeight,m_strLastLine);

}

5. 修改视类成员函数OnDraw()

当视窗需要重画时,OnDraw()被调用,因此在该函数中增加显示线段和字符的代码:

void CP2View::OnDraw(CDC *pDC)

{

    ……

    //TODO:add draw code for native data here

   pDoc->DrawLine(pDC);//重画线段

   pDoc->DrawText(pDC);//重显字符

   ……

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值