问个关于QQ聊天窗口的有关问题,不要代码,进来谈谈,小弟感激不尽

问个关于QQ聊天窗口的问题,不要代码,进来谈谈,小弟感激不尽
问个关于QQ聊天窗口的有关问题,不要代码,进来谈谈,小弟感激不尽
有人进来了吗?
进来了进提个问题。
我想问下,QQ怎么做到,我双击好友后,弹出的窗口,再点击就不会弹出了,点击另一个好友,又弹出了。
还有就是,QQ在接收到别人发送过来的信息后,怎么判断来到的信息是A好友,而不是B好友。
我不是要做聊天软件,而是好奇学习学习下。问个关于QQ聊天窗口的有关问题,不要代码,进来谈谈,小弟感激不尽
我是学生。求大神指点,感激不尽。(回答的好加重分)
------解决方案--------------------
第一个问题.
   双击弹出窗口,有判断条件,TX是怎么判断的我们不知道,说一个思路,
  假设界面上面有10个按钮,每一个按钮都有一个Flag相关联.在用户双击任何一个BUtton的时候,检查他关联的Flag是否已经置1,如果是1表示对应的窗口已经弹出,就不用弹出,如果你还记录了弹出窗口的HAND,那么你还可以让窗口成为当前窗口,如果Flash是 0,表示这个BUtton对应的窗口没有弹出来,那么弹出来,同时把FLag 置1. 这样就完成了这么个功能.
第二个问题 .
  你的QQ在收到消息的时候,对应的消息里面就有标记说是哪个发的.
  就象你和五个同学聊天,随便哪个说话,你都知道是谁说的,因为你的大脑标记了他说的话 .

------解决方案--------------------
就是得把窗口跟点击的那个项关联起来就行了,再点击时根据关联的方式就能知道窗口是否打开了
------解决方案--------------------
网上下个聊天工具的源码看看就知道了
------解决方案--------------------
QQ在接收到别人发送过来的信息后,怎么判断来到的信息是A好友,而不是B好友
发送信息,在传输过程中肯定会有几个字段,发送方ID(比如QQ号码),接收方ID,发送内容等信息。接收类似按字段提取具体信息。
------解决方案--------------------
就是关联判断,我说个简单的思路:
好友列表每个view都是一个自定义控件,假如他是UserView类的实例,每个UserView实例有一个ID成员,它的值是每个View都唯一,比如是一个UUID串,而每个聊天窗口是一个MsgWindow实例,他也有一个ID成员,每次我双击UserView时,就创建一个MsgWindow,然后把UserView的ID赋值给它,每个MsgWindow生成后都放在一个容器里,比如一个链表,当我下次再次点击同一个UserVIew时,我就便利MsgWindow链表,拿出它的ID来和被点击UserView的ID做比较,如果两个ID相同,就表示已经创建了MsgWindow,无需再次创建,否则创建新的MsgWindow并放入链表,当MsgWindow关闭时,从链表中删除
------解决方案--------------------
关于你提到的线程中投递消息问题:
1.你知道A消息属于A窗体,B消息属于B窗体,那么拿他们的句柄HWND不是难事,假如A窗句柄是hWndA, B窗是hWndB
2.自定义一个消息ID,比如#define USER_MSG WM_USER+100,每个聊天消息窗应有一个该消息的接收映射,
比如:LRESULT OnMyMessage(WPARAM wParam, LPARAM lParam);
3.在消息窗中映射自定义消息ON_MESSAGE(USER_MSG, OnMyMessage)
4.建立全局的一个临时消息缓冲,比如CString g_msg;
5.线程接收消息后赋值到g_msg;
4.在线程中发消息PostMessage(hWndA, USER_MSG, NULL, NULL)通知OnMyMessage拿g_msg中的讯息,并对指定接收框SetWindowText(),然后对g_msg清空
B窗类似,综述就是获得消息,然后往指定窗口投递,方法很多,上述只是其中一种