Добрый день!
(Что-то не получилось у меня первый раз отправить сообщение)
Изучая 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, и только потом начнет уменьшаться.
Почему он так себя ведет? Как с этим бороться? Неужели, прийдется извращаться в обработчике?
Заранее спасибо.