VC學習 IP位址控制項小技巧

2021-03-31 08:56:32 字數 1889 閱讀 1838

一、如何響應en_change事件

在控制項中提供了ipn_fieldchanged的通知訊息,該訊息在控制項的輸入域發生變化的時候發生,一般來說可以滿足需求。但是,有的時候,我們希望每當改變乙個值的時候就希望知道當前輸入的位址,這樣能夠及時的對輸入的情況進行判斷,而ipn_fieldchanged訊息顯然不能提供這種支援。

從msdn中可以知道,該控制項雖然不是乙個編輯框控制項,但是當控制項中某個域的值發生變化的時候,會傳送en_change的通知(sent when any field in the ip address control changes. like the en_change notification from a standard edit control, this notification is received after the screen has been updated。(注:來自msdn))。因此,我們可以在控制項的父視窗中響應en_change事件。事實上,儘管說ip位址控制項不是編輯框控制項,但是在該控制項中還是把編輯框作為其子視窗,並且通過spy++可以得到這個編輯框控制項的id。在得到了這個id後,在父視窗為控制項新增en_change的訊息對映:

afx_msg void onchangeedit***();

on_en_change(1135, onchangeedit***)

void c***::onchangeedit***()

其中,on_en_change中的1135為用spy++得到的控制項的編輯框子視窗的id。這樣,父視窗就能隨時接收到控制項某域的值發生改變的通知了。

二、如何在程式中設定網段

ip位址控制項類cipaddressctrl提供了setaddress來設定控制項中各個域的值,該方法可以設定乙個ip位址,但是當想設定乙個網段,同時又不想用掩碼的時候(比如,想設定乙個100.6的網段,而後兩位不能填0,否則就表示乙個位址,而不是網段了),該方法就不能滿足這個需求了。

通過spy++發現,ip位址控制項的編輯框子視窗不是乙個,而是4個,即每個域都是乙個字視窗(不知道是如何實現在乙個控制項中加入相同id的編輯框子視窗的)。因此,可以分別對這四個子視窗進行設定來達到這個目的。下面是設定的**:

void setipaddrctrladdress(cipaddressctrl *pctrl, // the pointer of ip address ctrl

byte nfield0, // the field 0 value from a packed ip address

byte nfield1, // the field 1 value from a packed ip address

byte nfield2,// the field 2 value from a packed ip address

byte nfield3, // the field 3 value from a packed ip address

byte nfieldcount) // the total fields

else if(nfieldcount >= 4)

int nbit = 3;

byte bybit[4];

bybit[0] = nfield0;

bybit[1] = nfield1;

bybit[2] = nfield2;

bybit[3] = nfield3;

hwnd hchild = ::getwindow(pctrl->m_hwnd, gw_child);

while(hchild)

;_sntprintf(szbit, sizeof(szbit), _t("%d"), bybit[nbit]);

::setwindowtext(hchild, szbit);

}hchild = ::getwindow(hchild, gw_hwndnext);

nbit --;}}

VC 控制項之IP位址設定

一 新建工程 二 編輯資源對話方塊 三 新增變數 函式 1 新增變數 2 新增函式 四 為新建函式新增 紅色部分 void cipeditdlg onshowbutton else else 五 編譯 六 執行 七 函式說明 1 cipaddressctrl setaddress函式宣告 void ...

VC2005中使用IP位址控制項

在vc中編寫win32程式,不用mfc,如果要使用ip位址等擴充套件控制項 包括date time控制項 comboboxex控制項等 都需要進行註冊。因為這些控制項是放在comctl32.dll庫中,平時是不載入到記憶體的。如果不進行註冊,那你的程式就無法使用這些控制項。儘管你在對話方塊模板上可以...

VC控制項控制技巧

如何隱藏和顯示控制項 用cwnd類的函式bool showwindow int ncmdshow 可以隱藏或顯示乙個控制項。例1 cwnd pwnd pwnd getdlgitem idc edit1 獲取控制項指標,idc edit為控制項id號 pwnd showwindow sw hide 隱...