回覆列表
  • 1 # daazhu1

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

    }

  • 中秋節和大豐收的關聯?
  • 現代為什麼總是把道家的道士給自動歸類於道教裡面?