C++编程逻辑讲解step by step:利用文档类处理数据
创始人
2024-12-28 11:40:34
0

当视窗口需要重画时,视类中的OnDraw() 函数被调用,因此要在OnDraw() 函数中添加画线和显示字符的代码。程序中添加了一个类Cline,用来存放所画线段的信息,而输入的字符(通过OnChar函数)则保存在CStringList类的对象中。
    上述处理的具体步骤如下:
1.    添加Cline类
(1)在添加新类对话框中完成新类的添加
     Insert|New Class
     Class type:Generic Class
     Class Name:Cline
     OK
(2)为Cline类添加两个类型为CPoint的数据成员,m_ptStart和m_ptEnd,用来记录线段的起点和终点。
(3)添加构造函数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)添加画线函数Draw(),其代码如下:
void Cline::Draw(CDC *pDC)
{
    pDC->MoveTo(m_ptStart);
pDC->LineTo(m_ptEnd);
}
2.    在文档类中添加保存数据的变量
public:
    CString m_strLastLine;//用来屏幕上最后一行字符
    CStringList m_strList; //存放屏幕上最后一行除外的所有字符
    CPtrList m_LineList; //链表类型成员,存放画在屏幕上的所线段
3.    修改视类成员函数OnButtonUp()和OnChar()
(1)在p2View.cpp中包含Cline类的头文件。
    #include “Line.h”
(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.    在文档类中添加重画线段和重写文本的函数
(1)在p2Doc.cpp中包含Cline类的头文件。
    #include “Line.h”
(2)重画线段函数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()函数的代码如下:
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);//重显字符
   ……
}
 

相关内容

热门资讯

方式辅助!闽游app辅助器可信... 方式辅助!闽游app辅助器可信(辅助挂)切实是有辅助攻略(有挂秘笈);闽游app辅助器可信脚本下载中...
妙计辅助!四川途游辅助(辅助挂... 妙计辅助!四川途游辅助(辅助挂)真是存在有辅助挂(有挂技巧)一、四川途游辅助游戏安装教程牌型概率发牌...
阶段辅助!欢乐情怀开挂(辅助挂... 阶段辅助!欢乐情怀开挂(辅助挂)都是真的是有辅助器(有挂助手)进入游戏-大厅左侧-新手福利-激活码辅...
演示辅助!潮友会鱼虾蟹辅助(辅... 您好,潮友会鱼虾蟹辅助这款游戏可以开挂的,确实是有挂的,需要了解加去威信【485275054】很多玩...
绝活儿辅助!广东雀神智能插件是... 绝活儿辅助!广东雀神智能插件是真的(辅助挂)其实是有辅助软件(存在有挂)1、广东雀神智能插件是真的公...
绝活辅助!天天爱消除自动消除辅... 绝活辅助!天天爱消除自动消除辅助(辅助挂)一贯是有辅助工具(有挂透明挂);运天天爱消除自动消除辅助辅...
模块辅助!凑一桌关春天怎么才能... 模块辅助!凑一桌关春天怎么才能开挂(辅助挂)果然真的有辅助挂(有挂技术)1、凑一桌关春天怎么才能开挂...
模块辅助!聚友联盟辅助器(辅助... 模块辅助!聚友联盟辅助器(辅助挂)一直真的是有辅助器(证实有挂)1、起透看视 聚友联盟辅助器辅助软件...
指引辅助!途游小程序辅助器(辅... 指引辅助!途游小程序辅助器(辅助挂)果然确实有辅助神器(新版有挂)1、在途游小程序辅助器插件功能辅助...
阶段辅助!手机卡五星辅助软件(... 阶段辅助!手机卡五星辅助软件(辅助挂)确实是真的有辅助方法(确实有挂)1、手机卡五星辅助软件免费辅助...