gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-31 01:31:03 25 4
gpt4 key购买 nike

我意识到这是一个微不足道的问题,我什至看了一本 MFC 书(Programming Windows with MFC by Prosise)。但是,我真的找不到解决方案。

我正在尝试动态创建一个旋转按钮控件,这里是一个简化的代码:

    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 Causes the up-down control to set the text of the buddy window (using the WM_SETTEXT message) when the position changes. The text consists of the position formatted as a decimal or hexadecimal string.

我还建议设置 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++ 观察默认窗口样式。

关于c++ - 如何使用 CSpinButtonCtrl 类在 MFC 中动态创建旋转按钮控件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46430588/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com