在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) |
SetIPDialog.cpp:
void CSetIPDialog::DoDataExchange(CDataExchange* pDX) |
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() |
用ClassWizard添加单选按钮的响应函数:
//消息函数:自动获取(单选按钮) //消息函数:手工配置(单选按钮) |
当选中“自动获取”的单选按钮时,用ClearAddress()函数清除各IP地址控件的内容,然后把控件设置为灰色。
当选中“手工配置”的单选按钮时,让各IP地址控件可用,并且把输入焦点设置第1个IP地址控件的第0个域中。
子网掩码的输入:
按照习惯,当输入了IP地址后,只要单击输入子网掩码的IP地址控件就可以自动生成默认的子网掩码。为了实现这一点,可以 用添加一个新类CSubnetMaskCtrl,基类为CIPAddressCtrl。
在该类中加入一个变量CIPAddressCtrl* p_IPAddressCtrl;
该变量是指向输入IP地址的控件的指针,用于获取控件中输入的IP地址。
在CSubnetMaskCtrl中添加一个消息函数OnSetfocus(),当子网掩码控件获得输入焦点时会执行此函 数。
(注:此函数响应的是EN_SETFOCUS消息,在ClassWizard中没有此消息,所以只能手工添加。)
SubnetMaskCtrl.h:
protected: |
SubnetMaskCtrl.cpp:
BEGIN_MESSAGE_MAP(CSubnetMaskCtrl, CIPAddressCtrl) |
void CSubnetMaskCtrl::OnSetfocus() |
在函数中,如果子网掩码为空,就通过p_IPAddressCtrl指针获取用户输入的IP地址,然后根据IP地址的第1 个数的取值设置本控件中的子网掩码默认值。
回到CSetIPDialog对话框,把用于输入子网掩码的IP地址控件的类型改为CSubnetMaskCtrl。
SetIPDialog.h:
//{{AFX_DATA(CSetIPDialog) |
用ClassWizard添加对话框的初始化函数。
BOOL CSetIPDialog::OnInitDialog() |
在这里把输入IP地址的控件地址传送给子网掩码控件。
经过以上设置,该对话框就可以用来输入IP地址、子网掩码、默认网关等参数了,至于输入值的保存,可根据实际应用另行设 置。