繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM