用RichEditCtrl写的一个读取.rtf格式的程序(rtfdemo)
来源:互联网 发布:find ubuntu 编辑:程序博客网 时间:2024/05/14 08:26
一部分
// rtfdemoView.h : CrtfdemoView 类的接口
//
#pragma once
#include "afxcmn.h"
class CrtfdemoView : public CView
{
protected: // 仅从序列化创建
CrtfdemoView();
DECLARE_DYNCREATE(CrtfdemoView)
// 属性
public:
CrtfdemoDoc* GetDocument() const;
// 操作
public:
// 重写
public:
virtual void OnDraw(CDC* pDC); // 重写以绘制该视图
virtual BOOL PreCreateWindow(CREATESTRUCT& cs);
protected:
virtual BOOL OnPreparePrinting(CPrintInfo* pInfo);
virtual void OnBeginPrinting(CDC* pDC, CPrintInfo* pInfo);
virtual void OnEndPrinting(CDC* pDC, CPrintInfo* pInfo);
// 实现
public:
virtual ~CrtfdemoView();
#ifdef _DEBUG
virtual void AssertValid() const;
virtual void Dump(CDumpContext& dc) const;
#endif
protected:
// 生成的消息映射函数
protected:
DECLARE_MESSAGE_MAP()
public:
CRichEditCtrl m_rich;
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
afx_msg void OnSize(UINT nType, int cx, int cy);
afx_msg void OnRtfopen();
bool IsValidFilename(CString const& strFilename);
void ReadRTFDocument(CString const& strFilename);
CString m_strFilename;
};
#ifndef _DEBUG // rtfdemoView.cpp 的调试版本
inline CrtfdemoDoc* CrtfdemoView::GetDocument() const
{ return reinterpret_cast<CrtfdemoDoc*>(m_pDocument); }
#endif
二部分
// rtfdemoView.cpp : CrtfdemoView 类的实现
//
#include "stdafx.h"
#include "rtfdemo.h"
#include "rtfdemoDoc.h"
#include "rtfdemoView.h"
#include "./rtfdemoview.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
static DWORD CALLBACK MyStreamInCallback(DWORD dwCookie, LPBYTE pbBuff, LONG cb, LONG *pcb)
{
CFile* pFile = (CFile*) dwCookie;
*pcb = pFile->Read(pbBuff, cb);
return 0;
}
// CrtfdemoView
IMPLEMENT_DYNCREATE(CrtfdemoView, CView)
BEGIN_MESSAGE_MAP(CrtfdemoView, CView)
// 标准打印命令
ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview)
ON_WM_CREATE()
ON_WM_SIZE()
ON_COMMAND(ID_RTFOPEN, OnRtfopen)
END_MESSAGE_MAP()
// CrtfdemoView 构造/析构
CrtfdemoView::CrtfdemoView()
: m_strFilename(_T(""))
{
// TODO: 在此处添加构造代码
}
CrtfdemoView::~CrtfdemoView()
{
}
BOOL CrtfdemoView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: 在此处通过修改 CREATESTRUCT cs 来修改窗口类或
// 样式
return CView::PreCreateWindow(cs);
}
// CrtfdemoView 绘制
void CrtfdemoView::OnDraw(CDC* /*pDC*/)
{
CrtfdemoDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return;
// TODO: 在此处为本机数据添加绘制代码
}
// CrtfdemoView 打印
BOOL CrtfdemoView::OnPreparePrinting(CPrintInfo* pInfo)
{
// 默认准备
return DoPreparePrinting(pInfo);
}
void CrtfdemoView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: 打印前添加额外的初始化
}
void CrtfdemoView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: 打印后添加清除过程
}
// CrtfdemoView 诊断
#ifdef _DEBUG
void CrtfdemoView::AssertValid() const
{
CView::AssertValid();
}
void CrtfdemoView::Dump(CDumpContext& dc) const
{
CView::Dump(dc);
}
CrtfdemoDoc* CrtfdemoView::GetDocument() const // 非调试版本是内联的
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CrtfdemoDoc)));
return (CrtfdemoDoc*)m_pDocument;
}
#endif //_DEBUG
// CrtfdemoView 消息处理程序
int CrtfdemoView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
CRect rect(0,0,0,0);
if (CView::OnCreate(lpCreateStruct) == -1)
return -1;
// TODO: 在此添加您专用的创建代码
m_rich.Create(ES_MULTILINE |ES_AUTOVSCROLL |ES_WANTRETURN |
WS_CHILD|WS_VISIBLE|WS_VSCROLL,rect,this,1);
return 0;
}
void CrtfdemoView::OnSize(UINT nType, int cx, int cy)
{
CRect rect;
CView::OnSize(nType, cx, cy);
// TODO: 在此处添加消息处理程序代码
GetClientRect(rect);
m_rich.SetWindowPos(&wndTop,0,0,rect.right -rect.left ,rect.bottom -rect.top ,SWP_SHOWWINDOW);
}
void CrtfdemoView::OnRtfopen()
{
// TODO: 在此添加命令处理程序代码
CFileDialog m_findDlg(TRUE);
//m_findDlg.m_ofn.lpstrFilter = "RTF Documents (*.RTF)/0*.rtf/0/0";
m_findDlg.m_ofn.lpstrFilter = "RTF Documents (*.RTF)/0*.rtf/0/0";
if (IDOK == m_findDlg.DoModal())
{
if (IsValidFilename(m_findDlg.GetFileName()))
{
m_strFilename = m_findDlg.GetPathName();
UpdateData(FALSE);
ReadRTFDocument(m_strFilename);
}
else
{
AfxMessageBox("Invalid file name");
}
}
}
bool CrtfdemoView::IsValidFilename(CString const& strFilename)
{
BOOL bSuccess = FALSE;
if (4 < strFilename.GetLength())
{
CString str = strFilename.Right(4);
if (0 == str.CompareNoCase(".RTF"))
bSuccess = TRUE;
}
return bSuccess;
}
void CrtfdemoView::ReadRTFDocument(CString const& strFilename)
{
CFile file(strFilename, CFile::modeRead);
EDITSTREAM es;
es.dwCookie = (DWORD) &file;
es.pfnCallback = MyStreamInCallback;
m_rich.StreamIn(SF_RTF, es);
}
三部分
作为例子,这个程序有很多值得细细学习的地方,很细节的东东噢!我还在查MSDN找这里面的比较生僻的函数和结构。
- 用RichEditCtrl写的一个读取.rtf格式的程序(rtfdemo)
- RichTextBox中的RTF格式的读取和保存
- RichEditCtrl的使用经验
- RichEditCtrl的使用经验
- 用C写的一个读取BIOS时间的程序
- 通过java程序写的一个调色板(rgb格式)
- RichEdit读取rtf格式
- RTF格式的深入研究
- DOCX到RTF格式的转换器DOCX to RTF Converter
- (1) 写一个 Properties 格式的配置文件,配置类的完整名称。 * (2) 写一个程序,读取这个 Properties 配置文件,获得类的完整名称并加载这个类,用 反射 的方式运行
- C写的一个读取BIOS时间的程序
- RTF与RTFD格式的文件
- vc向richedit控件写RTF格式内容(表格)
- 获取RichEditCtrl图片及如何使用在你的程序中~
- Java中存取Rtf文件的程序
- Java中存取Rtf文件的程序
- 用ASP写的一个转换程序
- 用java写的一个压缩程序
- 评测主流网站统计系统
- Ubuntu 7.10安装Realplayer[00整理]
- 如何在 ASP.NET 中下载文件
- 说说我的工作
- 浅谈C中的wprintf和宽字符显示
- 用RichEditCtrl写的一个读取.rtf格式的程序(rtfdemo)
- 坚强*独立
- Oracle心得2
- 浪费生命
- struts1.1和hibernate3.0和spring1.2集成
- 有关UNICODE、ANSI字符集和相关字符串操作的总结!
- 这个网站 精确的北京时间 是如何获取的
- jsp内置对象详解
- Div+Css酷站一箩筐