Я понимаю, что это тривиальная проблема, и я даже посмотрел книгу MFC (Программирование Windows с помощью MFC от Prosise). Тем не менее, я не мог найти решение.
Я пытаюсь создать элемент управления Spin Button динамически, и вот упрощенный код:
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 Button Control?
В вашем управлении вращением отсутствует стиль 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 ++ для наблюдения стилей окон по умолчанию.
Других решений пока нет …