ActiveX на StatusBar
От: A4MV Россия  
Дата: 01.06.05 09:58
Оценка:
Нужно создать на статус-баре 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;
}

Проблема: прогресс-бар располагается по всему статус-бару, а не на второй панели (несмотря на то, что задаю координаты прямоугольника второй панели)
Что не так делаю?
Re: ActiveX на StatusBar
От: algol Россия about:blank
Дата: 01.06.05 10:17
Оценка:
Здравствуйте, A4MV, Вы писали:

AMV>Нужно создать на статус-баре ActiveX-прогресс-бар. Статус-бар представляет собой COM-объект, имеющий метод:


AMV> m_UiStatusBar.GetItemRect(1, &r);


AMV>Проблема: прогресс-бар располагается по всему статус-бару, а не на второй панели (несмотря на то, что задаю координаты прямоугольника второй панели)


На первый взгляд, нужно вместо CStatusBar.GetItemRect (который получает прямоугольник индикатора) использовать CStatusBarCtrl.GetRect (который получает прямоугольник панели).
А вообще, задача выглядит очень странной. Почему бы не использовать родной Windows контрол вместо ActiveX?
Re[2]: ActiveX на StatusBar
От: A4MV Россия  
Дата: 01.06.05 10:44
Оценка:
Родной контрол Windows использовать не могу, потому как стоит задача разработки GUI, представляющего собой набор COM-объектов (меню, тулбар, статусбар, docking control bar — все это должны быть COM-объекты — на них потом должны быть размещены ACtiveX)

Использовать GetRect также не могу, потому что наследую не от CStatusBarCtrl.
Результат вызова m_UiStatusBar.GetRect(1, &r) — дает верные координаты прямоугольника
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.