您的位置:首页 > 其它

CIPAddressCtrl 控件的用法:

2011-08-02 16:48 267 查看
CIPAddressCtrl控件的用法:

(1)

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);

//获取本机IP地址后显示在IP地址控件

字符串转为地址

unsigned long inet_addr (

const char FAR * cp

);

地址转为字符串

char FAR * inet_ntoa (

struct in_addr in

);

DWORD dwIP = inet_addr(inet_ntoa(*(struct in_addr *)*hostinfo->h_addr_list));

((CIPAddressCtrl *)GetDlgItem(IDC_IPADDRESS_LOCALIP))->SetAddress(LOBYTE(LOWORD(dwIP)),

HIBYTE(LOWORD(dwIP)),LOBYTE(HIWORD(dwIP)),HIBYTE(HIWORD(dwIP)));

*/

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);

}

(2)

CIPAsressCtr初始化代码只能写在CMydlg::OnInitDialog()中

#include <afxsock.h>//把CString表示的IP地址写到IP Address里面

CString strIP="192.168.0.17";

DWORD dwIP=ntohl(inet_addr(strIP));

m_IP.SetAddress(dwIP);//读取IP Address的内容.

DWORD dwIP;

IN_ADDR ia;

CString strIP;

m_IP.GetAddress(dwIP);

ia.S_un.S_addr=htonl(dwIP);

strIP=inet_ntoa(ia);

来源: http://www.programbbs.com/bbs/tree20-1444-6627.htm
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: