




已阅读5页,还剩2页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
单文档的文本编辑器最简单的就是用应用程序向导生成的时候,在最后一步选择的视类的基类为CEditView。另外,下文是一种比较通用的做法:I、用VC+ MFC做文本编辑器(单文档模式)原来做过一个用对话框实现的文本编辑器,其实用MFC模板里面的单文档模板也可以做,甚至更加方便,适合入门级的爱好者试试,现介绍方法如下:1,首先新建一个工程,选择MFC AppWizard(exe),定名字为:textview_1,程序类型选择单个文档,其他均默认完成。2,在系统自动生成的CTextview_1Doc类里面增加一个控件,用于文本文档的暂时存放:class CTextview_1Doc : public CDocument .public: CStringArray m_strContent;然后在CTextview_1Doc类的Serialize函数里面增加打开、保存文本文件的程序:/ CTextview_1Doc serializationvoid CTextview_1Doc:Serialize(CArchive& ar) CString str; if (ar.IsStoring() / TODO: add storing code here int nLines = (int)m_strContent.GetSize(); for ( int i=0; iCreate( ES_MULTILINE | WS_CHILD | WS_VISIBLE | WS_HSCROLL | ES_AUTOHSCROLL/ 自动水平滚动 /*如要自动断行,则这一行样式应丢弃*/| WS_VSCROLL | ES_AUTOVSCROLL ,/ 自动垂直滚动rcClient, this, 201); / 创建多行编辑控件(父窗口是视图,201是本控件的ID)CTextview_1Doc* pDoc = GetDocument();/ 获取与视图相关联的文档指针/ 以下是将文档中的m_strContent内容全部赋给strCString str;int nLines = (int)pDoc-m_strContent.GetSize();for ( int i=0; im_strContent.GetAt( i );str = str + rn;/ 换行m_ctrlEdit-SetTabStops( 16 );/ 设置Tab符大小m_ctrlEdit-SetWindowText( str );/ 将文档内容传给控件4,现在运行一下,文本编辑器就做好了。5,当然,现在的文本编辑器很不好用,因为不能滚动窗口。而且不会随窗口的大小变化,因此需要增加一些代码。鼠标停在CTextview_1View上点击右键,在弹出菜单中选择:Add Window Message Handle,在弹出的窗口中,选择WM_SIZE消息,并点击“Add & Edit”按钮,在生成的函数中添加以下内容:void CTextview_1View:OnSize(UINT nType, int cx, int cy) CView:OnSize(nType, cx, cy);/ TODO: Add your message handler code hereCRect rcClient;GetClientRect( rcClient );if ( m_ctrlEdit )m_ctrlEdit-MoveWindow( rcClient );/ 改变编辑控件窗口大小6,再运行,一个象模象样的编辑器生成了。下面,在上述代码生成的程序基础上进行修改,增加功能:在显示窗口双击,则弹出字体窗口,选择字体后,会自动用该字体更新窗口文字的显示字体。每次双击时,字体对话框中都是当前使用的字体信息。7. 首先,为了要在Edit窗口响应鼠标双击消息,应进行子类化:即由CEdit生成派生类CMyEdit,然后在该派生类中添加鼠标双击消息处理函数。 (1) 在类向导中添加新类CMyEdit, 共有派生自CEdit。在其中添加两个成员变量public:CFont m_font;LOGFONT m_lf; 用来创建字体和保存当前的字体信息。(2) 在视图类的定义.h文件中修改m_ctrlEdit的定义为 CMyEdit * m_ctrlEdit;(3) 修改视图类的OnInitialUpdate 函数为:/ CTextview_1View message handlersvoid CTextview_1View:OnInitialUpdate() CView:OnInitialUpdate(); / TODO: Add your specialized code here and/or call the base class CRect rcClient; GetClientRect( rcClient ); / 获取当前视图的客户区大小 if ( m_pCtrlEdit ) delete m_ctrlEdit; m_ctrlEdit= new CMyEdit(); m_ctrlEdit-Create( ES_MULTILINE | WS_CHILD | WS_VISIBLE |ES_WANTRETURN /* | WS_HSCROLL | ES_AUTOHSCROLL / 自动水平滚动*/ | WS_VSCROLL | ES_AUTOVSCROLL , / 自动垂直滚动 rcClient, this, 201); / 创建多行编辑控件 CTextview_1Doc* pDoc = GetDocument(); / 获取与视图相关联的文档指针 / 以下是将文档中的m_strContent内容全部赋给str CString str; int nLines = (int)pDoc-m_strContent.GetSize(); for ( int i=0; im_strContent.GetAt( i ); str = str + rn; / 换行(CString会自动吃掉回车换行符) m_ctrlEdit-SetTabStops( 16 ); / 设置Tab符大小 m_ctrlEdit-SetWindowText( str ); / 将文档内容传给控件(4) 为CMyEdit的鼠标左键双击消息添加处理函数,以利用字体对话框设置和创建字体:/ CMyEdit message handlersvoid CMyEdit:OnLButtonDblClk(UINT nFlags, CPoint point) / TODO: Add your message handler code here and/or call default CFontDialog dlg(&m_lf); if(dlg.DoModal()=IDOK) /memcpy(&m_lf, dlg.m_cf.lpLogFont, sizeof(LOGFONT); dlg.GetCurrentFont(&m_lf); m_font.DeleteObject(); m_font.CreateFontIndirect(&m_lf); SetFont(&m_font); CEdit:OnLButtonDblClk(nFlags, point);(5) 设置编辑框初始显示时使用的字体,为CMyEdit的WM_CREATE消息添加处理函数:/创建编辑框,此时设置显示用的默认字体为宋体int CMyEdit:OnCreate(LPCREATESTRUCT lpCreateStruct) if (CEdit:OnCreate(lpCreateStruct) = -1) return -1; / TODO: Add your specialized creation code here /创建使用的默认字体 memset(&m_lf, 0, sizeof(LOGFONT); m_font.CreateFont( 16, / nHeight 0, / nWidth 0, / nEscapement 0, / nOrientation FW_NORMAL,/*FW_BOLD,*/ / nWeight FALSE, / bItalic FALSE, / bUnderline 0, / cStrikeOut DEFAULT_CHARSET, / nCharSet OUT_DEFAULT_PRECIS, / nOutPrecision CLIP_DEFAULT_PRECIS, / nClipPrecision DEFAULT_QUALITY, / nQuality DEFAULT_PITCH | FF_SWISS, / nPitchAndFamily TEXT( 宋体); m_font.GetLogFont(&m_lf); / 保存设置的字体参数到结构中 SetFont(&m_font); return 0;OK,到此完成了:双击弹出设置字体窗口,设置字体后,显示窗口会自动刷新,用新字体来显示。参考:II、VC怎么触发文本框双击事件?标签:vc,文本框,事件 /z/q136107229.htmkiss_xiao/ty 回答:1 人气:1 解决时间:2009-06-11 11:15 对控件进行子类化,以6.0为例,插入 - 类,在类类型选择MFC Class,输入类名,如CMyEdit,Base Class选择CEdit,确定,再在类视图中点击CMyEdit右键,选择Add Windows Message Handles,选择WM_LBUTTONDBLCLK鼠标左键双击事件,重载这个函数,接着为你需要添加双击事件的Edit控件添加控件变量,类名为CMyEdit提问人的追问 2009-06-11 09:25 月儿的答案我考虑过了,我也自己继承了CEdit这个类,然后添加了双击事件,但是假如我有10个cedit控件,我不能把这个10个要执行的函数都写着个类里面把,因为窗体捕获不到edit控件是否双击啊回答人的补充 2009-06-11 09:29 你都没有看完我写的,添加控件变量,以派生的类名作为控件类,通过这个操作后,DDX_Control会对控件进行消息映射,这样你双击控件自然会触发派生类中双击事件的发生,这样的你绑定100个edit都会触发这个事件。通过GetDlgCtrlID可以知道哪个Edit触发的双击事件III、VC如何修改编辑框内的字体?(原创)总言之,就是调用控件类CEdit(或其子类CMyEdit)的对象的SetFont方法,传入事先创建好的字体对象的指针,来设置字体。笔者采用了子类化的方法,由CEdit共有派生出CMyEdit。开始时编辑框使用的默认字体可以在CMyEdit的OnCreate方法中生成并调用SetFont设置。如果编辑框是对话框的控件,则首先通过编辑框的ID调用CWnd:GetDlgItem 函数获得编辑框控件的窗体指针:CWnd* GetDlgItem( int nID ) const;因为这是一个CEdit(或其子类如CMyEdit)的对象,也是一个CWnd的对象。所以利用刚获得的指针便可以调用CWnd:SetFont函数即可设置控件字体。函数原型为:void SetFont( CFont* pFont, BOOL bRedraw = TRUE );当然,如果在I、中使用子类化CMyEdit的对象指针,那么,可以在CMyEdit类添加字体成员变量CFont m_font; LOGFONT m_lf;那么,就可以在CMyEdit的构造函数中,加入以下代码(示例)来设置默认显示字体(也可把这些代码移入到OnCreate中,并在其中调用SetFont函数设置字体)。CMyEdit:CMyEdit() memset(&m_lf, 0, sizeof(LOGFONT); m_font.CreateFont( 16, / nHeight 创建字体 0, / nWidth 0, / nEscapement 0, / nOrientation FW_BOLD, / nWeight FALSE, / bItalic FALSE, / bUnderline 0, / cStrikeOut DEFAULT_CHARSET, / nCharSet OUT_DEFAULT_PRECIS, / nOutPrecision CLIP_DEFAULT_PRECIS, / nClipPrecision DEFAULT_QUALITY, / nQuality DEFAULT_PITCH | FF_SWISS, / nPitchAndFamily TEXT( 楷体_GB2312); / 楷体lfFacename m_font.GetLogFont(&m_lf); /填充LOGFONT结构体这两个变量m_font和m_lf的引入是为了持久化。当双击鼠标左键时其中,MSDN是这样定义CreateFont函数的:CFont:CreateFontThis method initializes a CFont object with the specified characteristics. The font can subsequently be selected as the font for any device context.(参数含义见MSDN)BOOL CreateFont(int nHeight,int nWidth,int nEscapement,int nOrientation,int nWeigh
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 高空探测基础知识培训课件
- 高空作业安全知识培训课件
- 北京期末语文考试题目及答案
- TK-684-生命科学试剂-MCE
- D-Arabitol-d7-生命科学试剂-MCE
- SB-3CT-Standard-生命科学试剂-MCE
- 园林绿化考试题及答案
- 变形观测考试题及答案
- 病原考试题及答案
- 保安考试试卷大题题库及答案
- 《网络综合布线系统工程技术实训教程(第5版)》 课件 第2章 网络综合布线系统工程技术常用标准
- 2024年秋季新外研版七年级英语上册教学计划
- 高一语文开学第一课课件
- 2024-2030年中国汽车金融行业市场深度分析及竞争格局与发展前景展望研究报告
- 光伏组件回收再利用建设项目可行性研究报告写作模板-拿地申报
- JGT163-2013钢筋机械连接用套筒
- HIV感染产妇分娩母婴阻断演练脚本
- 《公路桥梁施工监控技术规程》(JTGT3650-01-2022)
- 血气分析标本采集及结果判读
- 科技园区建设规划
- 2024广西公需课高质量共建“一带一路”谱写人类命运共同体新篇章答案
评论
0/150
提交评论