也谈QQ表情弹出框的制作

会飞的鱼前段时间写了篇文章,介绍如何实现类似QQ表情对话框的功能,具 体描述见文章《c# 类似于QQ表情弹出框功能的二种实现方法》。刚好最近我也 有类似的需求,我刚开始的想法是在Panel中动态创建PictureBox来加载QQ表情 ,如:

private void InitImageControl(int colCount, int  rowCount)
     {
       for (int i = 0; i < rowCount; i++)
       {
         for (int j = 0; j < colCount; j++)
         {
           PictureBox picBox = new PictureBox();
           picBox.SizeMode =  PictureBoxSizeMode.CenterImage;
           picBox.Image = @"d:\qqface\1.gif"; //从文件 中加载图片
             Size controlSize = new Size(imgWidth,  imgHeight);
           picBox.Size = controlSize;
           int controlLoctionX = controlSize.Width *  j;
           int controlLoctionY = controlSize.Height *  i;
           picBox.Location = new Point(controlLoctionX,  controlLoctionY);
           picBox.MouseHover += new EventHandler (picBox_MouseHover);
           panel1.Controls.Add(picBox);
         }
       }
     }

这样实现的方式比较简单,但是速度却非常慢,于是就放弃了这个想法。突 然想到,利用网页来加载图片,效率可能会高很多的(事实证明也是如此),于 是考虑在Panel中加载个WebBrowser,然后动态的加载网页来实现。

首先制作了类似QQ表情对话框展示效果的网页,截图如下:

由于代码比较简单,就直接贴代码了:

加载QQ表情

private int currentPageIndex = 1;//当前页代码
         private int pageSize = 0;//总共页数
         ///<summary>
         /// 加载QQ表情
          /// </summary>
         /// <param name="currentPage">当前页 </param>
         /// <param name="rowCount">每页显示表情的行 数</param>
         /// <param name="colCount">每页显示表情的列 数</param>
         private void LoadQQFace(int currentPage,int  rowCount,int colCount)
         {
             currentPageIndex = currentPage;
             string _template = string.Empty;
             string templateFile =  Application.StartupPath + @"\template.html";//网页模版
             _template = File.ReadAllText (templateFile);
             //图像的配置文件
              string _configInfo = string.Empty;
             string configFile =  Application.StartupPath + @"\face.xml";
             DataSet ds = new DataSet();
             ds.ReadXml(configFile);
             DataTable dtFaces = ds.Tables[0];
             int totalCount =dtFaces.Rows.Count;
             pageSize = totalCount % (rowCount *  colCount) == 0 ? totalCount / (rowCount * colCount) :  totalCount / (rowCount * colCount)+1;
             //加载表格
             string tableRowContent=string.Empty;
             for (int i = 1; i <=rowCount;  i++)
             {
                 string tableRow =  "<tr>";
                 for (int j= 1; j  <=colCount; j++)
                 {
                     int faceRowIndex=(i-1) *colCount+(currentPageIndex-1)*rowCount*colCount+j;
                     if (faceRowIndex  <totalCount)
                     {
                         string imgPath =  dtFaces.Rows[faceRowIndex][0].ToString();
                         imgPath =  Application.StartupPath + @"\faces\" + imgPath;
                         tableRow +=  "<td><p><a href='#' onmouseover='showBig (this)'><img src='" + imgPath +  "'/></a></td>";
                     }
                     else
                     {
                         tableRow +=  "<td></td>";
                     }
                 }
                 tableRow += "</tr>";
                 tableRowContent += tableRow;
             }
             int LeftLimt = 29 * (colCount /  2);
             int RightLimt = (colCount - 3) *  29;
             _template = _template.Replace ("$TableRow$", tableRowContent).Replace ("$LeftLimt$",LeftLimt.ToString()).Replace ("$RightLimt$",RightLimt.ToString());
             //设置网页的背景色和窗体的一致
             Color bgColor = this.BackColor;
             string webBgColor =  ColorTranslator.ToHtml(bgColor);
             _template = _template.Replace ("$BgColor$", webBgColor);
             //设置导航
              string pageStr = currentPage + "/"  + pageSize;
             string navigation = "<div  id='navigation'>"+pageStr+"&nbsp;&nbsp;<a href='#'  id='linkPrev'>上一页</a>&nbsp;&nbsp;&nbsp;<a  href='#' id='linkNext'>下一页</a></div>";
             _template = _template.Replace ("$Navigation$", navigation);
             //存到临时文件
             string tempHtmlFile = Path.GetTempPath()  + "tempHtmlFile.html";
             File.WriteAllText(tempHtmlFile,  _template);
             webBrowser1.Navigate(tempHtmlFile);
             webBrowser1.DocumentCompleted += new  WebBrowserDocumentCompletedEventHandler (webBrowser1_DocumentCompleted);
             this.Width =29*colCount+21;
             this.Height = 29 * rowCount+80;
           }

时间: 2024-09-30 08:30:24

也谈QQ表情弹出框的制作的相关文章

跪求类似QQ消息弹出框

问题描述 我在网站后台中想做一消息提醒但有时候客服人员不在或暂时不在该页面所以我想做一个类似于QQ消息弹出的功能请问有没有这种插件或类似的实现功能的方法... 解决方案 解决方案二:不会,顶一下解决方案三:只知道是做消息存储,应该是服务端触发客户端事件吧.也不是很清楚,和你一样求解.解决方案四:web的就是靠javascript,没啥意思...解决方案五:使用jqery.ui中的弹出窗体解决方案六:这种效果,有很多种方法来实现,div掩盖层,弹出窗口等等!解决方案七:网站的话,用jQuery,有

如何做一个类似QQ空间消息的弹出框 不依附于网页的那种

问题描述 各位大侠我想做一个消息提示弹出框就是在不管浏览器是否最小化的时候都能弹出的那种像QQ空间信息弹出的那种完全独立于网页上的那种 解决方案 解决方案二:顶...解决方案三:http://blog.csdn.net/zhaogaohong/archive/2011/01/06/6120592.aspx解决方案四:引用2楼zhaogaohong的回复: http://blog.csdn.net/zhaogaohong/archive/2011/01/06/6120592.aspx 有没有完整的

Android仿QQ长按删除弹出框功能示例

废话不说,先看一下效果图,如果大家感觉不错,请参考实现代码: 对于列表来说,如果想操作某个列表项,一般会采用长按弹出菜单的形式,默认的上下文菜单比较难看,而QQ的上下文菜单就人性化多了,整个菜单给用户一种气泡弹出的感觉,而且会显示在手指按下的位置,而技术实现我之前是使用popupWindow和RecyclerView实现的,上面一个RecyclerView,下面一个小箭头ImageView,但后来发现没有必要,而且可定制化也不高,还是使用多个TextView更好一点. 我封装了一下,只需要一个P

win7安装QQ时弹出提示“应用程序无法启动因为并行配置不正确”如何解决

  刚刚安装完windows7操作系统后需要安装一些常用的程序软件,比如QQ.office等等.有用户反应在Win7系统中安装QQ的时候弹出提示"应用程序无法启动因为并行配置不正确"导致无法正常安装,该如何解决?出现这样的情况,首先我们确保系统服务是否运行正常,系统中的运行库是否已安装.本教程以win7纯净版系统为例,给大家演示具体解决方法. 步骤:运行库 1.下载"Microsoft Visual C++"运行库; 2.将运行库进行安装; 具体步骤: 1.按下&q

app-Android打电话时可以显示弹出框吗?

问题描述 Android打电话时可以显示弹出框吗? 想做一个APP,在打电话的界面中显示一个弹出框,显示一些信息,不知道能否实现? 解决方案 这应该没什么难的把,你看看qq网络电话,什么对话框都能整 解决方案二: 是可以的.具体可以下载360.电话拨打一开始会有一个小窗口,显示正在防窃听 解决方案三: 可以的 最容易就是使用Dialog,如果Dialog无法显示,可能是权限的问题.把Dialog定义成系统级别的就没啥问题了.

使用easydrag实现可拖动的DIV弹出框

最近在工作中遇到了jquery的easydrag插件,我有一种相见恨晚的赶脚!easydrag极大的方法我们实现div弹框这个功能,使我爱不释手!在没遇到easydrag插件之前,想实现一个弹出框并不是一件轻而易举的事情!人们常说没有不劳而获的事情,但在编码的世界中却不是这样.更多的开源框架方面了我们,也毒害了我们! 废话少说,先看效果: 全部代码: <!DOCTYPE HTML> <html> <head> <title>easydrag实现可拖动的DIV

高仿IOS的Android弹出框_IOS

先看一下效果图,不过这是网上的图片. 效果不错,就借此拿来与大伙分享分享. github源码地址:https://github.com/saiwu-bigkoo/Android-AlertView. 1.怎么用:添加依赖. compile 'com.bigkoo:alertview:1.0.3' 2.实例demo(大家可以根据需要来选择自己需要的框框). package com.example.my.androidalertview; import android.app.Activity; i

创新:如何让弹出框广告更有吸引力?

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 QQ的右下角弹出框广告可谓是非常成功,不仅直接带动了许多如下图所示的仿冒QQ弹出框广告,更带动了一大批知名网站的纷纷效仿,如迅雷.MSN.千千静听.百度空间.阿里妈妈.UUSEE.金山词霸等等. 尽管这种广告的效果非常好,但对于很多用户来说也是很烦人的,因此网上都有了很多"如何禁止右下角弹出框广告"的求救声. 用户反对,自

双击QQ音乐弹出DesktopLyric报错修复办法

具体操作 1.我们先要把电脑的360升级到最新版本,然后在打开360卫士界面会看到有一个"援助"标题了我们点击进入. 2.然后在进入到360电脑援助界面我们在搜索框中输入"双击QQ音乐弹出DesktopLyric报错"了,然后我们再点击搜索 3.进入到搜索界面我们再点击第一个工具后面的"立即修复"然后之后重启电脑. 小编提醒你,当然QQ电脑管家也有一个修复功能哦,他是自己专业的如果大家用360没有修复好也可以尝试一下使用QQ电脑管家哦,或重新安装