VC模拟实现QQ界面(下)

2016-02-19 21:45 71 1 收藏

今天图老师小编给大家介绍下VC模拟实现QQ界面(下),平时喜欢VC模拟实现QQ界面(下)的朋友赶紧收藏起来吧!记得点赞哦~

【 tulaoshi.com - 编程语言 】

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

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

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

  五、动感十足的抽屉菜单

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

  我对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; i34; i++)
     {
       m_List1.InsertItem(0xffff,"", -1);
       m_List1.InsertItem(0xffff,"
"+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(SW_SHOW);
     return;
   }
   //////////////////////////////////////////////////////////////////////////
   //* ignoring these codes;
   if(TopButtonNum!=3&&clicknum==3)
   {
     // 全部挤到上面去
     m_QQfriend.MoveWindow(0, rect0.top,
       rect0.Width(), rect0.Height(), true);
     m_QQqun.MoveWindow(0, rect0.bottom,
       rect0.Width(), rect0.Height(), true);
     m_QQothers.MoveWindow(0, rect0.bottom+rect0.Height(),
       rect0.Width(), rect0.Height(), true);
    
     //////////////////////////////////////////////////////////////////////////
     // 随机产生最近联系人
     m_List2.DeleteAllItems();
     for(int i=1; i18; i++)
     {
       int j=rand()%33;
       m_List2.InsertItem(0xffff,"", -1);
       m_List2.InsertItem(0xffff,"
我的朋友"+i, j);
     }
     m_List2.InsertItem(0xffff,"", -1);
     // 显示该栏目的下的QQ联系人或其它, 隐藏其它栏目;
     m_List1.ShowWindow(SW_HIDE);
     treeCtrl.ShowWindow(SW_HIDE);
     m_List2.ShowWindow(SW_SHOW);
     return;
   }
   //*/
   //////////////////////////////////////////////////////////////////////////  另外大家在处理的过程中,可以在QQ    好友和最后一个菜单,这里是最近联系人,可以加一个picture控件,将其设置成很细小,且不可视,定制在对话框的最上和最下位置,这样你就可以随时获得你所需要的按钮移向的位置,另外每个按钮的长宽相同,方便啦处理!

  六、发送消息对话框

  在这里只讲两部分:

  1.动态产生消息对话框

  2.按Ctrl+Enter键发送消息

  动态产生对话框,一般是先在资源中建立一个对话框模板,用Create函数产生一个对话框实例, 本程序是这样实现的:

void CMyQQDlg::OnDblclkMyFriend(NMHDR* pNMHDR, LRESULT* pResult)
{
   NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
   int m_nCurrentSel = pNMListView-iItem;
   CString str;
   str=m_List1.GetItemText(m_nCurrentSel, NULL);
  
   CQQSendMessage *dlg=new CQQSendMessage;
   dlg-msg=str;
   dlg-Create(IDD_QQ_MESSAGE);
   dlg-SetWindowText("你正在与"+str+"聊天当中");
   dlg-SetIcon(AfxGetApp()-LoadIcon(IDR_MAINFRAME), false);
   dlg-ShowWindow(SW_SHOW);
  
   *pResult = 0;
}第2个键盘发送可以做如下处理:BOOL CQQSendMessage::PreTranslateMessage(MSG* pMsg)
{
   // TODO: Add your specialized code here and/or call the base class
   if(pMsg-message==WM_KEYDOWN)
   { 
     if(pMsg-wParam==VK_RETURN  &&  GetKeyState(VK_CONTROL)&0x80)
     { 
       {
         //处理发送对话的内容 
         OnSend();
         return  1; 
       }
     } 
   } 
    return CDialog::PreTranslateMessage(pMsg);
}

  这样你按下Ctrl+Enter键后就会处理OnSend()函数,这样就可以实现快捷键发送消息啦!
七、在桌面顶端上悬挂QQ

  这样的实现不知道满意不满意,可以用一个时间片,时刻测试鼠标的坐标,并判断它所处的范围,以判断是否悬挂对话框!本文发表于http://bianceng.cn(编程入门网)

  悬挂QQ,并不是让其隐藏而是要留下只剩下一根细线,当鼠标移到这根细线的时候,就立刻反显示!悬挂代码如下:

  LPPOINT pt=new CPoint;
   GetCursorPos(pt);
   CRect rect;
   GetWindowRect(&rect);
   if(rect.PtInRect(*pt))
   {
     if(rect.top=2)
     {
       MoveWindow(rect.left, rect.top,
         dlgrect.Width(), dlgrect.Height(), true);
     }
   }
   else
   {
     if(rect.top=2)
     {
       MoveWindow(rect.left, 0, rect.Width(), 3, true);
     }
   }
   delete pt;

  小结:

  不知道通过上面的讲述,你是否感爱到QQ的巧妙?由于本人也在学习阶段,所以分析的也不是很到位,但也希望通过这次学习能有所提高,可以与本人联系: xuwenq88@126.com

来源:http://www.tulaoshi.com/n/20160219/1627081.html

延伸阅读
    提起3D文字制作,不少人会马上想到3D MAX等一些专门的3维制作工具,即使选用VC以编程的手段来实现也多是假手于OpenGL图形开发库来完成。熟悉OpenGL开发的编程人员一定对其初始化、材质以及灯光的渲染等一系列烦琐而又必要的编程过程深有感触。虽然通过以上的手段可以产生出包括3D文字在内的质感相当强的3维图形,但如果程序...
在类VC的界面实现中加入目录树 作者:西京大学●职业学院 井中月_VC 下载源代码 前言 本文是在《轻松类VC界面》的基础上写的,初次写文章,表义不清之处,请谅解!如果书归正传,开始……。 程序运行结果如下图:左边、底下有两个可浮动、可变大小的控制窗口 ,在左边一个Tab...
DES算法及其在VC++6.0下的实现( 下) 作者:航天医学工程研究所四室 朱彦军 在《DES算法及其在VC++6.0下的实现(上)》中主要介绍了DES算法的基本原理,下面让我们继续: 二.子密钥的生成 64比特的密钥生成16个48比特的子密钥。其生成过程见图: 子...
    摘要: 本文主要对匿名管道这种网络通信技术进行了介绍,并对其VC++的实现方法作了介绍。     关键词: 管道;匿名管道;Visual C++ 1 概述 管道(Pipe)实际是用于进程间通信的一段共享内存,创建管道的进程称为管道服务器,连接到一个管道的进程为管道客户机。一个进程在向管道写入数据后,另...
首先,在对话框中创建通信控件,若Control工具栏中缺少该控件,可通过菜单Project -- Add to Project -- Components and Control插入即可,再将该控件从工具箱中拉到对话框中。此时,你只需要关心控件提供的对 Windows 通讯驱动程序的 API 函数的接口。 !-- frame contents --!-- /frame contents -- 换句话说,只需要设置和监视...

经验教程

470

收藏

18
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部