IP位址控制項CIPAddressCtrl類的使用

2021-06-02 09:57:20 字數 3151 閱讀 7050

在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 ...