CIPAddressCtrl控件的用法:
1.通過Create函數(shù)手動(dòng)創(chuàng)建一個(gè)IP控件.
開始時(shí)我在OnInitDialog()函數(shù)中這樣寫的:
CIPAddressCtrl IPAddress;
UINT nID=101;
IPAddress.Create(WS_CHILD |WS_VISIBLE ,CRect(20,20,300,43),this,nID);
但運(yùn)行之后看不到有IP控件出來,后來才發(fā)現(xiàn)原來我的IPAddress是一個(gè)局部變量,當(dāng)OnInitDialog()函數(shù)返回時(shí),這個(gè)變量就撤銷了.
所以不會(huì)有控件出來!!
只要把CIPAddressCtrl IPAddress;放到頭文件中定義為成員變量就OK了!
如果上面的Create函數(shù)的第一個(gè)參數(shù)沒有|WS_VISIBLE;我們可以Create函數(shù)后加這一句:IPAddress.ShowWindow(SW_SHOW);
感覺上Create函數(shù)在每一個(gè)控件里都有,創(chuàng)建的方法也是大同小異了吧!
2.下面的是我在基于一個(gè)對話框的工程中添加一個(gè)IP控件中所寫的:
先獲得控件的指針:
CIPAddressCtrl * pIP=(CIPAddressCtrl*)GetDlgItem(IDC_IPADDRESS);
void ClearAddress( );
這個(gè)函數(shù)將IP控件里的內(nèi)容清空.
BOOL IsBlank( ) const;
這個(gè)函數(shù)是當(dāng)IP控件里一個(gè)數(shù)字都沒有才返回真的,全為0都返回假,0也是數(shù)字!調(diào)用ClearAddress( )后剛好可以使IsBlank()反回真.
測試代碼如下:
pIP->ClearAddress();
if(pIP->IsBlank())
{
MessageBox("IP全為空");
}
int GetAddress(BYTE& nField0, BYTE& nField1, BYTE& nField2, BYTE& nField3);
int GetAddress(DWORD& dwAddress);
當(dāng)控件內(nèi)容為空時(shí),即沒有數(shù)字,連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);
設(shè)置IP地址:(兩種方法,選其一)
pIP->SetAddress(127,0,0,1);
pIP->SetAddress((DWORD)0x7F000001);//這兩行的效果都是一樣的!
void SetFieldRange(int nField, BYTE nLower, BYTE nUpper);
設(shè)置每一個(gè)域的范圍:(nField是0到3的值,nLower和nUpper的范圍都是0到255.可以超出范圍,但控件也還是默認(rèn)設(shè)置回0到255的!
pIP->SetFieldRange(0,5,127);//設(shè)置每一個(gè)域的范圍,第一個(gè)參數(shù)是域的下標(biāo),第二和第三個(gè)是范圍.
pIP->SetFieldRange(1,5,127);//當(dāng)輸入比5少時(shí),如0,當(dāng)失去輸入焦點(diǎn)時(shí),它會(huì)重置為5.
pIP->SetFieldRange(2,5,127);//當(dāng)輸入比127大時(shí),如128,它會(huì)自動(dòng)變回127
pIP->SetFieldRange(3,5,127);
void SetFieldFocus(WORD nField);
nField的值為0到3;表示域的下標(biāo)!該函數(shù)是使輸入焦點(diǎn)落在四個(gè)域的指定域上;
這個(gè)函數(shù)要在消息響應(yīng)時(shí)才能體現(xiàn)出來!
測試代碼:
void CTestDlg::OnButton2()
{
// TODO: Add your control notification handler code here
CIPAddressCtrl * pIP=(CIPAddressCtrl*)GetDlgItem(IDC_IPADDRESS);
pIP->SetFieldFocus(2);
}