WEB开发网
开发学院软件开发VC QQ界面的模拟实现(下) 阅读

QQ界面的模拟实现(下)

 2007-03-17 21:59:06 来源:WEB开发网   
核心提示:本文示例源代码或素材下载 四、上线时的声音及消息显示时的人物跳动本人并未实现人物跳动,并不知道是切换图片,QQ界面的模拟实现(下),还是更改图片的位置,所以此功能有待各位的指点!五、动感十足的抽屉菜单我对QQ的这个菜单印象特深,定制在对话框的最上和最下位置,这样你就可以随时获得你所需要的按钮移向的位置,犹其是配

本文示例源代码或素材下载

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

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

五、动感十足的抽屉菜单

我对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,"
"+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; i<18; 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  下一页

Tags:QQ 界面 模拟

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接