如何在MFC中使用CSpinButtonCtrl类动态创建Spin按钮控件?

问题描述:

我意识到这是一个微不足道的问题,我甚至看了一本MFC书(由Prosise编写的Windows with MFC)。但是,我找不到解决方案。如何在MFC中使用CSpinButtonCtrl类动态创建Spin按钮控件?

我想动态创建一个旋转按钮控制,这里是一个简化的代码:

CEdit* m_editControl = new CEdit(); 
    m_EditControl->Create(WS_VISIBLE | WS_CHILD , rectEdit, this, EditID); 

    CSpinButtonCtrl* m_spinControlCtrl = new CSpinButtonCtrl; 
    m_spinControlCtrl->Create(WS_VISIBLE | WS_CHILD, rectSpinButton, this, SpinID); 

    m_spinControlCtrl->SetBase(10); 
    m_spinControlCtrl->SetBuddy(m_editControl); 
    m_spinControlCtrl->SetRange(-55, 55); 

我的问题是,旋转按钮不会改变的CEdit的价值。我错过了什么吗?我怎样才能动态地创建一个Spin按钮控件?

你的旋转控制缺少风格UDS_SETBUDDYINT

UDS_SETBUDDYINT导致上下控制设置 伙伴窗口的文本(使用WM_SETTEXT消息)的位置变化时。 文本由位置格式化为十进制或 十六进制字符串组成。

我还建议设置UDS_ARROWKEYS,这样当焦点位于编辑控件上时,可以使用箭头键来递增或递减数值。

对于编辑控件我想补充WS_TABSTOP,使用户可以使用TAB 关键WS_EX_CLIENTEDGE导航这样的编辑控件显示的常规主题边界。

我还注意到,您使用动态内存分配的控件,这是没有必要的。只需创建像CEdit m_EditControl;这样的非指针成员变量,这样就不必担心释放。

固定码:

m_EditControl.CreateEx(WS_EX_CLIENTEDGE, L"Edit", L"0", WS_VISIBLE|WS_CHILD|WS_TABSTOP, 
         rectEdit, this, EditID); 

m_spinControlCtrl.Create(WS_VISIBLE|WS_CHILD|UDS_SETBUDDYINT|UDS_ARROWKEYS, 
         rectSpinButton, this, SpinID); 

m_spinControlCtrl.SetBase(10); 
m_spinControlCtrl.SetBuddy(&m_EditControl); 
m_spinControlCtrl.SetRange(-55, 55); 

我还强烈建议学习使用间谍++。这就是我实际得到这个答案的方式。使用资源编辑器,我将一个编辑控件和一个上下控件放到对话框中,并使用Spy ++观察默认窗口样式。