zoukankan      html  css  js  c++  java
  • 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 = {0};
            ::GetTextExtentPoint32(hHdc,m_pOwner->GetText(),3,&sizeIP1);
    
            SIZE sizeIP2 = {0};
            ::GetTextExtentPoint32(hHdc,m_pOwner->GetText(),7,&sizeIP2);
    
            SIZE sizeIP3 = {0};
            ::GetTextExtentPoint32(hHdc,m_pOwner->GetText(),11,&sizeIP3);
    
            SIZE sizeIP4 = {0};
            ::GetTextExtentPoint32(hHdc,m_pOwner->GetText(),15,&sizeIP4);
    
            SelectFont(hHdc,nOldFont);//恢复旧字体
    
            ::ReleaseDC(m_hWnd, hHdc);//释放句柄
    
            if(sizeIP1.cx >= pt.x &&pt.x >= 0)//判断光标区域
            {
                //pEdit->SetFocus();
                m_pOwner->SetSel(0,3);
                m_enType = POS_IP1;
    
                //pEdit1->SetFocus();
            }
            else if(pt.x > sizeIP1.cx   && pt.x  <= sizeIP2.cx)//判断光标区域
            {      
                m_pOwner->SetSel(4,7);
                m_enType = POS_IP2;
    
            }
            else if(pt.x > sizeIP2.cx   && pt.x  <= sizeIP3.cx)//判断光标区域
            {
    
                m_pOwner->SetSel(8,11);
                m_enType = POS_IP3;
    
            }
            else if(pt.x > sizeIP3.cx   && pt.x  <= sizeIP4.cx)//判断光标区域
            {          
                m_pOwner->SetSel(12,15);
                m_enType = POS_IP4;
    
            }

      判断了区域后,剩下的就是输入了,由于IP有限制,不能超过255,所以输入时要做判断。输入时,响应WM_CHAR消息,在此消息中,对输入的数字做判断和边界处理。解决了难点,IP控件,也就绘制成功,如有问题,欢迎一起讨论。

  • 相关阅读:
    使用母版页后台控制样式
    sql语句小综合
    sql拆分字段区分查询
    sql排名语句
    智力大冲浪(贪心)
    互斥的数(贪心)
    Crazy Search(hash)
    Frequent values(倍增RMQ)
    色板游戏(线段树)
    阶乘质因子分解(唯一分解定理)
  • 原文地址:https://www.cnblogs.com/happinessday/p/6381170.html
Copyright © 2011-2022 走看看