Проблемы с отрисовкой
От: intrex  
Дата: 08.12.01 08:31
Оценка:
Hi All!

Помогите разобраться, pls :(

Необходимо создать ActiveX control с возможностью прокрутки содержимого.
То есть если размер картинки больше клиенской области контрола,
то должна быть возможность зацепить картинку мышкой и прокручивать ee
(примерно как в ACDSee). При этом хочется устанавливать свой курсор во
время прокрутки.

ПРОБЛЕМА: Когда контрол имеет достаточно большой размер, прокрутка картинки сильно притормаживает.
Однако, если не устанавлить свой курсор (в строке Label_1), все нормально, ничего не тормозит.
Более того, не тормозит и тогда, если устанавливать не свой курсор а системный
/* например SetCursor(LoadCursor(NULL, IDC_SIZEALL)); тоже не тормозит. */
Совсем странно...

Я поступал так:

Создаем ATL Lite control и реализуем методы:

LRESULT OnLButtonDown(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
m_PrevMousePos = MAKEPOINTS(lParam);
m_spInPlaceSite->SetCapture(TRUE);
SetCursor(LoadCursor(_Module.m_hInstResource, IDC_CURSOR)); // Label 1: Set custom cursor
return 0;
}

LRESULT OnLButtonUP(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
SetCursor(LoadCursor(NULL, IDC_ARROW));
m_spInPlaceSite->SetCapture(FALSE);
return 0;
}

LRESULT OnMouseMove(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
if (m_spInPlaceSite->GetCapture() == S_OK)
{
POINTS MousePos = MAKEPOINTS(lParam);
m_ViewOrg.x += (MousePos.x — m_PrevMousePos.x);
m_ViewOrg.y += (MousePos.y — m_PrevMousePos.y);

m_PrevMousePos = MousePos;
FireViewChange();
}
return 0;
}

HRESULT OnDrawAdvanced(ATL_DRAWINFO& di)
{
RECT rc = *(RECT*)di.prcBounds;

OffsetRect(&rc, m_ViewOrg.x, m_ViewOrg.y);
Rectangle(di.hdcDraw, rc.left, rc.top, rc.right, rc.bottom);

return S_OK;
}


Подскажите плз, где копать ?

Best regards
Dns
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.