各位大侠:
    
    小弟最近在着手做一个用Socket套接字来接收UDP协议数据的ActiveX的组件,但是从来没有做过,现在只是把ActiveX控件按照VC6.0的默认方式给做完了,Socket套接字编程还没有往里填加。  在原来的程序里,都是在C**View类里定义的
void C**View::OnInitialUpdate()//这是初始化文件
{ CScrollView::OnInitialUpdate();
    //关于打开文件显示图片的    //关于套接字编程类的
WSADATA d;
WSAStartup(MAKEWORD(2,2),&d);
sd=socket(AF_INET,SOCK_DGRAM,0);
addr.sin_family=AF_INET;
addr.sin_port=htons(1234);
addr.sin_addr.s_addr=inet_addr("192.168.1.1");
int r=bind(sd,(sockaddr*)&addr,sizeof(sockaddr));
r=1;
        r=WSAAsyncSelect(sd,m_hWnd,WM_SOCK,FD_READ);//WM_SOCKET消息就调用OnSocket()函数}int CDTSCANViewView::OnSock(WPARAM wParam, LPARAM lParam)
{ int num,len,i;
char *pt;
WORD t;


len=sizeof(add_from);
num=recvfrom(sd,(char*)pb,32*9*8,0,&add_from,&len);//8192
         pt=(char*)pb;
         while(*pt!='X')
         {
    pt++;
}  return 0;
}
这两个函数就会自动接收下位机传来的数据包,但是现在要想用控件来实现上述的功能,我觉得这两个函数也是不可缺少的,但是这两个函数应该放在控件的哪个类里面,还希望大家指教。我的控件一共有这些类,现在都是默认的最简单的,还没有往里添加代码。
我从上往下说_D***
_D***EventsC***App
C***Ctrl
C***ProPage我就想问这个应该添加在那个类里?是不是像普通的EXE工作空间那么添加?但是控件的工作空间不是继承CScrollView类,也没有OnInitialUpdate()函数,所以我不知到原来是放在OnInitialUpdate()函数里的代码应该放在哪里,迷惑,希望高手帮忙啊!

解决方案 »

  1.   

    你这显然还没有把SOCKET进行封装。
    自己把SOCKET的处理封装起来。只保留进和出就可以了。进包括SOCKET的初始化参数的传入及对象的创建,你可以用一个public函数或者构造来实现。出就是接收到的数据的处理了,可能你这个控件需要把数据再返回给外部函数来处理,那么你就需要定义一个消息事件,把数据通过消息抛给外部对象。
      

  2.   

    你先把SOCKET的封装好 然后在C***Ctrl 里加就好
      

  3.   

    是不是先把Socket封装在一个自建的类里啊,是这个意思不?
    然后在C***Ctrl里调用吗?还是在C***Ctrl的内部函数里调用呢?
      

  4.   

    封装成类,或者封装成DLL等,然后在C***Ctrl的接口函数等中间调用
      

  5.   

    OnInitialUpdate -- 对应OnCreate()
      

  6.   

    没有OnCreate啊,图片可以看到吗?你说的OnCreate是不是自己封装的类里面 的,需要自己创建的函数,还是控件类里本身就有的。我创建的控件程序里好像没有,你说的这个函数。
      

  7.   

    把你的空间做成复合控件嘛,winsock control(ActiveX控件) 听说过吧把她加到你的控件上,只需对少许一些参数做简单设置即可,网络数据发送接收不都有了吗
    网上很多资料,可以查下