VC学习:IP地址控件小技巧

爱笑的大宝321

爱笑的大宝321

2016-02-19 14:28

下面图老师小编跟大家分享一个简单易学的VC学习:IP地址控件小技巧教程,get新技能是需要行动的,喜欢的朋友赶紧收藏起来学习下吧!

  一、如何响应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 OnChangeEditxxx();

  ON_EN_CHANGE(1135, OnChangeEditxxx)

  void Cxxx::OnChangeEditxxx()

  {

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

  …

  }

  其中,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

  {

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

  if(pCtrl == NULL)

  return;

  pCtrl-ClearAddress();

  if( nFieldCount == 0)

  {

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

  return;

  }

  else if(nFieldCount = 4)

  {

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

  pCtrl-SetAddress(nField0, nField1, nField2, nField3);

  return;

  }

  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)

  {

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

  if(nBit nFieldCount)

  {

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

  TCHAR szBit[4] = {0};

  _sntprintf(szBit, sizeof(szBit), _T("%d"), byBit[nBit]);

  ::SetWindowText(hChild, szBit);

  }

  hChild = ::GetWindow(hChild, GW_HWNDNEXT);

  nBit --;

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

  }

  }

展开更多 50%)
分享

猜你喜欢

VC学习:IP地址控件小技巧

编程语言 网络编程
VC学习:IP地址控件小技巧

VC中一些控件的小技巧

编程语言 网络编程
VC中一些控件的小技巧

s8lol主宰符文怎么配

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

用VC实现QQ2004显示IP地址的方法

编程语言 网络编程
用VC实现QQ2004显示IP地址的方法

查找ip地址、查找本地IP、网络IP和对方IP地址的方法

电脑入门
查找ip地址、查找本地IP、网络IP和对方IP地址的方法

lol偷钱流符文搭配推荐

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

linux下修改IP地址的技巧

电脑入门
linux下修改IP地址的技巧

手机ip地址怎么设置 手机ip地址怎么修改

软件教程
手机ip地址怎么设置 手机ip地址怎么修改

lolAD刺客新符文搭配推荐

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

QQ空间中什么是“恶意代码”?

QQ空间中什么是“恶意代码”?

开发工具大比拚之Visual C++ vs. Delphi(三)

开发工具大比拚之Visual C++ vs. Delphi(三)
下拉加载更多内容 ↓