Windows 10: Перо (стилус) не работает в приложении MF C - PullRequest
1 голос
/ 26 мая 2020

У меня есть приложение MF C, которое отлично работает с Pen ( Stylus ) под Windows 7, но, к сожалению, оно не работает с Windows 10.

  • Под Windows 7 , я могу вертикально прокручивать стилусом БЕЗ использования ( щелчка и перетаскивания ) полосы прокрутки, я могу прокручивать вертикально, щелкая и перетаскивая из в любом месте моего диалогового окна (formview)
  • Под Windows 10 , я не могу вертикально прокручивать стилусом БЕЗ использования ( щелчка и перетаскивания ) прокрутки бар. Я должен щелкнуть (и перетащить) с помощью стилуса на полосу прокрутки для вертикальной прокрутки

Моя потребность:
Мне нужно иметь возможность вертикальной прокрутки с помощью стилуса БЕЗ используя (щелкая и перетаскивая) полосу прокрутки на Windows 10

Подробно:
Я на Windows 10 с Visual Studio 2010.

Мое мнение
Я думаю, что версия MFC100.dll (связанная с моей Visual Studio 2010), вероятно, не поддерживает функциональность стилуса под Windows 10, потому что код корректно работает под windows 7

Кто-нибудь уже сталкивался с этой проблемой? Спасибо.

1 Ответ

0 голосов
/ 08 июня 2020

Я отправляю этот ответ, чтобы помочь людям, которые находятся в той же ситуации, что и я.

1. Введение

Взаимодействие с полосой прокрутки может быть выполнено с помощью (вероятно, это не единственные существующие методы):

  • SetScrollPos в сочетании с Окно прокрутки . Первая прокручивает голую прокрутку, вторая прокручивает содержимое окна
  • ScrollToPosition , которое прокручивает как прокрутку, так и содержимое окна

Первый метод ( SetScrollPos в сочетании с ScrollWindow ) требует управления всей информацией полосы прокрутки: размер прокрутки, текущая позиция, ... и пересчитывать ее для каждого OnSize () (что не слишком тривиально ...)

В режиме второго метода ( ScrollToPosition ) все, что нам нужно сделать, это вызвать ScrollToPosition с желаемым размером прокрутки. Нам не нужно управлять деталями прокрутки, Windows делает это за нас!

По какой-то неизвестной мне причине функция прокрутки stylus на Windows 10 не работает. имеют такое же поведение на Windows 7: полоса прокрутки прокручивает , но не содержимое окна !!!

2. Решение

Потратив несколько часов на решение этой проблемы, я пришел к выводу, что простое решение для обхода этой проблемы - максимально возможное использование функции ScrollToPosition . И в этом случае вам просто нужно вычислить размер прокрутки (delta), который определяется следующим образом:

  • Начинается при нажатии кнопки мыши (указал Стулис) (используйте ON_WM_LBUTTONDOWN )
  • Расширен / уменьшен во время перетаскивания (используйте ON_WM_MOUSEMOVE )
  • Заканчивается при отпускании кнопки (используйте ON_WM_LBUTTONUP )

Все, что вам нужно сделать, это вызвать функцию ScrollToPosition с вычисленным delta. Это позволит вам перейти от чрезвычайно сложного режима управления к нескольким вещам, которые выглядят так:

ON_WM_LBUTTONDOWN

void CMyView::OnLButtonDown (UINT nFlags, CPoint point) 
{
    // Code here ...
    POINT p;
    GetCursorPos(&p);
    ScreenToClient ( &p); // Convert to screen coordinates

    m_dragPosition = p; // m_dragPosition : member variable to store click position
    m_bMouseDown = true; // Set Flag to true

    CWnd::OnLButtonDown (nFlags, point) ;
}  

ON_WM_LBUTTONUP

void CMyView::OnLButtonUp (UINT nFlags, CPoint point) 
{
    // Code here ...  
    m_bMouseDown = false;
    CWnd::OnLButtonUp(nFlags, point);
}

ON_WM_MOUSEMOVE

void CMyView::OnMouseMove(UINT nFlags, CPoint point) 
{
   int delta = p.y - m_dragPosition.y;

   // Use absolute value to take into account top/bottom scrolling
   if ( abs (delta) > SCROLLING_STEP_SIZE)
   {
       CPoint pp = GetScrollPosition (); // Get current scrollbar position
       pp.y += -delta;
       pp.x = 0;  // I'm intersting only for vertical scrolling
       ScrollToPosition (pp);   // Scroll to new position
       UpdateWindow (); // This redraw new showed area
       m_dragPosition = p; // Update drag position
   }
}  

Добавляя это, вы избегаете явного управления, которое совсем не тривиально ...
Надеюсь, это поможет тем кто в такой же ситуации как я

...