} } }

    vs2008 edit spin 十六进制实现

    添加时间:2013-8-6 点击量:

    因为做的器材中涉及到一个控件,查了一下叫spin box,然则,spin box控件只在对话框里面才干应用,并且斗劲麻烦,更何况还要用十六进制,查到就有可多edit+spin来做,后来找到一个样例着手开端做,做到后来发明只支撑十进制,于是就本身测验测验着来做
    起首申明一下我做的spin box的目标结果:
    1、可以直接输入
    2、点击高低箭头加减1
    申明:所有过程都是十六进制
    接下来介绍一下edit+spin的应用
    1、控件属性设置:
    Spin:①Auto Buddy:True②Set Buddy Integer:False③Arrow Keys:True
    关于第二点申明一下:底本参考别人的是True,后来发明一向是十进制,十六进制显示不了,查看微软注释就熟悉打听了:Set Buddy Integer,指定命值调节钮控件在它的地位改变时设置合作者窗口的文本。
    Edit:默认
    2、变量定义及事务添加
    ①在窗口类里面定义两个变量:
    CSpinButtonCtrl m_spinAddress;
    CString m_editAddress;
    ②DoDataExchange(CDataExchange pDX)函数里面接洽关系控件跟变量(关于这个参考MSDN)
    DDX_Control(pDX, IDC_SPIN_ADDRESS, m_spinAddress);
    DDX_Text(pDX, IDC_EDIT_ADDRESS, m_editAddress);
    ③在spin控件添加UDN_DELTAPOS(指导控件的地位即将更改)
    3、OnDeltaposSpinAddress(NMHDR pNMHDR, LRESULT pResult)事务内容


     



    void CSolutionDlg::OnDeltaposSpinAddress(NMHDR pNMHDR, LRESULT pResult)
    
    {
    LPNMUPDOWN pNMUpDown
    = reinterpret_cast<LPNMUPDOWN>(pNMHDR);
    // TODO: 在此添加控件通知处理惩罚法度代码

    UpdateData(TRUE);
    //用控件的值更新控件变量的值

    if(pNMUpDown->iDelta > 0//spin往上
    {
    if(!m_editAddress.IsEmpty())
    {
    int value = _tcstoul(m_editAddress, 016);
    value
    ++;
    m_editAddress.Format(
    %X, value);
    }
    }
    else if(pNMUpDown->iDelta < 0
    {
    if(!m_editAddress.IsEmpty())
    {
    int value = _tcstoul(m_editAddress, 016);
    value
    --;
    m_editAddress.Format(
    %X, value);
    }
    }

    UpdateData(FALSE);
    //用控件变量的值更新控件
    pResult = 0;
    }


     



     


    补充小常识:UpdateData()
    对于可以接管数据的控件,如编辑控件来说,UpdateData()函数至关首要。当控件内容产生变更时,对应的控件变量的值并没有跟着变更,同样,当控件变量值变更时,控件内容也不会跟着变。
    UpdateData()函数就是解决这个题目的。
    UpdateData(true); 把控件内容装入控件变量
    UpdateData(false); 用控件变量的值更新控件


    最后补一张成果靓照


    容易发怒的意思就是: 别人做了蠢事, 然后我们代替他们, 表现出笨蛋的样子。—— 蔡康永
    分享到: