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