在vc++中,如果想要輸入ip位址可使用ip位址控制項,該控制項是乙個與編輯控制項類似的控制項,可用於輸入ip位址。
在對話方塊中放入此控制項後,可以為控制項定義乙個 cipaddressctrl類 的變數對它進行控制。
cipaddressctrl類 的主要成員函式有:
void clearaddress();
清除ip位址控制項中的內容。
bool isblank();
如果ip位址控制項的所有域均為空,返回非0值;否則返回0。
void setaddress(byte nfield0,byte nfield1,byte nfield2,byte nfield3);
void setaddress(dword dwaddress);
設定ip位址控制項中的位址值。
第一種形式是用4個0~255的整數分別設定ip位址各個域的值。
第二種形式是用1個長整數設定ip位址值。
int getaddress(byte& nfield0,byte& nfield1,byte& nfield2,byte& nfield3);
int getaddress(dword& dwaddress);
獲取ip位址控制項中的位址值。
第一種形式是把ip位址的4個域填充到用4個引用中。
第二種形式是把ip位址填充到1個長整數的引用中。
返回值:ip位址控制項中非空域的數量。
void setfieldfocus(word nfield);
把焦點設定在指定的域中。nfield取值為0~3,如果大於3,則焦點設定到第乙個空域中,若所有域均非空,則焦點設定在第乙個域中。
void setfieldrange(int nfield,byte nlower,byte nupper);
設定指定域中數值的取值範圍。
nfield:域索引,取值0~3;
nlower:域的下限;
nupper:域的上限。
下面的例子摹仿為計算機設定ip位址的對話方塊看一下ip位址控制項的用法。
對話方塊建立後,建立乙個csetipdialog類來控制該對話方塊。
為對話方塊中的各控制項新增相應的控制變數。
setipdialog.h:
//;cipaddressctrl m_ipaddressctrl3;
cipaddressctrl m_ipaddressctrl2;
cipaddressctrl m_ipaddressctrl1;
cstatic m_ipstatic3;
cstatic m_ipstatic2;
cstatic m_ipstatic1;
int ip_from;
//}}afx_data
setipdialog.cpp:
void csetipdialog::dodataexchange(cdataexchange* pdx)
}afx_data_map
}m_ipaddressctrl1對應輸入ip位址的控制項;
m_ipaddressctrl2對應輸入子網掩碼的控制項;
m_ipaddressctrl3對應輸入預設閘道器的控制項;
變數ip_from對應於單選按鈕的位置,當ip_from==0時,表示ip位址是自動獲取的,此時,各ip位址控制項為灰色顯示,不能進行設定。當ip_from==1時,可以設定ip位址。函式enableip()可根據ip_from的值設定各ip位址控制項的可用性:
void csetipdialog::enableip()
用classwizard新增單選按鈕的響應函式:
//訊息函式:自動獲取(單選按鈕)
void csetipdialog::onipfromradio1()
//訊息函式:手工配置(單選按鈕)
void csetipdialog::onipfromradio2()
當選中「自動獲取」的單選按鈕時,用clearaddress()函式清除各ip位址控制項的內容,然後把控制項設定為灰色。
當選中「手工配置」的單選按鈕時,讓各ip位址控制項可用,並且把輸入焦點設定第1個ip位址控制項的第0個域中。
子網掩碼的輸入:
按照習慣,當輸入了ip位址後,只要單擊輸入子網掩碼的ip位址控制項就可以自動生成預設的子網掩碼。為了實現這一點,可以用新增乙個新類csubnetmaskctrl,基類為cipaddressctrl。
在該類中加入乙個變數cipaddressctrl* p_ipaddressctrl;
該變數是指向輸入ip位址的控制項的指標,用於獲取控制項中輸入的ip位址。
在csubnetmaskctrl中新增乙個訊息函式onsetfocus(),當子網掩碼控制項獲得輸入焦點時會執行此函式。
(注:此函式響應的是en_setfocus訊息,在classwizard中沒有此訊息,所以只能手工新增。)
subnetmaskctrl.h:
protected:
//}afx_msg
afx_msg void onsetfocus();
declare_message_map()
subnetmaskctrl.cpp:
void csubnetmaskctrl::onsetfocus()
}在函式中,如果子網掩碼為空,就通過p_ipaddressctrl指標獲取使用者輸入的ip位址,然後根據ip位址的第1個數的取值設定本控制項中的子網掩碼預設值。
回到csetipdialog對話方塊,把用於輸入子網掩碼的ip位址控制項的型別改為csubnetmaskctrl。
setipdialog.h:
//;cipaddressctrl m_ipaddressctrl3;
csubnetmaskctrl m_ipaddressctrl2;
cipaddressctrl m_ipaddressctrl1;
cstatic m_ipstatic3;
cstatic m_ipstatic2;
cstatic m_ipstatic1;
int ip_from;
//}}afx_data
用classwizard新增對話方塊的初始化函式。
bool csetipdialog::oninitdialog()
在這裡把輸入ip位址的控制項位址傳送給子網掩碼控制項。
經過以上設定,該對話方塊就可以用來輸入ip位址、子網掩碼、預設閘道器等引數了,至於輸入值的儲存,可根據實際應用另行設定。
IP位址控制項CIPAddressCtrl類的使用
在對話方塊中放入此控制項後,可以為控制項定義乙個 cipaddressctrl類 的變數對它進行控制。cipaddressctrl類 的主要成員函式有 void clearaddress 清除ip位址控制項中的內容。bool isblank 如果ip位址控制項的所有域均為空,返回非0值 否則返回0。...
IP位址控制項CIPAddressCtrl類的使用
在vc 中,如果想要輸入ip位址可使用ip位址控制項,該控制項是乙個與編輯控制項類似的控制項,可用於輸入ip位址。在對話方塊中放入此控制項後,可以為控制項定義乙個 cipaddressctrl類 的變數對它進行控制。cipaddressctrl類 的主要成員函式有 void clearaddress...
VC 控制項之IP位址設定
一 新建工程 二 編輯資源對話方塊 三 新增變數 函式 1 新增變數 2 新增函式 四 為新建函式新增 紅色部分 void cipeditdlg onshowbutton else else 五 編譯 六 執行 七 函式說明 1 cipaddressctrl setaddress函式宣告 void ...