用MFC写文本文档的编辑字处理程序

来源:互联网 发布:小程序模版源码下载 编辑:程序博客网 时间:2024/05/08 23:13

 文本文档的编辑  想做字处理程序

通常我们所用的 words  、记事本、等等

我们建立一个MFC applicationwizard(exe)

1
选择c++文件

2
选择但文档文件,文档和其他不同的是,有一个一闪一闪的插入符,

3
 件没有插入符。我们就给他做当我们建立一个文件的时候,我们就编译一些这个工程,看到这个文插入符,现在怎么做插入符呢,我们可以在

框架类里面做,也可以在可视类里面做,在框架类是包含在可视类里面的,所以我们就做可视类里面,用消息响应的方式来做,第一我们用函

数来响应,我们在建立函数(首先是在可视化里增加)
4   
首先增加函数为CreateSolidCaret( int nWidth, int nHeight ); int nWidth,插入符的宽度 、int nHeight插入符的高度 
视类始终是覆盖在框架类之上的,我们应该在视类中去创建响应的函数,我们可以自己去添加创建响应函数, WM CREATE 我们来增加编辑代码 

然后我们创建一个插入符,CreateSolidCaret(1,20);然后编译程序,运行,看看
没有看见我们的插入符,插入符初始化的时候是隐藏的,要显示,需要调用函数,showcaret函数
插入符的大小根据我们的字体来变化,我们在word 和记事本中有体现 要让我们的插入符和字体大小一直,那我们的插入符就要获取设备描述

表文本的信息GetTextMetrics获取当前字体的一些信息,我们看到的是一个指针的变量我们将指针传给一个成员函数,来调用,看看这个结构

体,我们看看,我们需要定义结构体,
我们首先来构造一个dc  用  CClinetDC dc(this);
                          TEXETMETRIC tm;
                          dc.GetTexetMetrics(&tm);
  接着我们创建图形的插入符。我们可以利用一个函数-CreateCaret( CreateCaret( CBitmap* pBitmap );这里有一个指向Bitmap的一个指针

,我们现构造一个 CBimap
)          CBitmap bitmap; 局部的变量,当发生变化是要发生析构 最后我们将 CBitmap bitmap;剪贴到ctestview下的后面就可以了,这

样就是全局
     bitmap.LoadBitmap(IDB_BITMAP1);
            CreateCaret(&bitmap);
我们在我们的窗口输出一串文字,当我们的窗口尺寸发生变化时,我们的文字会发生重绘,我们就看不到了
CTestView::OnDraw(CDC* pDC)  OnDraw函数通过调用CDC* PDC来
要来输入一串文字,现在就介绍一个类: CString 通常我们在对一个字符串进行定义的时候,就通过,利用指针完成字符串操作的功能。 

CString str("陈蕊我爱你-郑航好爱你");
                  pDC->TextOut(50,50,str);
 //CString str("陈蕊我爱你-郑航好爱你");
 CString str;
 str="陈蕊我爱你-郑航好爱你";
 pDC->TextOut(50,50,str);

现在还有一个函数,等等看吧,
 str.LoadString(IDS_ZHENGHANG);
        pDC->TextOut(30,100,str);
2  路进程概念。圈地一个圈,我们走的轨迹,就是我们路进程。创建路进程,我们有来两个函数,BeginPath EndPath

现在获取什么呢,就是字符串的大小长度, 可用一个函数, GetTextExtent
 CSize sz=pDC->GetTextExtent(str);    pDC->Rectangle(50,50,50+sz.cx,50+sz.cy);
 这个会用画刷填充矩形,看不见了,我们接着看,接着我们划一写网格。
 for(int i=0;i<300;i+=10)
{ pDC->MoveTo(0,i);
  pDC->LineTo(300,i);
  pDC->MoveTo(i,0);
  pDC->LineTo(i,300);
}现在跟糊涂了,现在看看,这个
    SelectClipPath  这个函数将我们的绘图会有所改变,是将怎么样得的改变呢,
pDC->SelectClipath(RGM_AND)

现在我们看字符输出的消息,我们看看,我们用textout来输出的时候, 我们就不能实现,因为每次输出的时候的都要指定坐标。
我们增加WM CHAR 消息来编辑  有这个我们将完成一个输出的功能, 输出的时候我们的插入符跟着我们的光标移动的地方移动,我点到那里,

插入符就跟在那里,这样我们还需要捕获一个消息  WM LBUTTONDOWN 为了移动插入符我们可以利用一个函数来完成,SetCaretPos
    SetCaretPos( point ); 我们可以用这个函数来表示

void CTestView::OnLButtonDown(UINT nFlags, CPoint point)
{
 // TODO: Add your message handler code here and/or call default
 SetCaretPos(point);

 CView::OnLButtonDown(nFlags, point);
}

 


void CTestView::OnDraw(CDC* pDC)
{
 CTestDoc* pDoc = GetDocument();
 ASSERT_VALID(pDoc);
 // TODO: add draw code for native data here
    //CString str("陈蕊我爱你-郑航好爱你");
 CString str;
 str="陈蕊我爱你-郑航好爱你";
 pDC->TextOut(50,50,str);

 CSize sz=pDC->GetTextExtent(str);

 str.LoadString(IDS_ZHENGHANG);
    pDC->TextOut(50,150,str);
   
 
 pDC->BeginPath();
    pDC->Rectangle(50,50,50+sz.cx,50+sz.cy);
    pDC->EndPath();

for(int i=0;i<300;i+=10)
{ pDC->MoveTo(0,i);
  pDC->LineTo(300,i);
  pDC->MoveTo(i,0);
  pDC->LineTo(i,300);
  pDC->SelectClipPath(RGN_XOR);

}


}

后===