IP地址控件——IP Address Control

一、空内容判断

if( ((CIPAddressCtrl*)GetDlgItem(IDC_IPADDRESS1))->IsBlank() )
{
	MessageBox("请填写设备IP地址");			
	return;
}	

二、清空控件内容

((CIPAddressCtrl*)GetDlgItem(IDC_IPADDRESS1))->ClearAddress();

IP地址控件的主要作用就是进行前台控件内容和后台ip地址的互相传递。
对于网络通讯编程,一般是用一个IP地址结构体来表示IP地址,对于非网络通讯编程,一般是用一个32位无符号整形变量来表示IP地址。
IP地址控件的几个函数都可以方便的进行网络通讯编程和前台的交互,以及非网络通讯编程和前台的交互。

设置控件显示内容,后台给前台传数据

//网络编程时直接使用IP地址结构体
struct in_addr addrIP;   
((CIPAddressCtrl*)GetDlgItem(IDC_IPADDRESS1))->SetAddress(addrIP.S_un.S_un_b.s_b1,addrIP.S_un.S_un_b.s_b2,addrIP.S_un.S_un_b.s_b3,addrIP.S_un.S_un_b.s_b4); 
//非网络编程时直接使用整形变量   
DWORD dwAddress = 0x7F000001;//127.0.0.1
((CIPAddressCtrl*)GetDlgItem(IDC_IPADDRESS1))->SetAddress( dwAddress );//参数为主机字节顺序
//也可以直接填数字   
((CIPAddressCtrl*)GetDlgItem(IDC_IPADDRESS1))->SetAddress( 192,168,1,10 );

获取控件内容,前台给后台传数据

//网络编程时直接使用IP地址结构体
struct in_addr addrIP;
((CIPAddressCtrl*)GetDlgItem(IDC_IPADDRESS1))->GetAddress(addrIP.S_un.S_un_b.s_b1,addrIP.S_un.S_un_b.s_b2,addrIP.S_un.S_un_b.s_b3,addrIP.S_un.S_un_b.s_b4); 
//非网络编程时直接使用整形变量
DWORD dwAddress ;	
((CIPAddressCtrl*)GetDlgItem(IDC_IPADDRESS1))->GetAddress( dwAddress );//参数为主机字节顺序

注意:上边的函数是4个参数,下边的函数是一个参数。

知识点:
IP地址结构体中存储的IP地址是网络字节顺序的,高字节在前,低字节在后,例如0x7F000001
32位无符号长整数中存储的IP地址是主机字节顺序的,低字节在前,高字节在后,例如0x0100007F
它们都表示127.0.0.1这个IP地址,转换函数如下:

DWORD dwAddress;
struct in_addr addrIP;
dwAddress = ntohl( addrIP.S_un.S_addr );//ip地址结构体变成整形变量
addrIP.S_un.S_addr = htonl(dwAddress );//整形变量变成IP地址结构体   

为了方便文本框编程,需要用点分十进制的IP地址字符串来表示一个IP地址。但是目前只有IP地址结构体和点分十进制的IP地址字符串之间的转换函数,如下

char * strIP = "127.0.0.1";
struct in_addr addrIP;
addrIP.S_un.S_addr = inet_addr( strIP );//把字符串变成ip地址结构体
strIP=inet_ntoa(addrIP);//ip地址结构体变成字符串

注意:没有32位无符号长整数和点分十进制的IP地址字符串之间的转换函数,必须通过IP地址结构体来搭桥。

你可能感兴趣的:(控件应用)