类似MSN信息发送框的制作(上)

一、引言

用 MSN 和 QQ 等聊天的时候,当用户输入特定意义的字符串时,系统回自动用一张小图片替代.比如输入" : ) "系统

会用一个小笑脸代替。我要实现的就是这样一个信息输入框 。这个信息输入框由两部分组成:图案选择器和多功能文本框。本篇介绍多功能文本框。

二、原理简介

1、主要功能用CRichEditCtrl实现,像设置字体,设置字体颜色,字号等等CRichEditCtrl都提供了很完善的支持,我就不一一赘述了。

CRichEditCtrl 主要的不足在于以下几个方面:

  • (1).没有右键菜单
  • (2).不能插入图片(这是实现转义字符显示的关键)
  • (3).RTF格式输入输出不够方便(涉及到回调函数的递归调用)

    我扩展了CRichEditCtrl类CRichEditCtrlEx实现了上述功能.参考了很多网上的文章,对所有公开源码的开发人员表示崇高的敬意!!

    2、实现右键菜单:

    ///生成右键菜单

    void CRichEditCtrlEx::OnRButtonUp(UINT nFlags, CPoint point)
    {
       // TODO: Add your message handler code here and/or call default
       //设置为焦点
       SetFocus();
       //创建一个弹出式菜单
       CMenu popmenu;
       popmenu.CreatePopupMenu();
       //添加菜单项目
       popmenu.AppendMenu(0, ID_RICH_UNDO, "&Undo");
       popmenu.AppendMenu(0, MF_SEPARATOR);
       popmenu.AppendMenu(0, ID_RICH_CUT, "&Cut");
       popmenu.AppendMenu(0, ID_RICH_COPY, "C&opy");
       popmenu.AppendMenu(0, ID_RICH_PASTE, "&Paste");
       popmenu.AppendMenu(0, ID_RICH_CLEAR, "C&lear");
       popmenu.AppendMenu(0, MF_SEPARATOR);
       popmenu.AppendMenu(0, ID_RICH_SELECTALL, "Select &All");
       popmenu.AppendMenu(0, MF_SEPARATOR);
       popmenu.AppendMenu(0, ID_RICH_SETFONT, "Select &Font");
      
       //初始化菜单项
       UINT nUndo=(CanUndo() ? 0 : MF_GRAYED );
       popmenu.EnableMenuItem(ID_RICH_UNDO, MF_BYCOMMAND|nUndo);
      
       UINT nSel=((GetSelectionType()!=SEL_EMPTY) ? 0 : MF_GRAYED) ;
       popmenu.EnableMenuItem(ID_RICH_CUT, MF_BYCOMMAND|nSel);
       popmenu.EnableMenuItem(ID_RICH_COPY, MF_BYCOMMAND|nSel);
       popmenu.EnableMenuItem(ID_RICH_CLEAR, MF_BYCOMMAND|nSel);
      
       UINT nPaste=(CanPaste() ? 0 : MF_GRAYED) ;
       popmenu.EnableMenuItem(ID_RICH_PASTE, MF_BYCOMMAND|nPaste);
      
       //显示菜单
       CPoint pt;
       GetCursorPos(&pt);
       popmenu.TrackPopupMenu(TPM_RIGHTBUTTON, pt.x, pt.y, this);
       popmenu.DestroyMenu();
       CRichEditCtrl::OnRButtonDown(nFlags, point);
       CRichEditCtrl::OnRButtonUp(nFlags, point);
    }

    3、关于如何把图片插入到RichEdit中,国外由很多文章介绍,都是(我看到的都是)通过插入OLE对象来实现.主要用两个函数,还涉及到了和多接口的调用。

时间: 2024-09-30 08:12:01

类似MSN信息发送框的制作(上)的相关文章

类似MSN带转义字符的信息发送框的制作(下)

一.实现了上回说到的多功能文本框之后,接下去的任务就是做一个表情符号选择器.CIconPicker. 说明:本来是想实现图标选择的,但是后来有需要改成了位图选择器,但是类名没有改过来,还是叫 CIconPicker.附带工程中有图标选择器. 二.图标/位图选择器(以下简称选择器)的实现原理 当用户按下选择器的时候,应该把所有的图像用一个图片列表显示出来:如果用户选择了其中一个图片,则记录该图片的编号,并把图片列表关闭.如果用户没有选择图片 ,那么直接把图片列表关闭 ( 响应 WM_KILLFOC

打开服务器上的 IncludeExceptionDetailInFaults (从 ServiceBehaviorAttribute 或从 <serviceDebug> 配置行为)以便将异常信息发送回

在调试wcf程序的时候,有时会遇到下面的错误: System.ServiceModel.FaultException: 由于内部错误,服务器无法处理该请求.有关该错误的详细信息,请打开服务器上的 IncludeExceptionDetailInFaults (从 ServiceBehaviorAttribute 或从 <serviceDebug> 配置行为)以便将异常信息发送回客户端,或在打开每个 Microsoft .NET Framework 3.0 SDK 文档的跟踪的同时检查服务器跟踪

Word2007文档框怎么制作

  Word2007文档框怎么制作          第一步:新建一个Word2007文档,在菜单栏中找到插入选项,然后在其相应的工具栏中点文本框,在文档框的选项中,我们可以只选最简单的文本框,下来再根据自己的意愿进行设置 第二步:然后在编辑页面出现一个文本框,提示要文本框中输入文字信息 第三步:我们在文本框中输入档案1,文字方向由默认是横向.如果要改变成纵向,则点击工具栏中的文字方向按钮 第四步:然后文本框和文字方向都就改变成了纵向,如图所示 第五步:如果看着这个文本框比较呆板,可以改变一下形

JavaScript中输出信息的方法(信息确认框-提示输入框-文档流输出)_javascript技巧

js中输出信息的方法内容如下所示: 1.文档流输出 document.write('hello'); 2.输出信息提示框 模态对话框 window.alert('要输出显示的内容'); 或 alert('要输出显示的内容'); alert(n); 3.信息确认框 var f = window.confirm('是否要进入新浪网'); confirm(""); if(f){ location.href = 'http://www.sina.com.cn'; } 4.提示输入框 windo

Android实现将应用崩溃信息发送给开发者并重启应用的方法_Android

本文实例讲述了Android实现将应用崩溃信息发送给开发者并重启应用的方法.分享给大家供大家参考,具体如下: 在开发过程中,虽然经过测试,但在发布后,在广大用户各种各样的运行环境和操作下,可能会发生一些异想不到的错误导致程序崩溃.将这些错误信息收集起来并反馈给开发者,对于开发者改进优化程序是相当重要的.好了,下面就来实现这种功能吧. (更正时间:2012年2月9日18时42分07秒) 由于为历史帖原因,以下做法比较浪费,但抓取异常的效果是一样的. 1.对于UI线程(即Android中的主线程)抛

“性感相册”病毒专攻MSN信息

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 江民反病毒中心日前监测到,一个名为"性感相册"的蠕虫病毒正在互联网上疯狂传播.该病毒会自动搜索电脑中MSN的联系用户名单,向所有的联系人随机发送带有诱惑性的英文消息,并试图传送名为"photos.zip"的压缩包,用户接受并解压缩文件即会中毒. 据介绍,该病毒十分隐蔽,中毒电脑无异常表现,而病毒会在后台

AlertBox 弹出层(信息提示框)效果

弹出层(弹窗)就是相对文档或窗口定位的一个层,一般用来显示提示信息.广告等内容,还可以配合覆盖层来锁定页面. 在仿Lightbox效果中,已经基本实现了这个效果,这次主要改进了ie6在fixed时的抖动问题. 此外,还增加了一个用来兼容ie6的fixed的方法,覆盖层也重新"包装",程序也改成组件的结构. 兼容:ie6/7/8, firefox 3.6.8, opera 10.6, safari 5.0.1, chrome 5.0 效果预览 覆盖select测试   程序说明 [实现原

倾斜的鼠标翻转导航制作上的烦恼

前天网上有个朋友发给我一个页面让我帮她看一下为什么鼠标翻转实现不了.我打开源文件看了一下,发现她根本没有掌握一个鼠标翻转的特性.并且对于倾斜导航的思考也不足.虽然我当时看出来了这些问题,但是由于手上一个项目正在收尾一时也没有时间向她一个讲解.正好昨天工作忙完了,现在又拿起那个文件看了一下,发现能过这个事件可以讲解好多个知识点,有一些地方比较容易让人不太注意,但是确实是非常关键的.下面我们通过制作一个倾斜的鼠标翻转导航为过程来针对不同的地方做出一些提示,希望可以帮助一些对于鼠标翻转导航制作上还存在

ie发送ajax请求返回上一次结果的解决方法

 这篇文章主要介绍了ie发送ajax请求返回上一次结果的解决方法,需要的朋友可以参考下 问题出现原因:    1. ie下面只会建立一次 ajax 请求,将响应结果放在浏览器缓存里 下次调用该ajax请求时 从缓存里读取    get方式时,获取数据,因发送参数和地址都一致,故IE浏览器会从缓存中取,而不会去请求服务器端,而post方式因为参数的不同,不会产生这个问题    2. 火狐下面 每次激活事件 都会重新建立一次ajax请求    解决方法:    1: 在AJAX请求的页面后加个随机函