[英]How can I create a Spin Button Control dynamically in MFC using CSpinButtonCtrl class?
我意识到这是一个小问题,我什至看了一本MFC书(Prosise的《使用MFC编程Windows》)。 但是,我找不到真正的解决方案。
我正在尝试动态创建旋转按钮控件,这是一个简化的代码:
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的值。 我想念什么吗? 如何动态创建旋转按钮控件?
您的旋转控件缺少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 ++ 。 这就是我实际上得出这个答案的方式。 使用资源编辑器,我只是将一个编辑控件和一个上下控件放到了对话框上,并使用Spy ++来观察默认的窗口样式。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.