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);
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);
*/
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
pIP->SetFieldFocus(2);
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);
}