чтобы было нагляднее, приведу свой текущий код:
void CChildView::ChangeSBFix(CScrollBar* pScrollBar, bool lineIsFixed)
{
BOOL result = 0;
if (lineIsFixed)
{
result = pScrollBar->EnableScrollBar(ESB_DISABLE_BOTH);
DWORD dw = GetLastError();
}
else
{
result = pScrollBar->EnableScrollBar(ESB_ENABLE_BOTH);
DWORD dw = GetLastError();
}
}
вызывается отсюда:
void CChildView::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
// нажатие на f1
// по нажатию на F1 блокируем горизонтальную линейку
if (nChar == VK_F1)
{
m_hLineIsFixed = !m_hLineIsFixed;
ChangeSBFix(&m_vertScrollBar, m_hLineIsFixed);
}
// нажатие на f2
if (nChar == VK_F2)
{
m_vLineIsFixed = !m_vLineIsFixed;
ChangeSBFix(&m_horzScrollBar, m_vLineIsFixed);
}
CWnd::OnKeyDown(nChar, nRepCnt, nFlags);
}
начинаю отладку. нажимаю F1 в первый раз. заходит в
if (lineIsFixed)
{
result = pScrollBar->EnableScrollBar(ESB_DISABLE_BOTH);
DWORD dw = GetLastError();
}
результат выполнения: result = 8, dw = 0;
нажимаю F1 еще раз
заходит в
else
{
result = pScrollBar->EnableScrollBar(ESB_ENABLE_BOTH);
DWORD dw = GetLastError();
}
результат выполнения: result = 0, dw = 0;
то есть формально линейки УЖЕ выставлены или ошибка, так? ("If the arrows are already in the requested state or an error occurs, the return value is zero. To get extended error information, call GetLastError.")
но GetLastError() возвращает 0.
Слегка модифицировал, чтобы выводился текст ошибки (если есть)
пишет "Операция успешно завершена" на каждой итерации. а линейки блокируются, и потом не разблокируются