标准MFC WinSock ActiveX控件开发实例
2009-05-04 20:06:26 来源:WEB开发网后面看到各种变量类型包括在一个联合体当中,也就是说指明vt后,你只能使用对应的其中之一变量类型。看着这众多的各种不同
类型变量集中在一起,确实让人吓了一跳,但细细看来,大多数变量跟我们平时的用法相似。值得一提的是SAFEARRAY __RPC_FAR *parray;
也许有很多人还没有接触过SAFEARRAY类型的变量,SAFEARRAY实际上也是一个结构,大家可以参考MSDN,我也将在后面介绍它的具体使用方法。
用同样的方法创建DisConnect()接口
创建两个事件,FireCloseWinsock()响应网络断开事件,FireRecvSockEvent()响应网络有数据到达的事件。创建方法如下图:
图片看不清楚?请点击这里查看原图(大图)。
图四 创建事件
重载控件消息处理函数WindowProc(),在View->ClassWizard中打开类向导,在消息映射中找到WindowProc,如下图:
图片看不清楚?请点击这里查看原图(大图)。
图五 重载WindowProc()
四、编写代码
编写VariantToLong()转换函数,该函数代码如下:
//类型转换,将VARIANT类型转换成Long类型
大家可以看到,该函数将最基本的若干中数据类型转换成了long类型,但VARIANT决不是个简单的谱,我将在后面继续揭开它的神秘面纱.
long CMFCWinSockCtrl::VariantToLong(const VARIANT &var)
{
long r;
switch(var.vt)
{
case VT_UI2://USHORT
r = var.uiVal;
break;
case VT_UI4://ULONG
r = var.ulVal;
break;
case VT_INT://INT
r = var.intVal;
break;
case VT_UINT://UINT
r = var.uintVal;
break;
case VT_I4://LONG
r = var.lVal;
break;
case VT_UI1://BYTE
r = var.bVal;
break;
case VT_I2://SHORT
r = var.iVal;
break;
case VT_R4://FLOAT
r = (long)var.fltVal;
break;
case VT_R8://DOUBLE
r = (long)var.dblVal;
break;
default:
r = -1;//无法转换该值
break;
}
return r;
}
更多精彩
赞助商链接