duilib 绘制IP控件
在使用duilib时,发现本来的库并没有提供IP控件,如是自己想到绘制IP控件,控件的绘制不难,首先复制UIEdit的两个文件,命名为UIIPEdit,更改完成后,便可以进行修改绘制IP控件。
绘制难道主要在鼠标点击的时候,标亮所选择的IP的第几个值,解觉得整个问题其实也很简单,步骤如下:
1.响应鼠标按下和双击消息
2.响应后,根据鼠标位置,判断当前鼠标点击所在啊的位置
3.标亮选中的区域
那如何由鼠标判断位置嘞?做法是获取每个文字所占的鼠标位置。由于,字体大小是变化的,获取位置时需要借助win API GetTextExtentPoint32,由此API可以获取字体SIZE,然后通过获取鼠标点击的位置来判断标亮选择那个位置,代码如下:
HFONT nFont = m_pOwner->GetManager()->GetFont(m_pOwner->GetFont());//得到当前字体
///::CClientDC dcClient(m_hWnd);
HDC hHdc = ::GetDC(m_hWnd);//由句柄获取当前HDC
HFONT nOldFont = SelectFont(hHdc,nFont);//选择当前字体
SIZE sizeIP1 = {};
::GetTextExtentPoint32(hHdc,m_pOwner->GetText(),,&sizeIP1);
SIZE sizeIP2 = {};
::GetTextExtentPoint32(hHdc,m_pOwner->GetText(),,&sizeIP2);
SIZE sizeIP3 = {};
::GetTextExtentPoint32(hHdc,m_pOwner->GetText(),,&sizeIP3);
SIZE sizeIP4 = {};
::GetTextExtentPoint32(hHdc,m_pOwner->GetText(),,&sizeIP4);
SelectFont(hHdc,nOldFont);//恢复旧字体
::ReleaseDC(m_hWnd, hHdc);//释放句柄
if(sizeIP1.cx >= pt.x &&pt.x >= )//判断光标区域
{
//pEdit->SetFocus();
m_pOwner->SetSel(,);
m_enType = POS_IP1;
//pEdit1->SetFocus();
}
else if(pt.x > sizeIP1.cx && pt.x <= sizeIP2.cx)//判断光标区域
{
m_pOwner->SetSel(,);
m_enType = POS_IP2;
}
else if(pt.x > sizeIP2.cx && pt.x <= sizeIP3.cx)//判断光标区域
{
m_pOwner->SetSel(,);
m_enType = POS_IP3;
}
else if(pt.x > sizeIP3.cx && pt.x <= sizeIP4.cx)//判断光标区域
{
m_pOwner->SetSel(,);
m_enType = POS_IP4;
}
判断了区域后,剩下的就是输入了,由于IP有限制,不能超过255,所以输入时要做判断。输入时,响应WM_CHAR消息,在此消息中,对输入的数字做判断和边界处理。解决了难点,IP控件,也就绘制成功,如有问题,欢迎一起讨论。
duilib 绘制IP控件的更多相关文章
- duilib修复ActiveXUI控件bug,以支持flash透明动态背景
转载请说明原出处,谢谢~~ 昨天在QQ控件里和同学说起QQ2013登陆窗体的开发,从界面角度考虑,单单一个登陆界面是很容易做出来的.腾讯公司为了 防止各种盗号行为可谓煞费苦心,QQ2013采用了动态背 ...
- 改进duilib的richedit控件的部分功能
转载请说明原出处,谢谢~~:http://blog.csdn.net/zhuhongshu/article/details/41208207 如果要使用透明异形窗体功能,首先要改进duilib库让他本 ...
- 将webkit内核封装为duilib的浏览器控件
转载请说明出处,谢谢~~ 原本的duilib是自带浏览器控件的,但是使用了IE内核,我在做仿酷狗音乐播放器时,在右侧乐库要用到浏览器控件,而我使用自带的IE控件却发现了不少缺点,这也是duilib一直 ...
- WM_ERASEBKGND官方解释(翻译),以及Delphi里所有的使用情况(就是绘制窗口控件背景色,并阻止进一步传递消息)
#define WM_ERASEBKGND 0x0014 Parameters wParam A handle to the device context. // ...
- C#自定义ip控件
前言:由于项目中有ip输入,但C#中又没有IP控件,如果直接放4个TextBox感觉又怎么好,还不好控制,于是可以通过自定义控件的方式来解决,就又了下面的自定义ip控件,该控件功能基本完善,如果还有未 ...
- Android中自定义IP控件
最近在搞Android项目,之前并没有系统的去学过这方面的编程,只能边看书边撸代码.在项目的开发的过程中,需要一个IP控件,后面了解到Android中并没有这样的控件,于是网上搜索,发现得到的结果并不 ...
- 百度地图API示例:鼠标绘制点线面 控件修改
需求 :在使用地图API时,绘制工具栏控件想自己选择哪些要,哪些不要. 可以查看相应的类:官网地址: http://api.map.baidu.com/library/DrawingManager/1 ...
- duilib 增加gif控件(基于gdi+,可控制播放暂停,自动设置大小)
转载请说明原出处,谢谢~~:http://blog.csdn.net/zhuhongshu/article/details/42502081 因为项目需要我需要给duilib增加一个gif控件,目前已 ...
- Duilib教程-控件练习
一.控件消息的响应. 在HelloDuilib例子中,程序不能退出,在这里,我将添加一个关闭按钮,当点击它时,调用PostQuitMessage进行退出. 首先在界面的右上角添加一个关闭按钮,并取名为 ...
随机推荐
- (中等) POJ 3034 Whac-a-Mole,DP。
Description While visiting a traveling fun fair you suddenly have an urge to break the high score in ...
- [转]SQL Server® 2008 R2 Express 静默安装
1. http://msdn.itellyou.cn/下载Express版SQL Server 2.快捷键win+R,进入CMD,解压文件,解压命令为 <文件名>.exe /x <解 ...
- jsp 获取应用目录
${pageContext.request.contextPath} // 应用名为“demo1” 则得到的是"/demo1" <script>$(documen ...
- IOS block 对象强引用和若引用
1. 在block外面这样:__weak MyController *weakSelf = self 或者 __weak __typeof(self) weakSelf = self;是为了防止强引用 ...
- PHP下的命令行执行
PHP 的命令行模式 以下是 PHP 二进制文件(即 php.exe 程序)提供的命令行模式的选项参数,您随时可以通过 PHP -h 命令来查询这些参数. Usage: php [options] [ ...
- Selenium2(java)启动常用浏览器 三
默认启动firefox浏览器 Webdriver driver = new FirefoxDriver(); 启动谷歌浏览器 配置chromedriver WebDriver driver; Syst ...
- 医院his系统数据库恢复
医院IT系统的重要性堪比金融行业,“银行系统宕机,老百姓不能取钱:医院HIS系统宕机,老百姓不能看病”, 医院信息系统称得上是迄今为止企业级信息系统中最复杂的一类. 某医院HIS系统SQL2008数 ...
- iOS 选择框 单选框
UIButton *checkbox = [UIButton buttonWithType:UIButtonTypeCustom]; CGRect checkboxRect = CGRectMake( ...
- UVa 311 - Packets
题目大意:有1X1,2X2 ... 5X5,6X6六种类型的物品,把他们装进6X6的盒子里,求使用的最少盒子数. 贪心吧,其实一看就知道思路了,算是常识吧,装物品时通常都是先装大的,再在其余空间放小的 ...
- 纯css三角形
三角形原理: 盒子c内容width为0,height为0,盒子给一定宽度的border,分别为四边的border设置不同的颜色,则可以得到不同样式的三角形举个简单的栗子:CSS代码 .box1{ wi ...