您的位置:首页 > 其它

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

2010-10-08 03:58 274 查看
文本文档的编辑 想做字处理程序

通常我们所用的 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);

}

}

后===
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: