CSpinButtonCtrl控件的使用

CSpinButtonCtrl控件的使用

分类: MFC2012-02-04 14:06 841人阅读 评论(3) 收藏 举报

buttonusermfcpairwindowsless

一个“旋转按钮控件”(也称为上下控件)是一对箭头按钮,用户点击它们来增加或减小一个值,比如一个滚动位置或显示在相应控件中的一个数字。与一个旋转按钮控件相联系的值被称为它的当前位置。一个旋转控件通常是与一个相伴的控件一起使用的,称为“伙伴窗口”。

先创建一个编辑窗口,在创建一个上下控件,把编辑窗口设置为上下控件的伙伴窗口,但是疑问就出来了,设置为伙伴窗口有什么用,其中的上下控件的创建时候的属性

UDS_SETBUDDYINT当位置改变时,使控件设置伙伴窗口的文本(使用WM_SETTEXT消息),文本本是按十进制或十六进制格式化后的位置值。

这个属性又是有什么作用的?我很迷惑==========================

第一

The spin button control (also called an up-down control) provides a pair of arrows that the user can click to adjust a value. This value is called the current position. The position stays within the range of the spin button. When the user clicks the up arrow, the position moves toward the maximum; and when the user clicks the down arrow, the position moves toward the minimum.

The spin button control is represented in MFC by class CSpinButtonCtrl.

Note:

The default range for the spin button has the maximum set to zero (0) and the minimum set to 100. Since the maximum value is less than the minimum value, clicking the up arrow will decrease the position and clicking the down arrow will increase it. Use CSpinButtonCtrl::SetRange to adjust these values.

Typically, the current position is displayed in a companion control. The companion control is called the "buddy window." For an illustration of a spin button control, see About Up-Down Controls in the Windows SDK.

What do you

种做法是将编辑框关联一个变量

DDX_Text(pDX,1016,m_spinint);

[cpp] view plaincopyprint?

  1. <span style="color:#333333;">   //创建一个编辑控件,作为上下按钮控件的伙伴窗口
  2. m_edit.Create(WS_CHILD|WS_VISIBLE,CRect(60,190,120,210),this,1016);
  3. m_spin.Create(UDS_WRAP|WS_CHILD|WS_VISIBLE|UDS_ALIGNRIGHT|UDS_ARROWKEYS,CRect(120,190,130,210),this,1017);</span><span style="color:#ff0000;">
  4. </span>

CDialog::OnInitDialog();

说明:

默认的范围是0-100,可以通过调用SetRange函数来改变
构造一个CSpinButtonCtrl对象要分两步。首先调用构造函数,然后调用Create,该函数创建旋转按钮控件并将它与CSpinButtonCtrl对象连接。
可以指定下面的风格给旋转按钮控件:

· UDS_HORZ 控件的箭头指向左和右,而不是指向上和下。
· UDS_WRAP 如果控件的增加或减小超过了结尾或开始,使控件可以“环绕”。
· UDS_ARROWKEYS 当按下向上和向下键时,使控件可以增加或减小。
· UDS_SETBUDDYINT 当位置改变时,使控件设置伙伴窗口的文本(使用WM_SETTEXT消息)。文本是按十进制或十六进制格式化后的位置值。
· UDS_NOTHOUSANDS 不要在每隔三个十进制数字的地方加千分隔符。
· UDS_AUTOBUDDY 自动选择一个Z-order中的前一个窗口作为控件的伙伴窗口。
· UDS_ALIGNRIGHT 将旋转按钮窗口定位在伙伴窗口的右边。伙伴窗口的宽度被减小来适应此控件的宽度。
· UDS_ALIGNLEFT 将旋转按钮窗口定位在伙伴窗口的右边。伙伴窗口被移动到右边,并且它的宽度被减小来适应此控件的宽度。 

然后当控件按下箭头的时候,会发送UDN_DELETEPOS,添加该消息的响应函数

会在消息映射添加 ON_NOTIFY(UDN_DELTAPOS, 1017, &C控件学习Dlg::OnDeltaposSpin2)

1017为上下按钮的ID,第三个参数为消息响应函数

[cpp] view plaincopyprint?

  1. void C控件学习Dlg::OnDeltaposSpin2(NMHDR *pNMHDR, LRESULT *pResult)
  2. {
  3. LPNMUPDOWN pNMUpDown = reinterpret_cast<LPNMUPDOWN>(pNMHDR);
  4. // TODO: 在此添加控件通知处理程序代码
  5. *pResult = 0;
  6. if(pNMUpDown->iDelta>0)
  7. {
  8. pNMUpDown->iPos--;
  9. }
  10. if(pNMUpDown->iDelta<0)
  11. {
  12. pNMUpDown->iPos++;
  13. }
  14. m_spinint=pNMUpDown->iPos;
  15. UpdateData(false);
  16. //SetDlgItemInt(1016,pNMUpDown->iPos,true);
  17. }

通过第一个参数指针转换wieldLPNMUPDOWN型的指针,可以该结构体有三个参数,第一个参数是信息,第二参数是iPos表示滚动条的位置,即是当前的值

第三个参数是iDelta,大于0,表示按了享受按钮,小于0按了向下按钮,

点击向上箭头使当前位置向最大值方向移动,而点击向下箭头使当前位置向最小值的方向移动。缺省的,最小值是100,最大值是0。任何时候,最小值的设置都大于最大值(例如,当使用缺省值时),点击向上箭头减少位置值,而点击向下箭头则增加它。
如果是关联变量的方法显示值的话,那么需要调用UpdateData()函数

还有一种响应方式是响应WM_VSCROLL

这种方式没有试过,贴下网上代码

[cpp] view plaincopyprint?

  1. void   CSyssetDlg::OnVScroll(UINT   nSBCode,   UINT   nPos,   CScrollBar*   pScrollBar)
  2. {
  3. switch(   pScrollBar->GetDlgCtrlID())
  4. {
  5. case   IDC_AMAL_SPIN:
  6. {
  7. float   nStep=0.1;
  8. CString   str;
  9. str.Format("%f",nPos*nStep);
  10. m_AMalEdit.SetWindowText(   str   );
  11. }
  12. break;
  13. }
  14. }

摄者它的值可以通过两种方式来改变SetDlgItemText,或者关联变量

效果图:

时间: 2024-10-11 02:34:20

CSpinButtonCtrl控件的使用的相关文章

CSpinButtonCtrl数字调节控件

CSpinButtonCtrl常用属性 CSpinButtonCtrl类常用成员函数 CSpinButtonCtrl代码示例   一.CSpinButtonCtrl控件属性 1.添加EDIT控件 2.添加Spin控件    如果不是这样的顺序的话,使用ctrl+D改变Tab顺序,使spin紧靠edit后面 3.在EDIT控件上面设置group属性(特别注意) 4.设置Spin属性 Auto Buddy 为     //为 true 表示按Z序自动关联一个伙伴窗口 Set Buddy Intege

旋转按钮、进度条、滑块控件的使用

1.旋转按钮 -对应控件类是CSpinButtonCtrl 2.进度条 -对应控件类是CProgressCtrl 3.滑块 -对应控件类是CSliderCtrl 控件的使用步骤: 1--设置控件表示的数值范围 SetRange/GetRange 2--设置控件的增量/步长 CSpinButtonCtrl::SetAccel CProgressCtrl::SetStep CSliderCtrl::SetPageSize CSliderCtrl::SetLineSize 3--设置/获取当前数值 S

MFC控件编程:旋转按钮、进度条和滑块控件

旋转按钮(微调按钮) : 对应的控件类是CSpinButtonCtrl 进度条:对应的控件类是CProgressCtrl 滑块:对应的控件类是CSliderCtrl 对这三个控件的操作都是同过与之相关联的控件类完成的,并且这三个控件有极大的相似性,故这里放到一起 先认识下: Spin:            Progress:             Slider: 常用函数: SetRange()/GetRange(); // 设置.获取控件表示的范围 /* 设置控件的增量(步长) */ CS

MFC动态创建控件及添加消息响应

MFC动态创建控件及添加消息响应 分类: 控件技术2013-01-24 14:12 7020人阅读 评论(0) 收藏 举报 转载地址:http://blog.csdn.net/luy3728000/article/details/8193918 动态控件是指在需要时由Create()创建的控件,这与预先在对话框中放置的控件是不同的. 一.创建动态控件: 为了对照,我们先来看一下静态控件的创建. 放置静态控件时必须先建立一个容器,一般是对话框,这时我们在对话框编辑窗口中,从工具窗口中拖出所需控件放

MFC动态创建控件(按钮)及添加消息响应

动态控件是指在需要时由Create()创建的控件,这与预先在对话框中放置的控件是不同的. 一.创建动态控件: 为了对照,我们先来看一下静态控件的创建. 放置静态控件时必须先建立一个容器,一般是对话框,这时我们在对话框编辑窗口中,从工具窗口中拖出所需控件放在对话框中即可,再适当修改控件ID,设置控件属性,一个静态控件就创建好了,当对话框被显示时,其上的控件也会显示. 静态控件不需要调用Create()函数来创建. 而创建动态控件有很大不同,以下以按钮为例,看一下动态控件的创建过程: 1.建立控件I

C++MFC编程笔记day09 MF界面控件的使用1

一 MFC控件 1 控件介绍 1.1 静态控件包括图片.静态文本和分组框.生成的控件的ID统一是 IDC_STATIC.很少程序中访问和操作,只是使用静态控件显示信息 1.2 编辑框控件,控件类是CEdit,通常使用它接收用户的输入,显示 信息给用户. 1.3 按钮控件包括一般按钮.复选按钮和单元按钮,控件类都是CButton 单选按钮注意,同一组的按钮Tab键顺序的编号连续(Ctrl+d  显示tab顺序),而且编号小的 按钮设置group属性,才能在同一个对话框中,实现多个单选按钮的 多个分

旋转控件和高级编辑控件

一. 旋转控件 CSpinButtonCtrl (1)控件类型 UDS_ALIGNRIGHT/UDS_ALIGNLEFT 内嵌到绑定的控件左边和右边 UDS_SETBUDDYINT 点击控件发送WM_SETTEXT消息,改变CEdit控件的值 UDS_WRAP 在RANG返回循环增加和减少 UDS_ARROWKEYS UDS_NOTHOUSANDS UDS_AUTOBUDDY UDS_HORZ Spin控件水平放置,默认为垂直放置 (2)创建控件 CSpinButtonCtrl *pSpin =

MFC中动态添加控件----寻找多年的秘籍,吐血推荐

原文作者tianwaik 动态控件是指在需要时由Create()创建的控件,这与预先在对话框中放置的控件是不同的. 一.创建动态控件 为了对照,我们先来看一下静态控件的创建. 放置静态控件时必须先建立一个容器(一般是对话框),这时我们在对话框编辑窗口中,从工具窗口中拖出所需控件放在对话框中即可,再适当修改控件ID,设置控件属性,一个静态控件就创建好了,当对话框被显示时,其上的控件也会显示. 相比之下,静态控件不需要调用Create()函数来创建. 而创建动态控件有很大不同,以下以按钮为例,看一下

在DataGridView控件中实现冻结列分界线

我们在使用Office Excel的时候,有很多时候需要冻结行或者列.这时,Excel会在冻结的行列和非冻结的区域之间绘制上一条明显的黑线.如下图: (图1) WinForm下的DataGridView控件也能实现类似的冻结行或者列的功能(参见:http://msdn.microsoft.com/zh-cn/library/28e9w2e1(VS.85).aspx) ,但是呢,DataGridView控件默认不会在冻结列或者行的分界处绘制一个明显的分界线,这样的话,最终用户很难注意到当前有列或者