您现在的位置:中国下载站学院中心网络编程Visual C++教程Visual C++实例教程 → 文章列表

用Visual C++实现QQ界面的模拟

作者:佚名  来源:不详  发布时间:2006-12-29 13:42:19   

减小字体 增大字体

 
 
大凡用过电脑,上过网的朋友都用过QQ,对QQ的一些交互界面可能垂慕已久,的确,无论是其生动的企鹅形象,还是“滴滴的”消息声音,以及“刷”的菜单等功能,简单单的消息发送,以及快速的回显和众多卡通的QQ头像等铸就了其在网络的良好地位,本人对其研究虽不够透彻,但也做一些探索性的尝试,并简单的实现了比较突出的功能,在模拟的过程中,主要实现了以下几部分的功能:

  QQ菜单,也称抽屉菜单(也有的叫导航菜单);

  QQ头像的列表显示;

  简易的消息发送模拟;

  简易的上线,隐身模拟;

  悬挂QQ;

  本程序的运行界面如图:

 

  当然啦,现在的QQ功能强大,如QQ直播,联系人,个人设置等功能,视频聊天等众多强悍功能,本人能力不及,并没有实现!下面,就开始QQ模拟之旅吧!

  一、准备

  在实现QQ界面之前,有一些准备工作,请确定你已经有如下知识:

  1.具备C,C++,VC的初步知识!

  2.具备一定的思考能力!

  3.要有一定的想法

  4.熟悉QQ界面

  5.具备一些软件工具:如Visual C++, Resource Hack(这个可以找到.exe、.dll 文件的资源,包括对话框和控件的属性.

  二、剖析QQ界面

  1.QQ头像和图标

  这是QQ做的特别好的地方,大家如果留心的话会发现QQ附带的功能实在强悍,可以视频聊天,截图,发送文件,记录我的好友等信息,等这些功能全部仅在一个对话框或一个设置框中实现,给人很轻松的感觉,企鹅的形象深入民心,获取关键的图标是很必要的。

  用Resource Hacker对你安装的QQ.exe进行资源导出吧,这样获取的图标文件.ico为你所用,不要再为没有形象ICO而烦恼啦!

  在你的QQ安装目录下面有个QQface,里面有QQ所需要用到的所有QQ头像,如果你不知道的话,也可以直接下载本人的源代码,里面已经将100张QQ头像嵌在里面啦,直接用,不要客气!

  2.登陆界面

  QQ的登陆界面简单易了,风格明朗,本人已尝试做了一个,可以到知识库里下一下看,做的并不好,但长的蛮像的!本人并未实现网络登陆功能,以至很多朋友有被欺骗的感觉,本人在这说明:已经在程序说明部分说明并未实现网络功能,如果对登陆器,或外挂比较感兴趣可以从网络上搜索一些资料,应该有的下载!

  3.登陆时任务栏图标

  这个可能对网速慢的朋友可能会注意到,这又是QQ花心思的地方。

  4.上线时的声音及消息显示时的人物跳动

  任务栏的图标也跟着改变啦,可以近ctrl+alt+z快捷键迅速查看留言啦!

  5.快捷方便的抽屉菜单

  我个人非常欣赏该功能,所以讲解的过程中本人会做最详细的阐述!

  6.发送消息对话框

  消息来时候的很清脆的声音及快速的回显!

  7.在桌面顶端上悬挂QQ

  这使QQ占用很少的桌面空间,值得注意!

  将在下面重点讲述实现3到7功能,并逐一实现!

三、登陆时任务栏图标的动态显示

  网络上关于在任务栏上添加图标的代码说明不少,本人也是参考了书书籍和借签了一部分代码后,并做了以下模拟处理。

  基础部分:

NOTIFYICONDATA nid;
//此处在类中定义

void CMyQQDlg::DisplayInTask()
{
if(isDisplayInTask)
{
//初始化nid
nid.cbSize = sizeof(NOTIFYICONDATA);
nid.hWnd =this->m_hWnd;
nid.uID = IDR_QQMENU;
nid.uFlags = NIF_ICON | NIF_TIP|NIF_MESSAGE ;
nid.hIcon = m_hIcon;
strcpy (nid.szTip, "任务栏图标");
nid.uCallbackMessage=WM_DISPLAYTASKICON;
Shell_NotifyIcon(NIM_ADD,&nid);
isDisplayInTask=FALSE;
}
else
{
Shell_NotifyIcon(NIM_DELETE,&nid);
isDisplayInTask=true;
}
}

  关于Shell_NotifyIcon这个函数共有三种操作,分别为NIM_ADD, NIM_MODIFY, NIM_DELETE,为系统函数,大家对这个不熟悉也不要紧,也就是实现在任务栏上显示的功能,在程序的OnInitDialog函数中添加如下代码:

isDisplayInTask=true;
DisplayInTask(); //显示到任务栏里面去;
Sleep(500);
OnOutline();
Sleep(500);
OnHidden();
Sleep(500);
OnOutline();
Sleep(500);
OnHidden();

  仅仅是个模拟,并没有考虑到程序的具体操作过程,也可以定义一个时间,然后用 KillTime 函数终止也可以!

  四、上线时的声音及消息显示时的人物跳动

  本人并未实现人物跳动,并不知道是切换图片,还是更改图片的位置,所以此功能有待各位的指点!

  五、动感十足的抽屉菜单

  我对QQ的这个菜单印象特深,犹其是配的“刷”的声音,充分体验到QQ的生动!下面就详细介绍自己是如何一步步实现的: 
 
 

  说明:

  在程序的一开始就获得最顶端按钮的位置:

// 将该对话框放置到右上角;
GetWindowRect(&dlgrect);
MoveWindow(GetSystemMetrics(SM_CXSCREEN)-dlgrect.Width()-20, 0,
dlgrect.Width(), dlgrect.Height(), true);
//////////////////////////////////////////////////////////////////////

/////////////////////////////////////////////////////////////////////////
// 获取得第一个按钮和最后一个按钮的位置
GetDlgItem(IDC_QQFRIEND)->GetWindowRect(&rect0);
ScreenToClient(&rect0);
GetDlgItem(IDC_QQQUN)->GetWindowRect(&rect1);
ScreenToClient(&rect1);

  用一个重要的函数分别处理当按下不同铵钮时的反应:

void CMyQQDlg::ChangeView()
{
 // 开始对按钮进行各个处理

 if(TopButtonNum!=1&&clicknum==1)
 {
  //////////////////////////////////////////////////////////////////////////
  // QQ好友按钮已经置于最上层
  // 所以无需移动
  // 其余全置于下面
  m_QQothers.MoveWindow(0, rect1.bottom,
  rect0.Width(), rect0.Height(), true);
  m_QQqun.MoveWindow(0, rect1.bottom-rect0.Height(),
  rect0.Width(), rect0.Height(), true);
 
  //////////////////////////////////////////////////////////////////////////
  // QQ好友
  if(isBigFace)
  {
   m_List1.SetImageList(&m_imagelist2, LVSIL_SMALL);
  }
  else
  {
   m_List1.SetImageList(&m_imagelist1, LVSIL_SMALL);
  }
  m_List1.DeleteAllItems();
  for(int i=1; i<34; i++)
  {
   m_List1.InsertItem(0xffff,"", -1);
   m_List1.InsertItem(0xffff,"\n"+myClass[i-1], i);
  }
  m_List1.InsertItem(0xffff,"", -1);
  //////////////////////////////////////////////////////////////////////////
  // 显示该栏目的下的QQ好友, 隐藏其它栏目;
  m_List1.ShowWindow(SW_SHOW);
  m_List2.ShowWindow(SW_HIDE);
  treeCtrl.ShowWindow(SW_HIDE);
  return;
 }

 if(TopButtonNum!=2&&clicknum==2)
 {
  // 先将排在它上面的按钮置上不闻;
  m_QQqun.MoveWindow(0, rect0.bottom,
  rect0.Width(), rect0.Height(), true);
  // 将排在它后面的按钮置后;
  m_QQothers.MoveWindow(0, rect1.bottom,
  rect0.Width(), rect0.Height(), true);

  // 显示该栏目的下的QQ群, 隐藏其它栏目;
  m_List1.ShowWindow(SW_HIDE);
  m_List2.ShowWindow(SW_HIDE);
  treeCtrl.ShowWindow(S

在百度中搜索更多用Visual C++实现QQ界面的模拟相关网页 转贴于:中国下载站

  • 上一篇文章:VC实现自动监测光驱状态的改变
  • 下一篇文章:VC++大数据量绘图时无闪烁刷屏技术实现
  • 阅读统计:[]
  • 中国下载站】【设为主页】【收藏本页】【打印本文】【回到顶部】【关闭此页

    相关文章
    文章评论(评论内容只代表网友观点,与本站立场无关!)

    用户名: 查看更多评论

    分 值:100分 85分 70分 55分 40分 25分 10分 0分

    内 容:

             (注“”为必填内容。) 验证码: 验证码,看不清楚?请点击刷新验证码


    设为首页 - 关于我们 - 广告服务 - 网站地图 - 加入收藏 - 网站声明 - 网站帮助 - 友情链接

    • Copyright (C) 2006-2008 www.cndownz.com All Rights Reserved.
      中国下载站 版权所有. 粤ICP备05141802号. 对本站有任何建议、意见或投诉,请来信:cndownzcom@yahoo.com.cn.
      喜欢中国下载站(cndownz.com),请把中国下载站(cndownz.com)告诉你QQ上的5位好友,多谢支持!