您的位置:首页 > 其它

vc中IP地址控件的使用

2013-06-03 16:45 239 查看
CIPAddressCtrl::ClearAddress 清除IP地址控件中的内容。void ClearAddress();
CIPAddressCtrl::Create 创建一个IP地址控件。BOOL Create(DWORD dwStyle,RECT& rect,CWnd* pParentWnd,UINT nID);

参数:dwStyle 为控件风格,可使用窗口风格的组合;rect 控件大小和位置;pParentWnd 指向父窗口的指针,不能为NULL;nID 控件的ID。

返回值:若成功,返回非0;否则返回0
CIPAddressCtrl::GetAddress 获取IP地址控件中的地址值。int GetAddress(BYTE& nField0,BYTE& nField1,BYTE& nField2,BYTE& nField3);

int GetAddress(DWORD& dwAddress);

第一种形式是把IP地址的4个域填充到用4个引用中。

第二种形式是把IP地址填充到1个长整数的引用中。

返回值:IP地址控件中非空域的数量。
CIPAddressCtrl::IsBlank 判断IP地址控件中所有域是否为空。BOOL IsBlank();

返回值:如果IP地址控件的所有域均为空,返回非0值;否则返回0。
CIPAddressCtrl::SetAddress 设置IP地址控件中的地址值。void SetAddress(BYTE nField0,BYTE nField1,BYTE nField2,BYTE nField3);

void SetAddress(DWORD dwAddress);

第一种形式是用4个0~255的整数分别设置IP地址各个域的值。

第二种形式是用1个长整数设置IP地址值。

返回值:无
CIPAddressCtrl::SetFieldFocus 把输入焦点设置在指定的域中。void SetFieldFocus(WORD nField);

参数:nField 取值为0~3,如果大于3,则焦点设置到第一个空域中,若所有域均非空,则焦点设置在第一个域中。

返回值:无
CIPAddressCtrl::SetFieldRange 设置指定域中数值的取值范围。void SetFieldRange(int nField,BYTE nLower,BYTE nUpper);

参数:nField 域索引,取值0~3;nLower 域的下限值;nUpper:域的上限值。

返回值:无
0. 常用操作

DWORD dwAddress;
DWORD dwNetmask;
this->m_cGwIp.GetAddress(dwAddress);
this->m_cGwNetmask.GetAddress(dwNetmask);
//从IP控件获得的DWORD要htonl转换一下才能赋值给S_addr
struct in_addr inadGw,inadNetmask;
inadGw.S_un.S_addr = htonl(dwAddress);
inadNetmask.S_un.S_addr = htonl(dwNetmask);
char szGateway[128];
char szNetmask[128];
//in_addr 转 String
strcpy_s(szGateway,sizeof(szGateway),inet_ntoa(inadGw));
strcpy_s(szNetmask,sizeof(szNetmask),inet_ntoa(inadGw));
TRACE("gateway:%s netmask:%s",szGateway,szNetmask);
//判断IP的第一个字节, s_b1 数据类型为BYTE(unsigned char),直接判断
if(inadGw.S_un.S_un_b.s_b1 == 127) return ;

//String 转 DWORD IP ,初始化IP控件
dwAddress = inet_addr("1.2.3.4");
((CIPAddressCtrl*)GetDlgItem(IDC_IPGATEWAY))->SetAddress((u_long)htonl(dwAddress));


1

this->m_pDefaultRoute = (PMIB_IPFORWARDROW)::GlobalAlloc(GPTR,sizeof(MIB_IPFORWARDROW));
PMIB_IPFORWARDROW pDefaultRoute = FindRoute(0,0);
if(NULL != pDefaultRoute ){
memcpy(m_pDefaultRoute,pDefaultRoute,sizeof(MIB_IPFORWARDROW));
}

if(NULL != m_pDefaultRoute){
struct in_addr gw , netmask;
char szGateway[128];
char szNetmask[128];
gw.S_un.S_addr = (u_long)m_pDefaultRoute->dwForwardNextHop;
netmask.S_un.S_addr = (u_long)m_pDefaultRoute->dwForwardMask;
strcpy_s(szGateway,sizeof(szGateway),inet_ntoa(gw));
strcpy_s(szNetmask,sizeof(szNetmask),inet_ntoa(netmask));
TRACE("GW:%s, NETMASK:%s",szGateway,szNetmask);
m_cGwIp.SetAddress((u_long)htonl(m_pDefaultRoute->dwForwardNextHop));
m_cGwNetmask.SetAddress((u_long)htonl(m_pDefaultRoute->dwForwardMask));
}

if(NULL != pDefaultRoute ) ::GlobalFree(pDefaultRoute);
return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE

2

void CNetProcessDlg::EnmuRoute(void)
{
PMIB_IPFORWARDTABLE pIpRouteTable = MyGetIpForwardTable(true);
CStringA output = "";
if(NULL != pIpRouteTable){
DWORD i, dwCurrIndex;
struct in_addr inadDest;
struct in_addr inadMask;
struct in_addr inadGateway;
PMIB_IPADDRTABLE pIpAddrTable = NULL;

char szDestIp[128];
char szMaskIp[128];
char szGatewayIp[128];

for(i = 0; i< pIpRouteTable ->dwNumEntries; i++) {
dwCurrIndex = pIpRouteTable->table[i].dwForwardIfIndex;

inadDest.S_un.S_addr =(u_long) pIpRouteTable->table[i].dwForwardDest;
inadMask.S_un.S_addr = (u_long)pIpRouteTable ->table[i].dwForwardMask;
inadGateway.S_un.S_addr = (u_long)pIpRouteTable->table[i].dwForwardNextHop;

strcpy_s(szDestIp,sizeof(szDestIp),inet_ntoa(inadDest));
strcpy_s(szMaskIp,sizeof(szMaskIp),inet_ntoa(inadMask));
strcpy_s(szGatewayIp,sizeof(szGatewayIp),inet_ntoa(inadGateway));
CStringA tmp = "";
tmp.Format("%s %s %s %d %d\r\n",szDestIp,szMaskIp,szGatewayIp,dwCurrIndex,pIpRouteTable->table[i].dwForwardMetric1);
output += tmp;
}
}else {
MessageBox(_T("error"));
}
MyFreeIpForwardTable(pIpRouteTable);
const char* ch = output;
CStringW output_w = CStringW(output);
this->writeLog(output_w);
}


3

PMIB_IPFORWARDROW CNetProcessDlg::FindRoute(DWORD dest,DWORD netmask)
{
PMIB_IPFORWARDTABLE pIpRouteTable = MyGetIpForwardTable(true);
PMIB_IPFORWARDROW pRow = NULL;
if(pIpRouteTable != NULL) {
for(DWORD i=0;i<pIpRouteTable->dwNumEntries;i++){
if(pIpRouteTable ->table[i].dwForwardDest == dest &&
pIpRouteTable ->table[i].dwForwardMask == netmask) {
pRow = (PMIB_IPFORWARDROW)::GlobalAlloc(GPTR,sizeof(MIB_IPFORWARDROW));
memcpy(pRow,&pIpRouteTable ->table[i],sizeof(MIB_IPFORWARDROW));
}
}

}
MyFreeIpForwardTable(pIpRouteTable);
return pRow;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: