使用Windows系统提供的IP控件

villa47

villa47

2016-02-19 16:34

只要你有一台电脑或者手机,都能关注图老师为大家精心推荐的使用Windows系统提供的IP控件,手机电脑控们准备好了吗?一起看过来吧!

  在网络程序中,我们常常碰到需要用户输入IP地址的情况。然而C++ Builder并没有为我们提供可以用于输入IP串的控件,于是我们只好用TEdit控件(单行文本框)来接受用户输入的IP串。但是,使用TEdit来输入IP串并不是一个好的主意,因为处理起来非常不方便。事实上,在我们的身旁有一个专门用来输入IP串的Windows控件,就象网络链接属性中, Internet 协议 (TCP/IP) 属性中输入IP的控件。IP控件会拒绝非法的IP串(在每个部分只能输入0~255之间的数字);它让你可以轻松地获取控件中的IP串所对应的IP值(32位整数),这省去了IP串和IP值之间相互转换的麻烦;此外,你还能限制IP控件中所能输入的IP的范围。在本文中,我将向大家介绍如何在我们的C++ Builder程序中使用Windows的IP控件。

  Windows中有两个非常重要的动态联结库:commctrl.dll和comctl32.dll,它们是Windows的自定义控制库(Windows Common Controls)。自定义控制库中包含了许多常用的Windows控件,如Statusbar,Coolbar,HotKey等;在C++ Builder中,这些控件大多数都已被包装成可视化控件了。在Microsoft推出Internet Explorer 3之后,自定义控制库中新增了一些控件,其中就包括Windows的IP控件(IP Address edit control)。

  ●初始化Windows自定义控制库●

  Windows提供了两个API函数,InitCommonControls和InitCommonControlsEx,用来初始化自定义控制库。从名字我们不难看出这两个API函数的关系:后者是前者的增强。如果你希望在程序中使用IP控件,你必须用InitCommonControlsEx来完成对自定义控制库以及类的初始化。函数InitCommonControlsEx的原型如下:

  typedef struct tagINITCOMMONCONTROLSEX {

  DWORD dwSize;       // size of this structure

  DWORD dwICC;       // flags indicating which classes to be initialized

  } INITCOMMONCONTROLSEX, *LPINITCOMMONCONTROLSEX;

  WINCOMMCTRLAPI BOOL WINAPI InitCommonControlsEx(LPINITCOMMONCONTROLSEX);

  IP控件属于ICC_INTERNET_CLASSES类别的控件,如果要使用该控件,你应该在程序中包含如下的初始化代码:

  TInitCommonControlsEx ICC;

  ICC.dwSize = sizeof(TInitCommonControlsEx);

  ICC.dwICC = ICC_INTERNET_CLASSES;

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/bianchengyuyan/)

  if(!InitCommonControlsEx(&ICC))

  return; //初始化组件失败

  ●创建IP控件●

  Windows API函数CreateWindow或者CreateWindowEx都可以用来创建一个IP控件实例。IP控件的窗口类名为"SysIPAddress32",C++ Builder的commctrl.pas单元为其定义了一个符号常量WC_IPADDRESS。下面这条语句将在Form1上创建一个IP控件。

  HWND hIpEdit = CreateWindow(WC_IPADDRESS,NULL,WS_CHILD|WS_VISIBLE,10,10,135,47,Handle,0,HInstance,NULL);

  ●使用IP控件●

  在程序中,我们通过向IP控件发送消息来与它通讯。IP控件可以响应的消息有以下6个,这些消息及它们的含义见下表:

  消息常量      消息值     作用                   参数及返回值

  IPM_CLEARADDRESS  WM_USER+100  清除IP控件中的IP串            参数无

  IPM_SETADDRESS   WM_USER+101  设置IP控件的IP串             Lparam为32位的IP值

  IPM_GETADDRESS   WM_USER+102  获取IP控件中的IP串所对应的IP值(32位整数) Lparam为一个指向Integer变量的指针。返回值等于IP控件中非控的字段数目;获取到的IP值存放在lparam 所指向的Integer变量中。 

  IPM_SETRANGE    WM_USER+103  设置IP控件4个部分的其中一个的IP取值范围  Wparam指明要设置取值范围的部分;lparam的低16位字为该字段的范围:高字节为上限,低字节为下限。

  IPM_SETFOCUS    WM_USER+104  设输入焦点                Wparam指明哪个部分获取焦点

  IPM_ISBLANK     WM_USER+105  IP串是否为空               参数无。返回值:若为空,返回非0;不为空,返回0

  ★㈠清空IP串(IPM_CLEARADDRESS)★

  SendMessage(hIpEdit,IPM_CLEARADDRESS,0,0);

  ★㈡设置IP串(IPM_SETADDRESS)★

  int nIP;

  nIP=MAKEIPADDRESS(192,168,0,1);

  SendMessage(hIpEdit,IPM_SETADDRESS,0,nIP);

  此例将IP控件的内容设为"192.168.0.1",其中MAKEIPADDRESS是一个Win32宏,定义在commctrl.h头文件中,它用来合成一个32位的IP值:

  #define MAKEIPADDRESS(b1,b2,b3,b4)

  ((LPARAM)(((DWORD)(b1)24)+((DWORD)(b2)16)+((DWORD)(b3)8)+((DWORD)(b4))))

  ★㈢获取IP值(IPM_GETADDRESS)★

  int nIP;

  SendMessage(hIpEdit,IPM_GETADDRESS,0,int(&nIP));

  //nIP++;

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/bianchengyuyan/)

  //SendMessage(hIpEdit,IPM_SETADDRESS,0,nIP);  //将IP加1再赋给IP控件。

  若想要获取IP控件中IP串所对应的IP值,你应该向IP控件发送IPM_GETADDRESS消息,并且需要把一个32位整数的地址作为SendMessage的最后一个参数。

  ★㈣设置取值范围(IPM_SETRANGE)★

  SendMessage (hIpEdit, IPM_SETRANGE, 0, 2008|100);

  此语句将IP控件的第一部分的范围限制为100~200。在IPM_SETRANGE消息中,Wparam指明要设置的字段, 而lparam的低16位字为该字段的范围:高字节为上限,低字节为下限。

  ★㈤设置输入焦点(IPM_SETFOCUS)★

  SendMessage(hIpEdit,IPM_SETFOCUS,3,0);

  //将输入焦点设在IP控件的第四部分。

  ㈥判断IP串是否为空(IPM_ISBLANK)

  

if(!SendMessage(hIpEdit,IPM_ISBLANK,0,0))
{
  //IP控件中的IP串为空
}
else
{
  //IP控件中的IP串至少有一部分不是空的
}

  ●IP控件的通知消息●

  当IP串被改动后或者输入焦点发生了转移,IP控件就会向它的父窗口发送通知消息IPN_FIELDCHANGED。在大多数情况下,我们都可以忽略此通知消息。以下是处理通知消息IPN_FIELDCHANGED的一个示例:

  

void __fastcall TForm1::WndProc(TMessage &Msg)
{
  LPNMHDR p=(LPNMHDR)Msg.LParam;
  if(Msg.Msg==WM_NOTIFY)
  {
    if(p-code==IPN_FIELDCHANGED)
    {
      //处理IP控件的IPN_FIELDCHANGED通知消息
    }
  }
  TForm::WndProc(Msg);
}

展开更多 50%)
分享

猜你喜欢

使用Windows系统提供的IP控件

编程语言 网络编程
使用Windows系统提供的IP控件

文件系统控件的使用

编程语言 网络编程
文件系统控件的使用

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

Windows 7系统修改IP的方法

电脑入门
Windows 7系统修改IP的方法

Windows Mobile下使用HTML控件

Web开发
Windows Mobile下使用HTML控件

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

windows 8系统如何修改ip地址

电脑入门
windows 8系统如何修改ip地址

vb文件系统控件的使用

编程语言 网络编程
vb文件系统控件的使用

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

贴近用户心理模型的设计

贴近用户心理模型的设计

放置“透明”的图片

放置“透明”的图片
下拉加载更多内容 ↓