Этот «ответ» не имеет прямого отношения к исходному вопросу, но я наткнулся на эту страницу, пытаясь найти решение для очень похожей проблемы.
Всякий раз, когда я перемещал сплиттер, он всегда возвращался в исходное положение. Оказывается, что флаги режима DESKBANDINFO
не особенно хорошо названы для вертикальных боковых панелей. Я использовал DBIMF_NORMAL
, когда я должен был использовать DBIMF_VARIABLEHEIGHT
.
Пример кода:
STDMETHODIMP CMyExplorerBar::GetBandInfo(DWORD dwBandID,
DWORD dwViewMode,
DESKBANDINFO* pdbi)
{
if(pdbi)
{
m_dwBandID = dwBandID;
m_dwViewMode = dwViewMode;
if(pdbi->dwMask & DBIM_MINSIZE)
{
pdbi->ptMinSize.x = 30;
pdbi->ptMinSize.y = 30;
}
if(pdbi->dwMask & DBIM_MAXSIZE)
{
pdbi->ptMaxSize.x = -1;
pdbi->ptMaxSize.y = -1;
}
if(pdbi->dwMask & DBIM_INTEGRAL)
{
pdbi->ptIntegral.x = 1;
pdbi->ptIntegral.y = 1;
}
if(pdbi->dwMask & DBIM_ACTUAL)
{
pdbi->ptActual.x = 500;
pdbi->ptActual.y = 0;
}
if(pdbi->dwMask & DBIM_TITLE)
{
StringCchCopy(pdbi->wszTitle, 256, L"My Sidebar");
}
if(pdbi->dwMask & DBIM_MODEFLAGS)
{
pdbi->dwModeFlags = DBIMF_VARIABLEHEIGHT;
}
if(pdbi->dwMask & DBIM_BKCOLOR)
{
pdbi->dwMask &= ~DBIM_BKCOLOR;
}
return S_OK;
}
return E_INVALIDARG;
}