Странное поведение CSpinButtonCtrl (повтор)
От: BorisM  
Дата: 21.12.04 13:05
Оценка:
Добрый день!
(Что-то не получилось у меня первый раз отправить сообщение)
Изучая MFC, столкнулся со странным поведением Spina (VS 2003).
К примеру, есть простое приложение на основе диалога. На форме диалога два контрола: Edit и Spin.

Объявление переменных:
class CSpinDlg : public CDialog
{
...
public:
    CSpinButtonCtrl m_Spin;
    int m_Edit;
    afx_msg void OnDeltaposSpin1(NMHDR *pNMHDR, LRESULT *pResult);
};


Инициализация:
BOOL CSpinDlg::OnInitDialog()
{
    // TODO: Add extra initialization here
    m_Spin.SetBuddy((CEdit*)GetDlgItem(IDC_EDIT1));
    m_Spin.SetRange32(1,50);
    m_Spin.SetPos32(1);
    m_Edit = m_Spin.GetPos32();
    
    return TRUE;  // return TRUE  unless you set the focus to a control
}


Обработчик UDN_DELTAPOS:
void CSpinDlg::OnDeltaposSpin1(NMHDR *pNMHDR, LRESULT *pResult)
{
    LPNMUPDOWN pNMUpDown = reinterpret_cast<LPNMUPDOWN>(pNMHDR);
    // TODO: Add your control notification handler code here
    m_Edit = m_Spin.GetPos32();
    UpdateData(FALSE);
    *pResult = 0;
}


При первом щелчке по Spin-у для увеличения значения, ничего не происходит. При последующих щелчках, происходит увеличение значения на 1, т.е. то, что нужно. Если же теперь начать уменьшать значение, то сначала, оно увеличится на 1, и только потом начнет уменьшаться.

Почему он так себя ведет? Как с этим бороться? Неужели, прийдется извращаться в обработчике?

Заранее спасибо.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.