none
如何用MFC的控件实现一个价格输入框? RRS feed

  • 问题

  • 各位好,

    要做一个价格输入框,有如下需求:

    * 输入框只能输入价格:价格可以有小数,也可以没有。因此要能够设置小数位数。可以有价格的逗号。

    * 输入框要求有一个Spin旋钮,使得价格可以上下跳变。跳变的值,可以是整数,也可以是小数,比如0.2、0.5等。

    * 可以设定价格的取值范围,比如[1000, 1200]

    这个应该用什么控件实现?现在用的是CEdit、旁边加CSpinButtonCtrl。但是设置输入为浮点数、设置小数位等,跳变的步进,都不知道改怎么做。

    我用CSpinButtonCtrl关联了一个CEdit,现在点击Spin的上、下旋钮,CEdit会上、下变动1,但是值变动完了以后,会把CEdit里面的值全部选中反色,很不美观,如何去掉选中CEdit中数值的行为?

    望告知,多谢


    2016年10月23日 11:59

答案

  • 这个应该用什么控件实现?现在用的是CEdit、旁边加CSpinButtonCtrl。但是设置输入为浮点数、设置小数位等,跳变的步进,都不知道改怎么做。
    -------------------------------------
    这个需要自己去相应SpinButton点击的事件的同时去设置Edit编辑框的值。如响应WM_VSCROLL消息处理SpinButton点击,然后利用CString::Format()格式化你的数据,然后SetDlgItemText()设置编辑框值。

    我用CSpinButtonCtrl关联了一个CEdit,现在点击Spin的上、下旋钮,CEdit会上、下变动1,但是值变动完了以后,会把CEdit里面的值全部选中反色,很不美观,如何去掉选中CEdit中数值的行为?
    ----------------------------------------------------------------------------------------
    这个你可以在设置完成以后,将插入符设置到到最后,CEdit::SetSel(-1, -1); CEdit::ReplaceStr(TEXT(""));

    Visual C++ enthusiast, like network programming and driver development. At present is being engaged in the WinCE/Windows Mobile platform embedded development.

    • 已建议为答案 Baron Bi 2016年10月25日 6:35
    • 已标记为答案 BruceLiu_sh 2016年10月25日 10:49
    2016年10月25日 2:35
    版主
  • Hi BruceLiu_sh,

    感谢在MSDN论坛发帖。

    对于你的需求,你可以参考使用以下CSpinButtonCtrl的成员函数。

    CSpinButtonCtrl::SetRange: 设置旋钮的区间范围。

    CSpinButtonCtrl::SetAccel:设置旋钮加速度。

    这里有篇文章,关于如何使用CSpinButtonCtrl, 你可以参考一下。

    https://msdn.microsoft.com/en-us/library/c8z1ck76.aspx

    >>这个应该用什么控件实现?现在用的是CEdit、旁边加CSpinButtonCtrl。但是设置输入为浮点数、设置小数位等,跳变的步进,都不知道改怎么做。

    我用CSpinButtonCtrl关联了一个CEdit,现在点击Spin的上、下旋钮,CEdit会上、下变动1,但是值变动完了以后,会把CEdit里面的值全部选中反色,很不美观,如何去掉选中CEdit中数值的行为?

    建议参考VisualEleven的回复。

    希望对你有所帮助。

    Best Regards,
    Sera Yu


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    • 已标记为答案 BruceLiu_sh 2016年10月25日 10:49
    2016年10月25日 6:38

全部回复

  • 这个应该用什么控件实现?现在用的是CEdit、旁边加CSpinButtonCtrl。但是设置输入为浮点数、设置小数位等,跳变的步进,都不知道改怎么做。
    -------------------------------------
    这个需要自己去相应SpinButton点击的事件的同时去设置Edit编辑框的值。如响应WM_VSCROLL消息处理SpinButton点击,然后利用CString::Format()格式化你的数据,然后SetDlgItemText()设置编辑框值。

    我用CSpinButtonCtrl关联了一个CEdit,现在点击Spin的上、下旋钮,CEdit会上、下变动1,但是值变动完了以后,会把CEdit里面的值全部选中反色,很不美观,如何去掉选中CEdit中数值的行为?
    ----------------------------------------------------------------------------------------
    这个你可以在设置完成以后,将插入符设置到到最后,CEdit::SetSel(-1, -1); CEdit::ReplaceStr(TEXT(""));

    Visual C++ enthusiast, like network programming and driver development. At present is being engaged in the WinCE/Windows Mobile platform embedded development.

    • 已建议为答案 Baron Bi 2016年10月25日 6:35
    • 已标记为答案 BruceLiu_sh 2016年10月25日 10:49
    2016年10月25日 2:35
    版主
  • Hi BruceLiu_sh,

    感谢在MSDN论坛发帖。

    对于你的需求,你可以参考使用以下CSpinButtonCtrl的成员函数。

    CSpinButtonCtrl::SetRange: 设置旋钮的区间范围。

    CSpinButtonCtrl::SetAccel:设置旋钮加速度。

    这里有篇文章,关于如何使用CSpinButtonCtrl, 你可以参考一下。

    https://msdn.microsoft.com/en-us/library/c8z1ck76.aspx

    >>这个应该用什么控件实现?现在用的是CEdit、旁边加CSpinButtonCtrl。但是设置输入为浮点数、设置小数位等,跳变的步进,都不知道改怎么做。

    我用CSpinButtonCtrl关联了一个CEdit,现在点击Spin的上、下旋钮,CEdit会上、下变动1,但是值变动完了以后,会把CEdit里面的值全部选中反色,很不美观,如何去掉选中CEdit中数值的行为?

    建议参考VisualEleven的回复。

    希望对你有所帮助。

    Best Regards,
    Sera Yu


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    • 已标记为答案 BruceLiu_sh 2016年10月25日 10:49
    2016年10月25日 6:38
  • 多谢回复,应该可以的。
    2016年10月25日 10:47
  • 在我的应用中,需要这样使用的CEdit关联CSpinButtonCtrl有很多组。如何将改功能是现成一个控件,方便使用?
    2016年11月7日 3:36