如标题,最近在做界面,要求实现qq聊天消息的气泡聊天功能,上网搜了好多资料,仍然没有头绪,有大神做过类似的吗

解决方案 »

  1.   

    很简单,气泡所在的消息框是一个 List
    每个气泡都是一个 ListContainerElement
      

  2.   

    大神,有没有demo可以提供一下呢
      

  3.   

    我也想知道,QQ那个气泡是图片还是什么?图片上面放一个LIST控件吗?
      

  4.   

    一个气泡可以看作是一个容器,气泡内的文字,图片都是容器内的控件.
    关键是有没有实现的demo,如果采用了这种方式,气泡内可以显示表情吗?文字可以实现复制吗
      

  5.   

    一个气泡可以看作是一个容器,气泡内的文字,图片都是容器内的控件.
    关键是有没有实现的demo,如果采用了这种方式,气泡内可以显示表情吗?文字可以实现复制吗
    可以使用windowless richedit来显示表情
      

  6.   

    http://code.taobao.org/svn/dragon/trunk/UIRichEditBubble Demo
      

  7.   

    一个气泡可以看作是一个容器,气泡内的文字,图片都是容器内的控件.
    关键是有没有实现的demo,如果采用了这种方式,气泡内可以显示表情吗?文字可以实现复制吗
    可以使用windowless richedit来显示表情怎么做到背景图片自适应文本或者图片宽度的
      

  8.   

    一个气泡可以看作是一个容器,气泡内的文字,图片都是容器内的控件.
    关键是有没有实现的demo,如果采用了这种方式,气泡内可以显示表情吗?文字可以实现复制吗
    可以使用windowless richedit来显示表情怎么做到背景图片自适应文本或者图片宽度的
    对于文本,可以使用GetTextServices()->TxGetNaturalSize()计算文本大小。
    对于图片,可以使用gdi+计算图片大小。
    容器根据内容自适应?这个duilib没有实现,其实也不难,在EstimateSize里面 计算控件大小+容器内边距 就是容器大小了
      

  9.   

    哥们,这个svn好像打不开
      

  10.   

    用svn软件打开。
    或者在taobao code中搜索 dragon
      

  11.   

    确实看了你的代码,把你实现文字的气泡聊天代码移植到你的gif表情显示时,表情中没有气泡效果,请问如何解决,我移植后的在表情聊天中的代码如下:
     static void __stdcall __EnumFileInDirProc(LPCTSTR szDir, LPCTSTR szName, WPARAM wParam)
        {
            DemoWindow* pThis = (DemoWindow*)wParam;        String strPath(szDir);
            strPath.append(szName);
    HANDLE hHandle = pThis->m_pRichEdit->InsertMessageStart(UI::BUBBLE_NORMAL, UI::BUBBLE_ALIGN_LEFT);
            pThis->m_pRichEdit->InsertGif(strPath.c_str());
    pThis->m_pRichEdit->InsertMessageFinish(hHandle);
        }    void OnInitialize()
        {
            m_pRichEdit = (UI::IRichEdit*)this->FindChildObject(TEXT("richedit"));
    m_pRichEdit->SetReadOnly(true); // 段间距。用于撑开两个气泡之间的空隙
    PARAFORMAT2 pf;
    m_pRichEdit->GetDefaultParaFormat(&pf);
    pf.dySpaceAfter = UI::Util::DXtoHimetricX(2);
    pf.dySpaceBefore = UI::Util::DXtoHimetricX(2);
    m_pRichEdit->SetDefaultParaFormat(&pf);        TCHAR szPath[MAX_PATH] = {0};
            GetModuleFileName(GetModuleHandle(NULL), szPath, MAX_PATH);
            TCHAR* p = _tcsrchr(szPath, '\\');
            if(p != NULL)
                *(p+1) = 0;        _tcscat(szPath, TEXT("emotion\\"));        UI::Util::EnumFileInDirectory(
                    szPath, 
                    (EnumFileInDirProc)&DemoWindow::__EnumFileInDirProc,
                    (WPARAM)this);
        }
      

  12.   

    这是因为你没为richedit 开启 bubble 模式。你对比下那两个工程的皮肤文件:
     msgbubble.enable="1"
      

  13.   

    taobao内部的im 也用这个?
      

  14.   

    请问这部分必须得装Direct X吗
      

  15.   

    下载下来,里面没有richedit的demo呀
      

  16.   

    http://www.cnblogs.com/jackieron/p/5960861.html
      

  17.   

    SVN下个Duilib Demo,里面有QQ Demo可以参考