主对话框传递消息到特定的子对话框、socket监听、消息传递?该怎么解决

主对话框传递消息到特定的子对话框、socket监听、消息传递?
和qq似的,一个主对话框,上面有一个control list,里面是在线用户,当双击某个用户时,响应双击事件,在事件处理函数中Create()一个非模态的对话框,从而弹出一个和这个用户的对话窗口。代码:
C/C++ code
void CFileTransDlg::OnNMDblclkListUser(NMHDR *pNMHDR, LRESULT *pResult){
//...................
    Cm_Session *session=new Cm_Session;
    session->Create(IDD_SESSION,this);
        session->ShowWindow(SW_SHOW);

//...................
}

CFileTransDlg是主对话框的类,Cm_Session是子对话框的类
现在的问题是,Socket该如何监听。我认为是应该让主对话框监听的,但是主对话框得到消息后如何将消息准确的传递到与某个用户的对话窗口。当OnNMDblclkListUser()函数结束后,session指针失效,该如何再次访问和一个特定用户绑定的对话框呢?
因为是非模态对话框,故可同时存在多个Cm_Session子对话框

或者有其他更好的方案呢?实现类似qq的聊天功能和消息分发

求大神指点,详细点,本人入门级的

------解决方案--------------------
session指针 保存下来,同时用一个标识符来绑定到map等,这样消息来了,根据这个map查找对应的子对话框
------解决方案--------------------
可以用观察者模式,所有消息子对话框作为观察者,如你所说,主对话框作为被观察者,主对话框收到消息后,遍历观察者,如果是跟自己相关的消息就做处理,不相关就丢弃。这样还可以便于程序的扩展。。
------解决方案--------------------
自己定义个数据结构,将ID,SOCKET,HWND窗口句柄关联在一起