void CMyDlg::OnIPAddress() {
// 此段代码:独立的获取本机IP地址和计算机名 WORD wVersionRequested; WSADATA wsaData; char name[255]; CString ip;
PHOSTENT hostinfo;
wVersionRequested = MAKEWORD(2, 0);
if(gethostname(name, sizeof(name)) == 0) {
if((hostinfo = gethostbyname(name)) != NULL) {
ip = inet_ntoa(*(struct in_addr *)*hostinfo->h_addr_list); }
if (WSAStartup(wVersionRequested, &wsaData) == 0) {
}
WSACleanup( ); }
// AfxMessageBox(name);//name里是本机名 // AfxMessageBox(ip); //ip中是本机IP
m_IPAddress = ip; // m_IPAddress是IP控件对应的变量,ip是Edit控件对应的变量 // m_IP.SetAddress(255, 86, 255, 68); // 直接设置控件里显示的值 // 本段代码:已知IP Address控件里显示的值,转换为CString格式 /*
// 下面代码实现:把IP Address控件里的值转化为 CString格式 unsigned char *pIP; CString strIP; DWORD dwIP;
m_IP.GetAddress(dwIP); // m_IP为IP Address控件对应的变量 pIP = (unsigned char*)&dwIP;
strIP.Format(\ *(pIP+2), *(pIP+1), MessageBox(strIP);*/ /*
// 下面代码实现:把IP Address控件里的值转化为 CString格式 BYTE f0, f1, f2, f3;
m_IP.GetAddress(f0, f1, f2, f3); CString m_addr;
m_addr.Format(\MessageBox(m_addr);*/ /*
// 下面代码实现:把IP Address控件里的值转化为 CString格式 BYTE IPByte[4];
m_IP.GetAddress(IPByte[0], IPByte[1], IPByte[2], IPByte[3]); CString strIP = \
char temp1[10], temp2[10], temp3[10], temp4[10];
*pIP);
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; MessageBox(strIP);*/ /*
// 下面代码实现:把IP Address控件里的值转化为 CString格式 CString strx;
m_IP.GetWindowText(strx); MessageBox(strx);*/
// 此段代码:用获取的IP地址值,显示到对话框里IP Address控件中 /* CString strIP;
GetDlgItemText(IDC_EDIT_IPAddress, strIP); m_IP.SetWindowText(strIP);*/
m_IP.SetWindowText(ip); // 把IP地址(CString类型)直接显示到IP Address控件中
}
UpdateData(FALSE);
MFC中怎样用 IP Address Control?
CIPAddressCtrl m_IP; CString temp;
在IP Address Control对应的函数中获取IP地址: m_IP.UpdateData();
m_IP.GetWindowTextW(temp); 获得的IP地址存入temp。
二、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(\ 使用VC提供的Format函数,省去了整数转化为字符串的操作。
三、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(\
// 赋值给m_ipTarget
int nField0 = 0, nField1 = 0, nField2 = 0, nField3 = 0;
if(_stscanf(m_szIPAddress, _T(\{
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(\ // 赋值给m_ipTarget //地址初始化