Chinaunix首页 | 论坛 | 博客
  • 博客访问: 628544
  • 博文数量: 262
  • 博客积分: 8433
  • 博客等级: 中将
  • 技术积分: 2141
  • 用 户 组: 普通用户
  • 注册时间: 2009-05-31 09:37
文章分类

全部博文(262)

文章存档

2012年(1)

2011年(168)

2010年(92)

2009年(1)

分类: C/C++

2011-02-10 16:26:50


 
CObject
 └CCmdTarget
    └CWnd
       └CIPAddressCtrl

IP地址控件类似于编辑控件,允许进入并操作一个Internet Protocol(IP)格式的数字地址。



CIPAddressCtrl类提供Windows普通IP地址协议的功能。此控件(以及CIPAddressCtrl类)只适用于运行在Microsoft Internet Explorer 4.0及更高版本的程序中。它们在Windows和Windows NT的将来版本中也适用。
要了解IP地址控件的一般信息,请参阅联机文档“平台SDK”中的“关于IP地址控件”。
#include


CIPAddressCtrl类的成员

构造函数
CIPAddressCtrl 构造一个CIPAddressCtrl对象
Create 创建一个IP地址控件并将其附加给一个CIPAddressCtrl对象

属性
IsBlank 确定是否IP地址控件中的所有域都为空
ClearAddress 清空IP地址控件的内容
GetAddress 获取IP地址控件中所有四个域的地址值
SetAddress 设置IP地址控件中所有四个域的地址值
SetFieldFocus 设置键盘焦点到IP地址控件中的指定的域
SetFieldRange 设置IP地址控件中指定域的范围

CIPAddressCtrl控件的用法:

1.通过Create函数手动创建一个IP控件.
开始时我在OnInitDialog()函数中这样写的:
CIPAddressCtrl IPAddress;
UINT nID=101;
IPAddress.Create(WS_CHILD |WS_VISIBLE ,CRect(20,20,300,43),this,nID);
但运行之后看不到有IP控件出来,后来才发现原来我的IPAddress是一个局部变量,当OnInitDialog()函数返回时,这个变量就撤销了.
所以不会有控件出来!!
只要把CIPAddressCtrl IPAddress;放到头文件中定义为成员变量就OK了!

如果上面的Create函数的第一个参数没有|WS_VISIBLE;我们可以Create函数后加这一句:IPAddress.ShowWindow(SW_SHOW);
感觉上Create函数在每一个控件里都有,创建的方法也是大同小异了吧!

2.下面的是我在基于一个对话框的工程中添加一个IP控件中所写的:
先获得控件的指针:
CIPAddressCtrl * pIP=(CIPAddressCtrl*)GetDlgItem(IDC_IPADDRESS);

void ClearAddress( );
这个函数将IP控件里的内容清空.
BOOL IsBlank( ) const;
这个函数是当IP控件里一个数字都没有才返回真的,全为0都返回假,0也是数字!调用ClearAddress( )后刚好可以使IsBlank()反回真.
测试代码如下:
pIP->ClearAddress();
if(pIP->IsBlank())
{
     MessageBox("IP全为空");
}

 

int GetAddress(BYTE& nField0, BYTE& nField1, BYTE& nField2, BYTE& nField3);
int GetAddress(DWORD& dwAddress);
当控件内容为空时,即没有数字,连0也没有,返回0,0,0,0.和控件全为0的情况一样!
获得IP地址:(两种方法,选其一)


 BYTE nf1,nf2,nf3,nf4;
 pIP->GetAddress(nf1,nf2,nf3,nf4);
 CString str;
 str.Format("%d.%d.%d.%d",nf1,nf2,nf3,nf4);//这里的nf得到的值是IP值了.
 MessageBox(str);
 

 /*
 DWORD dw;
 pIP->GetAddress(dw);
 CString str;
 WORD hiWord=HIWORD(dw);
 WORD loWord=LOWORD(dw);
 BYTE nf1=HIBYTE(hiWord);
 BYTE nf2=LOBYTE(hiWord);
 BYTE nf3=HIBYTE(loWord);
 BYTE nf4=LOBYTE(loWord);
 str.Format("%d.%d.%d.%d",nf1,nf2,nf3,nf4);
 MessageBox(str);
 */


void SetAddress(BYTE nField0, BYTE nField1, BYTE nField2, BYTE nField3);
void SetAddress(DWORD dwAddress);
设置IP地址:(两种方法,选其一)

        pIP->SetAddress(127,0,0,1);

 pIP->SetAddress((DWORD)0x7F000001);//这两行的效果都是一样的!


void SetFieldRange(int nField, BYTE nLower, BYTE nUpper);
设置每一个域的范围:(nField是0到3的值,nLower和nUpper的范围都是0到255.可以超出范围,但控件也还是默认设置回0到255的!

 pIP->SetFieldRange(0,5,127);//设置每一个域的范围,第一个参数是域的下标,第二和第三个是范围.
 pIP->SetFieldRange(1,5,127);//当输入比5少时,如0,当失去输入焦点时,它会重置为5.
 pIP->SetFieldRange(2,5,127);//当输入比127大时,如128,它会自动变回127
 pIP->SetFieldRange(3,5,127);


void SetFieldFocus(WORD nField);
nField的值为0到3;表示域的下标!该函数是使输入焦点落在四个域的指定域上;
这个函数要在消息响应时才能体现出来!
测试代码:
void CTestDlg::OnButton2() 
{
 // TODO: Add your control notification handler code here
 CIPAddressCtrl * pIP=(CIPAddressCtrl*)GetDlgItem(IDC_IPADDRESS);
 pIP->SetFieldFocus(2);
}

阅读(1068) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~