如何使用 CSpinButtonCtrl 类在 MFC 中动态创建微调按钮控件?
Posted
技术标签:
【中文标题】如何使用 CSpinButtonCtrl 类在 MFC 中动态创建微调按钮控件?【英文标题】:How can I create a Spin Button Control dynamically in MFC using CSpinButtonCtrl class? 【发布时间】:2017-09-26 15:35:25 【问题描述】:我意识到这是一个微不足道的问题,我什至看了一本 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 的值。我错过了什么吗?如何动态创建微调按钮控件?
【问题讨论】:
【参考方案1】:您的旋转控件缺少样式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++ 观察默认窗口样式。
【讨论】:
以上是关于如何使用 CSpinButtonCtrl 类在 MFC 中动态创建微调按钮控件?的主要内容,如果未能解决你的问题,请参考以下文章