一、CIPAsressCtr初始化代码只能写在OnInitDialog()中
#include <afxsock.h>
//把CString表示的IP地址写到IP Address里面
二、VC下怎样使用IP Address Control 控件
问题:怎样从IP Address控件获得IP地址,并交给程序(如socket中的connect函数)处理。
方法一:
//m_Ip为IP Address控件的变量名
m_Ip.GetAddress(IPByte[0],IPByte[1],IPByte[2],IPByte[3]); 获得IP Address控件中的4部分数字
//------------------把IP地址转化为字符
CString strI;="";
char temp1[10],temp2[10],temp3[10],temp4[10];
itoa(IPByte[0],temp1,10);
itoa(IPByte[1],temp2,10);
itoa(IPByte[2],temp3,10);
itoa(IPByte[3],temp4,10);
strIp+=temp1;
strIp+=".";
strIp+=temp2;
strIp+=".";
strIp+=temp3;
strIp+=".";
strIp+=temp4;
-----------------------
_itoa函数介绍
定义在stdlib中的 , _CRTIMP char * __cdecl _itoa(int, char *, int);
我看的源代码中是这么调用的:
_itoa(i,str3,10);
功能:把整形转换为字符类型,
含义: i:需要转换的整形
str3:字符串缓冲区
10:十进制方式
----------------
方法二(简单):
m_IP.GetAddress(f0,f1,f2,f3);//m_IP是ip控件的控制变量
m_addr.Format("%d%s%d%s%d%s%d",f0,".",f1,".",f2,".",f3);
使用VC提供的Format函数,省去了整数转化为字符串的操作。
http://leocna.blog.163.com/blog/#m=0&t=1&c=fks_084067082085083071082094086095080095083066085087082071
三、VC中IP地址控件的赋值与取值
CIPAddressCtrl m_ipTarget; // 假设你的IP控件为m_ipTarget
CString m_szIPAddress;
// 取值到m_szIPAddress
BYTE nField0 = 0, nField1 = 0, nField2 = 0, nField3 = 0;
if(!m_ipTarget.IsBlank())
{
m_ipTarget.GetAddress(nField0, nField1, nField2, nField3);
}
m_szIPAddress.Format(_T("%d.%d.%d.%d"), nField0, nField1, nField2, nField3);
// 赋值给m_ipTarget
int nField0 = 0, nField1 = 0, nField2 = 0, nField3 = 0;
if(_stscanf(m_szIPAddress, _T("%d.%d.%d.%d"), &nField0, &nField1, &nField2, &nField3) == 4)
{
m_ipTarget.SetAddress(nField0, nField1, nField2, nField3);
}
同样也可以这样:
// 取值到m_szIPAddress
BYTE b[4];
((CIPAddressCtrl*)GetDlgItem(IDC_IPADDRESS))->GetAddress(b[0],b[1],b[2],b[3]);
m_szIPAddress.Format("%d.%d.%d.%d",b[0],b[1],b[2],b[3]);
// 赋值给m_ipTarget
//地址初始化
char name[20];
gethostname(name,20);
hostent * host=gethostbyname(name);
struct in_addr inAddr;
memmove(&inAddr,host->h_addr_list[0],4);
m_sIP=inet_ntoa(inAddr);
((CIPAddressCtrl*)GetDlgItem(IDC_IPADDRESS))->SetAddress(inAddr.S_un.S_un_b.s_b1,inAddr.S_un.S_un_b.s_b2,inAddr.S_un.S_un_b.s_b3,inAddr.S_un.S_un_b.s_b4);