用CSocket进行编程的时候,用文档/视图方式,为什么一些自定义函数可以随便放在不同的类中?!详细请看帖子!!!

DataSpatial 2004-03-31 06:40:27
用CSocket进行编程的时候,用文档/视图方式,为什么一些自定义函数可以随便放在不同的类中?!
比方

void CChatSocket::OnReceive(int nErrorCode)
{
CSocket::OnReceive(nErrorCode);

m_p->ProcessPendingRead();
}
这里的ProcessPendingRead()函数好象可以放在文档类中,又可以放在主框架类中,可能还可以放在其他的类中,
请问到底有没有一个规律啊?!!好象是很乱!

请前辈详细的讲一讲吧!晚辈给你鞠躬!!!
谢谢!!!
...全文
50 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
sdkongkong 2004-04-02
  • 打赏
  • 举报
回复
HuangRG(IUnknownIsKernelCOM)说的好,学习中
HuangRG 2004-04-02
  • 打赏
  • 举报
回复
楼主对MFC DOC/VIEW结构理解不大好.ProcessPendingRead()这个函数应该是CXXXDoc的成员函数.ProcessPendingRead()不是随便放,而是在不同地方调用这个函数.一般你如果用了Doc/View结构的话,处理数据的放到Doc类中,显示的放到View中.
CChatSocket要与CXXDoc进行消息交互,交互的代码如下:
class CXXDoc : public CDocment
{
public:
void ProcessPendingRead(char* buf);
... ...
private:
CChatSocket* m_pSocket;
};

CXXDoc::CXXDoc()
{
// 创建一个Socket对象,将文档类指针传递给CChatSocket,
// 为调用Doc类的成员函数作准备
m_pSocket = new CChatSocket(this);
......
}
在其它完成套字的相关操作.

接下来看看CChatSocket的实现.
class CChatSocket : public ...
{
public:
...
private:
CXXDoc m_pDoc;
};

CChatSockt::CChatSocket(CXXDoc* pDoc)
{
// 将从Doc类中传递进来的Doc对象指针保存到m_pDoc中
m_pDoc = pDoc;
}

当有数据可接收时,将激发下面的函数
void CChatSocket::OnReceive(int nErrorCode)
{
char buff[256];

// 处理接收到的数据,将其保存到buff中.
Recv(....);

// 调用Doc中处理数据的成员函数,并将接收到的数据作为输入参数
m_pDoc->ProcessPendingRead(buff);

CSocket::OnReceive(nErrorCode);
}

通过上面的处理,MFC SOCKET就与处理数据的文档类联系起来了.如果需要显示数据的话,那就是Doc/View之间的事情了.应用一个合理的结构对开发一个较大的应用还是蛮有用的.

DataSpatial 2004-04-01
  • 打赏
  • 举报
回复
我的意思大家都理解错了,我的意思是为什么要把这个ProcessPendingRead()随便放,难道就不能有一个规律吗?!
水手 2004-03-31
  • 打赏
  • 举报
回复
你实在不行就用“编辑”里的“查看文件”将所有的m_p找出来,看定义在什么地方。
水手 2004-03-31
  • 打赏
  • 举报
回复
你看看chatsocketview类,看看,应该是该类的成员
howtotell 2004-03-31
  • 打赏
  • 举报
回复
文档类的指针是通过GetDocument得到的。
DataSpatial 2004-03-31
  • 打赏
  • 举报
回复
m_p该定义成指向哪个类的指针正是我的问题的核心!!!
好象很随意!!!
我不懂!!!
前辈赐教!!!
水手 2004-03-31
  • 打赏
  • 举报
回复
m_p是你视图类中的吗?

18,357

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧