大家好,问题描述:  如果一个用户和我聊天 给我发消息, 我这边就会弹出一个对话框像QQ那样 聊天窗口,
如果该用户又给我发送消息,应该是把消息发送到 我先前开启的那个窗口, 但是我程序出错了 他是又重新建立个窗口,
开始  我的思路是先查找看看 桌面上有不有这个窗口我用FindWindow但是我UI 框架是购买的别人公司的所以不能获取句柄 这条路就死了。
我的代码如下
RESULT CMainFrame::OneShowMsg(WPARAM wParam, LPARAM lParam)
 {
  char *MsgInfo=(char*)lParam;

// CWnd * hMsgHandle=FindWindow(NULL,strRefmoteName.c_str());
 CMsg *MsgWindow=new CMsg;
 MsgWindow->Create(IDD_MSG);
 MsgWindow->ShowWindow(SW_SHOW);
 duWindow *dWindow=theApp.GetWindowManager()->duGetWindow(MsgWindow->m_hWnd);
 duEdit *eitMsg=(duEdit*)dWindow->GetPluginByName("edit_RefMsg");
 GoToEncoding GoEndoing;
 char *strGbk=new char[1024];
 。。
CMsg就是我的聊天窗口
大家请帮下 我这里要如何处理 不实用句柄的方式  ,  我是不是要把CMsg 对象都保存起来 然后每次显示窗口的时候我在去查找这个窗口有不有!,   这个思路 如何  如果可以如何保存。。

解决方案 »

  1.   

    加个判断是否有弹出的flag就可以了。
      

  2.   

    设置一个bool flag = false量,在收到对方用户的第一个会话时候判断一下flag的值if(!flag),flag为假的时候,创建一个窗口,设置flag = true。当用户第二个回话发过来时候,这边接到消息,就判断,如果flag是真,则说明会话窗口已经建立了,就不创建了。这个bool量最好设置成会话窗口的一个属性。
      

  3.   

    psbeond老兄,你的仿QQ界面做的不错啊。
      

  4.   


    谢谢,我有两个仿QQ的界面,一个是你看到的,用来做Demo. 另一个是给一家物流公司开发的.------------------------------------------------------------------------
      

  5.   

    建立一个CList对象,添加在主窗口中,记录弹出的对话框。当对方发送消息时,在主窗体中调用一个搜索对话框列表函数查找是否存在,搜索对话框函数如下:
    BOOL CClientDlg::SearchSendDlg(int nID,POSITION &ptPos)
    {
    BOOL bRet = FALSE;
    int nCount = m_pSdDlgList.GetCount();
    if (nCount != 0)
    {
    POSITION pos = m_pSdDlgList.GetHeadPosition();
    while (pos != NULL)
    {
    CSendDlg *pDlg = NULL;
    ptPos = pos;
    pDlg = (CSendDlg *)m_pSdDlgList.GetNext(pos);
    if (pDlg != NULL)
    {
    if (pDlg->m_UserID == nID)
    {
    bRet = TRUE;
    break;
    }
    }
    else
    ptPos = NULL;
    }
    }
    return bRet;
    }