Re[4]: ActiveX и мышка
От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
Дата: 30.05.02 17:14
Оценка: 3 (1)
Здравствуйте DarkGray, Вы писали:

Ладно объясняю более подробно.

1. Создаем ATL-проект (ATL Com-AppWizard) с опцией (Dynamic Link Library), название ему дадим Prah
2. Добавляем новый класс (ClassView\Prah classes\ContextMenu\New Atl Object\Controls\Full control) с опциями
Name\ShortName = "Line" и Miscellaneous\Opaque = false

3. Открываем метод OnDraw для CLine и комментируем строчку Rectangle (...)
4. Компилириуемся, запускаем ActiveX Container, вставляем несколько раз Line Class и бурно радуемся нашему прозрачному контролу.

SetCapture ( в предыдущем письме я описался, SetCapture, конечно, из интерфейса IOleInPlaceSiteWindowless)

1. Всталяем в CLine два обработчика WM_LBUTTONDOWN и LBUTTONUP
2. Меняем тела OnDraw, OnLButtonDown, OnLButtonUp на следующее:
  POINT begin;
  POINT end;
HRESULT OnDraw(ATL_DRAWINFO& di)
{
    RECT& rc = *(RECT*)di.prcBounds;

    SetTextAlign(di.hdcDraw, TA_CENTER|TA_BASELINE);

    TCHAR  pszText[1024] = _T("");
    _stprintf (pszText, _T("%d, %d - %d,  %d"), begin.x, begin.y, end.x, end.y);


    TextOut(di.hdcDraw, 
      (rc.left + rc.right) / 2, 
      (rc.top + rc.bottom) / 2, 
      pszText, 
      lstrlen(pszText));

    return S_OK;
}

LRESULT OnLButtonDown(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
  //переменная m_spInPlaceSite - это указатель на контейнер
  //получаем у него интерфейс IOleInPlaceSiteWindowless
    CComQIPtr<IOleInPlaceSiteWindowless> site = m_spInPlaceSite;
  //ставим Capture
    site->SetCapture(TRUE);
  //получаем координаты мышки
    GetCursorPos (&begin);
 //перерисовываемся
    site->InvalidateRect (NULL, TRUE);
  return 0;
}
LRESULT OnLButtonUP(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
  //получаем у контейнера интерфейс IOleInPlaceSiteWindowless
    CComQIPtr<IOleInPlaceSiteWindowless> site = m_spInPlaceSite;
  //проверяем, что Capture была установлена
    if (site->GetCapture() == S_OK)
    {
  //получаем координаты мышки
      GetCursorPos (&end);
  //убираем Capture
      site->SetCapture(FALSE);
 //перерисовываемся
      site->InvalidateRect (NULL, TRUE);
    }
  return 0;
}

3. Компиляемся, наслаждаемся
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.