在VC++中,如果想要输入IP地址可使用IP地址控件,该控件是一个与编辑控件类似的控件,可用于输入IP地址。
在对话框中放入此控件后,可以为控件定义一个 CIPAddressCtrl类 的变量对它进行控制。
CIPAddressCtrl类 的主要成员函数有:
void ClearAddress(); 清除IP地址控件中的内容。
BOOL IsBlank(); 如果IP地址控件的所有域均为空,返回非0值;否则返回0。
void SetAddress(BYTE nField0,BYTE nField1,BYTE nField2,BYTE nField3); void SetAddress(DWORD dwAddress); 设置IP地址控件中的地址值。 第一种形式是用4个0~255的整数分别设置IP地址各个域的值。 第二种形式是用1个长整数设置IP地址值。
int GetAddress(BYTE& nField0,BYTE& nField1,BYTE& nField2,BYTE& nField3); int GetAddress(DWORD& dwAddress); 获取IP地址控件中的地址值。 第一种形式是把IP地址的4个域填充到用4个引用中。 第二种形式是把IP地址填充到1个长整数的引用中。 返回值:IP地址控件中非空域的数量。
void SetFieldFocus(WORD nField); 把焦点设置在指定的域中。nField取值为0~3,如果大于3,则焦点设置到第一个空域中,若所有域均非空,则焦点设置在第一个域中。
void SetFieldRange(int nField,BYTE nLower,BYTE nUpper); 设置指定域中数值的取值范围。 nField:域索引,取值0~3; nLower:域的下限; nUpper:域的上限。
下面的例子摹仿为计算机设置IP地址的对话框看一下IP地址控件的用法。

对话框建立后,创建一个CSetIPDialog类来控制该对话框。
为对话框中的各控件添加相应的控制变量。
SetIPDialog.h:
//{{AFX_DATA(CSetIPDialog) enum { IDD = IDD_SETIP_DIALOG }; CIPAddressCtrl m_IPAddressCtrl3; CIPAddressCtrl m_IPAddressCtrl2; CIPAddressCtrl m_IPAddressCtrl1; CStatic m_IPStatic3; CStatic m_IPStatic2; CStatic m_IPStatic1; int IP_From; //}}AFX_DATA |
SetIPDialog.cpp:
void CSetIPDialog::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CSetIPDialog) DDX_Control(pDX, IDC_IPADDRESS3, m_IPAddressCtrl3); DDX_Control(pDX, IDC_IPADDRESS2, m_IPAddressCtrl2); DDX_Control(pDX, IDC_IPADDRESS1, m_IPAddressCtrl1); DDX_Control(pDX, IDC_IP_STATIC3, m_IPStatic3); DDX_Control(pDX, IDC_IP_STATIC2, m_IPStatic2); DDX_Control(pDX, IDC_IP_STATIC1, m_IPStatic1); DDX_Radio(pDX, IDC_IPFROM_RADIO1, IP_From); //}}AFX_DATA_MAP } |
m_IPAddressCtrl1对应输入IP地址的控件;
m_IPAddressCtrl2对应输入子网掩码的控件;
m_IPAddressCtrl3对应输入默认网关的控件;
变量IP_From对应于单选按钮的位置,当IP_From==0时,表示IP地址是自动获取的,此时,各IP地址控件为灰色显示,不能进行设置。当IP_From==1时,可以设置IP地址。函数EnableIP()可根据IP_From的值设置各IP地址控件的可用性:
void CSetIPDialog::EnableIP() { BOOL show = (IP_From==1); m_IPStatic1.EnableWindow( show ); m_IPStatic2.EnableWindow( show ); m_IPStatic3.EnableWindow( show ); m_IPAddressCtrl1.EnableWindow( show ); m_IPAddressCtrl2.EnableWindow( show ); m_IPAddressCtrl3.EnableWindow( show ); } |
用ClassWizard添加单选按钮的响应函数:
//消息函数:自动获取(单选按钮) void CSetIPDialog::OnIPFromRadio1() { IP_From = 0; m_IPAddressCtrl1.ClearAddress(); m_IPAddressCtrl2.ClearAddress(); m_IPAddressCtrl3.ClearAddress(); EnableIP(); }
//消息函数:手工配置(单选按钮) void CSetIPDialog::OnIPFromRadio2() { IP_From = 1; EnableIP(); m_IPAddressCtrl1.SetFieldFocus( 0 ); }
|
当选中“自动获取”的单选按钮时,用ClearAddress()函数清除各IP地址控件的内容,然后把控件设置为灰色。
当选中“手工配置”的单选按钮时,让各IP地址控件可用,并且把输入焦点设置第1个IP地址控件的第0个域中。
子网掩码的输入:
按照习惯,当输入了IP地址后,只要单击输入子网掩码的IP地址控件就可以自动生成默认的子网掩码。为了实现这一点,可以用添加一个新类CSubnetMaskCtrl,基类为CIPAddressCtrl。
在该类中加入一个变量CIPAddressCtrl* p_IPAddressCtrl;
该变量是指向输入IP地址的控件的指针,用于获取控件中输入的IP地址。
在CSubnetMaskCtrl中添加一个消息函数OnSetfocus(),当子网掩码控件获得输入焦点时会执行此函数。
(注:此函数响应的是EN_SETFOCUS消息,在ClassWizard中没有此消息,所以只能手工添加。)
SubnetMaskCtrl.h:
protected: //{{AFX_MSG(CSubnetMaskCtrl) // NOTE - the ClassWizard will add and remove member functions here. //}}AFX_MSG afx_msg void OnSetfocus(); DECLARE_MESSAGE_MAP() |
SubnetMaskCtrl.cpp:
BEGIN_MESSAGE_MAP(CSubnetMaskCtrl, CIPAddressCtrl) //{{AFX_MSG_MAP(CSubnetMaskCtrl) // NOTE - the ClassWizard will add and remove mapping macros here. //}}AFX_MSG_MAP ON_CONTROL_REFLECT(EN_SETFOCUS, OnSetfocus) END_MESSAGE_MAP() |
void CSubnetMaskCtrl::OnSetfocus() { if( p_IPAddressCtrl && IsBlank() ) { BYTE field0, field1, field2, field3; p_IPAddressCtrl->GetAddress( field0, field1, field2, field3 ); if( field0>=1 && field0<=127 ) SetAddress( 255, 0, 0, 0 ); else if( field0>=128 && field0<=191 ) SetAddress( 255, 255, 0, 0 ); else if( field0>=192 && field0<=223 ) SetAddress( 255, 255, 255, 0 ); } } |
在函数中,如果子网掩码为空,就通过p_IPAddressCtrl指针获取用户输入的IP地址,然后根据IP地址的第1个数的取值设置本控件中的子网掩码默认值。
回到CSetIPDialog对话框,把用于输入子网掩码的IP地址控件的类型改为CSubnetMaskCtrl。
SetIPDialog.h:
//{{AFX_DATA(CSetIPDialog) enum { IDD = IDD_SETIP_DIALOG }; CIPAddressCtrl m_IPAddressCtrl3; CSubnetMaskCtrl m_IPAddressCtrl2; CIPAddressCtrl m_IPAddressCtrl1; CStatic m_IPStatic3; CStatic m_IPStatic2; CStatic m_IPStatic1; int IP_From; //}}AFX_DATA |
用ClassWizard添加对话框的初始化函数。
BOOL CSetIPDialog::OnInitDialog() { CDialog::OnInitDialog();
m_IPAddressCtrl2.p_IPAddressCtrl = &m_IPAddressCtrl1;
return TRUE; } |
在这里把输入IP地址的控件地址传送给子网掩码控件。
经过以上设置,该对话框就可以用来输入IP地址、子网掩码、默认网关等参数了,至于输入值的保存,可根据实际应用另行设置。
在实例中,我定义了一个名为CPC的类存放由对话框设置的IP地址。具体情况可以参考示例程序。
|
相关推荐
在IT领域,尤其是在开发涉及网络配置或管理的软件时,"使用IP地址控件显示和设置IP地址"是一个常见的需求。IP地址控件是用户界面(UI)设计中的一种元素,它允许用户方便地输入、查看和修改IPv4或IPv6地址。下面将...
其中,`CIPAddressCtrl`是专门用于处理IP地址输入的控件,它允许用户以标准的IPv4格式(四组0到255之间的数字,每组之间用点分隔)输入或查看IP地址。本实例将深入探讨`CIPAddressCtrl`的使用方法,以及如何在MFC...
本案例中的“IP地址控件自绘”就是利用自绘技术来改变标准的`CIPAddressCtrl`控件的背景颜色,以满足特定的界面设计需求。 `CIPAddressCtrl`是MFC库中提供的一个类,它封装了Windows API中的`IPAddr`控件,通常用于...
总结来说,"IP Address控件编辑IP地址.rar"压缩包提供了在VC++6.0环境中使用IP Address控件的实例,帮助开发者了解如何在对话框中添加和控制IP Address控件,以及如何与之交互以满足网络通信编程的需求。通过学习和...
在MFC(Microsoft Foundation Classes)编程中,可以使用CIPAddressCtrl类提供的SetAddress方法来设置IP地址控件的值。通过调用此方法,可以将一个DWORD类型的数据转换成四个字节的IP地址格式,这样就能直接赋给IP...
在本文中,我们将深入探讨如何在VC++中使用`IP Address`控件来编辑IP地址,并介绍相关的编程技术。 首先,我们需要了解`IP Address`控件的基本属性和功能。这个控件通常以一个带有四个文本框的小窗口形式出现,每个...
在Windows编程中,CIPAddressCtrl是MFC(Microsoft Foundation Classes)库提供的一种控件,用于显示和编辑IP地址。这个控件通常用于用户界面中输入或显示IPv4地址。然而,标准的CIPAddressCtrl控件并不直接支持...
总之,`CWnd 自绘实现CIPAddressCtrl` 是一种利用MFC自定义控件的方法,通过自定义绘制和消息处理,使得 IP 地址控件具有独特的视觉效果和交互方式。`3FieldIPAddressCtrl.h` 和 `3FieldIPAddressCtrl.cpp` 文件是...
本教程以"IP控件使用演示C编程"为主题,主要针对的是MFC中的IP地址控件,即CIPAddressCtrl,以及如何在C++环境中利用MFC进行开发。对于初学者来说,这是一个非常实用的案例,能够帮助理解如何在Windows程序中处理...
7. **对话框控件**:除了常见的窗口控件,还有专门用于对话框的控件,如CDateTimePicker、CIPAddressCtrl等,它们提供了更复杂的功能,如日期选择和IP地址输入。 8. **控件的扩展功能**:如CListCtrl和CTreeCtrl等...
本文档主要介绍了VC++环境下IP地址控件的使用方法,特别是如何处理IP地址输入域变化时的通知事件。文档中提到了`IPN_FIELDCHANGED`这一特定通知消息,以及如何通过代码设置IP地址等细节。 ### 详细知识点解析 ####...
- **IP地址控件 (CIPAddressCtrl)**:用于输入IP地址。 - **扩展组合框控件 (CComboBoxEx)**:在组合框中提供图形支持。 #### 三、控件类的继承关系 在MFC中,所有的控件类都是从`CWnd`类派生出来的,`CWnd`类是...
3lTPIP控件使用可能包含了如何创建、初始化、验证IP地址输入,以及响应用户输入事件的步骤和代码示例。而l9pF树控件.rar可能涵盖了树型控件的创建、填充数据、处理用户交互,以及自定义样式等方面的知识。 网络编程...
在这个项目中,开发者可能使用EnumProtocal来选择TCP协议,通过GetIP获取客户端的IP地址,然后利用MFC的CSocket类创建TCP连接,并通过Local处理用户交互和显示聊天内容。GetNetSetting可能用于在连接前检查网络配置...
18. **IP地址控件**:如`CIPAddressCtrl`,方便管理和输入IP地址。 19. **用户自定义控件**:允许开发者创建具有特殊功能的自定义控件。 20. **扩大组合框控件**:提供增强的组合框功能,如图像列表支持。 #### ...
- **CIPAddressCtrl**:IP地址控件类。 - **CLinkCtrl**:链接控件类。 - **CListBox**:列表框控件类。 - **CCheckListBox**:复选列表框控件类。 - **CDragListBox**:拖拽列表框控件类。 - **CListCtrl**:...
#### CIPAddressCtrl类:提供了IP地址控件的功能 - **简介**:`CIPAddressCtrl` 类用于创建 IP 地址控件。 #### CImageList类:管理大小相同的图标或位图集 - **简介**:`CImageList` 类用于管理图像列表,方便在多...
参数`pDX`是数据交换对象,`IDC_IPADDRESS_CTRL`是IP地址控件的资源ID,`m_ipAddress`则是与控件关联的成员变量,通常是一个`DWORD`类型,存储了四个八位字节的IP地址。 除了基本的数据交换,`ddx_ipaddress`还支持...
ipaddresscontrollib介绍Microsoft为什么不在Visual Studio .NET的常规工具箱中包含IP地址控件? 最近,我在C#应用程序中需要类似于MFC CIPAddressCtrl类的内容,并且被迫自己滚动。 我尝试使用C#模仿...