Нужно создать на статус-баре ActiveX-прогресс-бар. Статус-бар представляет собой COM-объект, имеющий метод:
STDMETHODIMP CVSStatusBar::CreateControl(/*BSTR ClassId,*/ LONG Id)
{
HRESULT hr;
CLSID ClsId;
try
{
BSTR bs;
bs = SysAllocString(L"{35053A22-8589-11D1-B16A-00C0F0283628}");//progressbar
hr = CLSIDFromString(bs, &ClsId);
if (FAILED(hr))
{
AtlThrow(hr);
}
RECT r;
m_UiStatusBar.GetItemRect(1, &r);
// m_UiStatusBar – это атрибут CVSStatusBar: CUIStatusBar m_UiStatusBar,
// где CUIStatusBar наследник CBCGPStatusBar
if (!m_UiStatusBar.m_AxControl.CreateControl(
ClsId,
NULL,
WS_CHILD|WS_VISIBLE,
r,
&m_UiStatusBar,
Id))
{
AtlThrow(E_INVALIDARG);
}
hr = S_OK;
}
catch(CException* pExc)
{
hr = ResultFromScode(COleException::Process(pExc));
pExc->Delete();
}
catch(...)
{
hr = E_FAIL;
}
return hr;
}
Проблема: прогресс-бар располагается по всему статус-бару, а не на второй панели (несмотря на то, что задаю координаты прямоугольника второй панели)
Что не так делаю?
Родной контрол Windows использовать не могу, потому как стоит задача разработки GUI, представляющего собой набор COM-объектов (меню, тулбар, статусбар, docking control bar — все это должны быть COM-объекты — на них потом должны быть размещены ACtiveX)
Использовать GetRect также не могу, потому что наследую не от CStatusBarCtrl.
Результат вызова m_UiStatusBar.GetRect(1, &r) — дает верные координаты прямоугольника