vc中IP地址控件的使用

VC++ 专栏收录该内容
9 篇文章 0 订阅
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;
}


  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 扫一扫,分享海报

参与评论 您还未登录,请先 登录 后发表或查看评论
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值