RichEdit
来源:互联网 发布:photoshop cc mac网盘 编辑:程序博客网 时间:2024/05/22 14:49
// TextHandleView.cpp : CTextHandleView 类的实现//#include "stdafx.h"// SHARED_HANDLERS 可以在实现预览、缩略图和搜索筛选器句柄的// ATL 项目中进行定义,并允许与该项目共享文档代码。#ifndef SHARED_HANDLERS#include "TextHandle.h"#endif#include "TextHandleDoc.h"#include "CntrItem.h"#include "resource.h"#include "TextHandleView.h"#ifdef _DEBUG#define new DEBUG_NEW#endif// CTextHandleViewIMPLEMENT_DYNCREATE(CTextHandleView, CRichEditView)BEGIN_MESSAGE_MAP(CTextHandleView, CRichEditView)ON_WM_DESTROY()ON_WM_CONTEXTMENU()ON_WM_RBUTTONUP()ON_WM_ENTERIDLE()ON_WM_LBUTTONDOWN()ON_WM_LBUTTONUP()ON_WM_MOUSEMOVE()END_MESSAGE_MAP()// CTextHandleView 构造/析构CTextHandleView::CTextHandleView(){// TODO: 在此处添加构造代码}CTextHandleView::~CTextHandleView(){}BOOL CTextHandleView::PreCreateWindow(CREATESTRUCT& cs){// TODO: 在此处通过修改// CREATESTRUCT cs 来修改窗口类或样式return CRichEditView::PreCreateWindow(cs);}void CTextHandleView::OnInitialUpdate(){CRichEditView::OnInitialUpdate();// 设置打印边距(720 缇 = 1/2 英寸)SetMargins(CRect(720, 720, 720, 720));}void CTextHandleView::OnDestroy(){// 析构时停用此项;这在// 使用拆分视图时非常重要 COleClientItem* pActiveItem = GetDocument()->GetInPlaceActiveItem(this); if (pActiveItem != NULL && pActiveItem->GetActiveView() == this) { pActiveItem->Deactivate(); ASSERT(GetDocument()->GetInPlaceActiveItem(this) == NULL); } CRichEditView::OnDestroy();}void CTextHandleView::OnRButtonUp(UINT /* nFlags */, CPoint point){ClientToScreen(&point);OnContextMenu(this, point);}void CTextHandleView::OnContextMenu(CWnd* /* pWnd */, CPoint point){#ifndef SHARED_HANDLERStheApp.GetContextMenuManager()->ShowPopupMenu(IDR_POPUP_EDIT, point.x, point.y, this, TRUE);#endif}// CTextHandleView 诊断#ifdef _DEBUGvoid CTextHandleView::AssertValid() const{CRichEditView::AssertValid();}void CTextHandleView::Dump(CDumpContext& dc) const{CRichEditView::Dump(dc);}CTextHandleDoc* CTextHandleView::GetDocument() const // 非调试版本是内联的{ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CTextHandleDoc)));return (CTextHandleDoc*)m_pDocument;}#endif //_DEBUG// CTextHandleView 消息处理程序BOOL CTextHandleView::PreTranslateMessage(MSG* pMsg){// TODO: 在此添加专用代码和/或调用基类if (pMsg->message == WM_KEYDOWN){if (pMsg->wParam == VK_LEFT || pMsg->wParam == VK_BACK){int nRow = 0, nCol = 0;GetCaretInfo(nRow, nCol);TRACE("nRow:%d nCol:%d\n", nRow, nCol);if (nCol == 1){return TRUE;}}}return CRichEditView::PreTranslateMessage(pMsg);}void CTextHandleView::GetCaretInfo(int &nCurrentRow, int &nCurrentCol){nCurrentRow = 0;nCurrentCol = 0;CRichEditCtrl& theCtrl = this->GetRichEditCtrl();// 获取当前行号nCurrentRow = theCtrl.LineFromChar(-1);int nLineStartPos = theCtrl.LineIndex(-1); // 首字符索引TRACE("nLineStartPos: %d\n", nLineStartPos);long nSelStart, nSelEnd;theCtrl.GetSel(nSelStart, nSelEnd);TRACE("nSelStart: %dnSelEnd: %d\n", nSelStart, nSelEnd);nCurrentCol = nSelStart - nLineStartPos + 1;/*CPoint VarCharPoint; // 指定字符的位置CPoint CurrPoint; // 当前光标位置int LineFirstIndex; // 当前行首字符位置int Length; // 当前行长度int CurrentCharIndex; // 当前编辑光标所在字符序号。int CurrentLine; // 当前编辑光标所在的行号int CurrentRow; // 当前编辑光标所在的列号CRichEditCtrl &edit = GetRichEditCtrl();CurrPoint = edit.GetCaretPos(); //获取光标位置LineFirstIndex = edit.LineIndex(-1); // 获取当前行首字符位置Length = edit.LineLength(-1); // 获取当前行长度.int i = 0;for (; i < Length; i++){VarCharPoint = edit.GetCharPos(LineFirstIndex);if (VarCharPoint.x >= CurrPoint.x){CurrentCharIndex = LineFirstIndex;break;}LineFirstIndex++;}CurrentRow = i; //列号CurrentLine = edit.LineFromChar(CurrentCharIndex); //行号*/}void CTextHandleView::OnEnterIdle(UINT nWhy, CWnd* pWho){CRichEditView::OnEnterIdle(nWhy, pWho);TRACE("OnEnterIdle");// TODO: 在此处添加消息处理程序代码}CPoint pt;void CTextHandleView::OnLButtonDown(UINT nFlags, CPoint point){// TODO: 在此添加消息处理程序代码和/或调用默认值CRichEditCtrl& theCtrl = this->GetRichEditCtrl();pt = theCtrl.GetCaretPos();CRichEditView::OnLButtonDown(nFlags, point);theCtrl.SetCaretPos(pt);}void CTextHandleView::OnLButtonUp(UINT nFlags, CPoint point){// TODO: 在此添加消息处理程序代码和/或调用默认值CRichEditView::OnLButtonUp(nFlags, point);}void CTextHandleView::OnMouseMove(UINT nFlags, CPoint point){// TODO: 在此添加消息处理程序代码和/或调用默认值CRichEditView::OnMouseMove(nFlags, point);theCtrl.SetCaretPos(pt);}
在一些交互性很强的程序中,经常需要使用CRichEditCtrl控件,但是如何进行编辑文本,如设置文本字体,颜色,链接,插入图片等等,如何进行操作,这儿就转载一篇文章,收集一些常见的问题和解决方法,说不定哪一天就用到了。我以前开发过一个聊天程序,调用了一个人开发的CMyRichEdit扩展,实现了字体,颜色,添加链接,插入图片(QQ控件)等等。
m_edit1代表ID为IDC_EDIT1的CEdit控件的control类型的变量
________________________________________
1.设置edit只读属性
________________________________________
2.判断edit中光标状态并得到选中内容(richedit同样适用)
________________________________________
3.在edit最后添加字符串
________________________________________
4.随输入自动滚动到最后一行(richedit同样适用)
________________________________________
5.如何限制edit输入指定字符
________________________________________
6.如何使用richedit
________________________________________
7.如何使用richedit2.0 or richedit3.0
________________________________________
8.改变richedit指定区域的颜色及字体
________________________________________
9.设置行间距(只适用于richedit2.0)
________________________________________
10.richedit插入位图
Q220844:How to insert a bitmap into an RTF document using the RichEdit control in Visual C++ 6.0
http://support.microsoft.com/default.aspx?scid=kb;en-us;220844
http://www.codeguru.com/Cpp/controls/richedit/article.php/c2417/
http://www.codeguru.com/Cpp/controls/richedit/article.php/c5383/
________________________________________
11.richedit插入gif动画
http://www.codeproject.com/richedit/AnimatedEmoticon.asp
________________________________________
12.richedit嵌入ole对象
http://support.microsoft.com/kb/141549/en-us
________________________________________
13.使richedit选中内容只读
http://www.codeguru.com/cpp/controls/richedit/article.php/c2401/
________________________________________
14.打印richedit
http://www.protext.com/MFC/RichEdit3.htm
________________________________________
15.richeidt用于聊天消息窗口
http://www.vckbase.com/document/viewdoc/?id=1087
http://www.codeproject.com/richedit/chatrichedit.asp
http://www.codeguru.com/Cpp/controls/richedit/article.php/c2395/
________________________________________
16.解决richedit的EN_SETFOCUS和EN_KILLFOCUS无响应的问题
http://support.microsoft.com/kb/181664/en-us
________________________________________
17.richedit拼写检查
http://www.codeproject.com/com/AutoSpellCheck.asp
________________________________________
18.改变edit背景色
Q117778:How to change the background color of an MFC edit control
http://support.microsoft.com/kb/117778/en-us
________________________________________
19.当edit控件的父窗口属性是带标题栏WS_CAPTION和子窗口WS_CHILD时,不能设置焦点SetFocus
Q230587:PRB: Can't Set Focus to an Edit Control When its Parent Is an Inactive Captioned Child Window
http://support.microsoft.com/kb/230587/en-us
________________________________________
20. 在Edit中回车时,会退出对话框
选中Edit的风格Want Return。
MSDN的解释如下:
ES_WANTRETURN Specifies that a carriage return be inserted when the user presses the ENTER key while entering text into a multiple-line edit control in a dialog box. Without this style, pressing the ENTER key has the same effect as pressing the dialog box's default pushbutton. This style. has no effect on a single-line edit control.
________________________________________
21. 动态创建的edit没有边框的问题
0 0
- RichEdit
- richedit
- RichEdit
- RichEdit
- richedit
- RichEdit
- RichEdit
- RichEdit
- RichEdit
- RichEdit到RichEdit复制
- RichEdit CTRL
- RichEdit 版本
- RichEdit 小结...
- Richedit常见问题
- RichEdit 小结....
- RichEdit 小结
- RichEdit超链接
- 使用RICHEDIT
- 1046. Shortest Distance (20)
- WebKit之多进程模型
- MySQL 创建、修改和删除表
- 最简单的贪心
- WebKit之消息循环
- RichEdit
- 记一次PHP开发过程中,json_decode返回null的解决情况
- WebKit之多线程模型
- WebKit之多进程模型2
- CSS中float的要点
- java中String的常用方法
- 大白话系列之C#委托与事件讲解(一)
- Android项目使用support v7时遇到的各种问题
- Chapter 6-01