WIN32程序IP Control实现禁止输入非法字符

刚来公司,要维护一个WIN32程序,因为之前用的BCB,根本不知道消息是怎样处理的,好个抓耳挠腮。

一个IP控件,控件本身已经实现了只能键入(注意:只是键入)数字,但是如果Ctrl+V或者鼠标右键粘贴都可以输入非法字符,而且这个控件会默认把非法字符处理成0,比如你输入“192.168.haha.123”,你获取IP后就是“192.168.0.123”,之前尝试子类化控件,可发现还是不行,不知道是不是方法不对,如果有人实现了麻烦告诉我一声。

不过我想,既然不想别人粘贴,那焦点在这个控件上,并且内容发生变化的时候,就清空剪贴板,这样就通过另一种途径防止了别人“Ctrl+V”或者“右键粘贴”输入错误字符了,不过有个缺点,就是剪贴板被清空了,而且只能键入ip地址,不能复制粘贴了,哎,凑合着吧。

通过Spy++我知道了鼠标点击控件会触发WM_COMMAND消息下面的EN_SETFOCUS消息。怎么知道的?哈哈,说了我不会WIN32开发,我是不知道这两个消息的,毕竟工作经验不长嘛!不过有Spy++,你就什么都知道了。Spy++怎么用?哎,你去谷歌吧。

下面是我的截图:

这下好了,在EN_SETFOCUS下面清空剪贴板内容,代码如下:

void  OnClearClipboard(HWND hWnd)
{
	if (IsClipboardFormatAvailable(CF_TEXT) && OpenClipboard(hWnd)) 
	{
        HANDLE hMem = GetClipboardData(CF_TEXT); 
        if (hMem != NULL) 
        {
            EmptyClipboard();			
        }
        CloseClipboard();
    }
}

运行,复制一段文字,鼠标右击,粘贴选项已经灰掉,OK,“Ctrl+V”,咦,有问题,IP控件里的内容被清空了,为什么?不知道难过

算了,活人不能被尿憋死,绕道而行,焦点在控件上的时候禁用Ctrl+V快捷键,失去焦点的时候在启用(不这样打开程序后其他地方就不能用Ctrl+V了,呵呵)。再次用Spy++,发现了失去焦点的消息,



看到了吧,EN_KILLFOCUS消息,好了,附上代码:

if (EN_SETFOCUS == HIWORD(wParam))
{
     OnClearClipboard(hWnd);
     RegisterHotKey(hWnd, HOTKEY, MOD_CONTROL, 'V') == 0;
}
else if (EN_KILLFOCUS == HIWORD(wParam))
{
     UnregisterHotKey(hWnd, HOTKEY);
}

到此,终于完事。


PS:第一次写技术博客,写的不好,还请见谅。因为我是个忘性大的人,今天做完了,一个月后就忘了,以后养成写博客的习惯,同时我发现写博客可以帮自己梳理思路,有一个清晰的思维。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值