我有一个MFC应用程序,可以在Windows 7下与Pen(Stylus(一起使用,但不幸的是,它不适用于Windows 10。
- 在Windows 7下,我可以使用手写笔垂直滚动而无需使用(单击和拖动(滚动条,我可以通过单击并从对话框中的任意位置拖动来垂直滚动(表单视图(
- 在Windows 10下,如果不使用(单击并拖动(滚动条,我无法使用手写笔垂直滚动。我必须单击(并拖动(滚动条上的手写笔才能垂直滚动
我的需要:
我需要能够使用手写笔垂直滚动,而无需使用(单击和拖动(Windows 10 上的滚动条
详细信息:
我使用的是带有Visual Studio 2010的Windows 10。
我的意见
我认为MFC100的版本.dll(与我的Visual Studio 2010有关(可能不支持Windows 10下的手写笔功能,因为代码在Windows 7下可以正常工作
有人已经遇到过这个问题吗? 谢谢。
我发布这个答案是为了帮助与我情况相同的人。
1. 简介
可以使用(这可能不是存在的唯一方法(来完成与滚动条的交互:
- SetScrollPos与ScrollWindow相结合。第一个滚动裸滚动,第二个滚动窗口的内容
- ScrollToPosition,可滚动裸露的滚动和窗口的内容
第一种方法(SetScrollPos与ScrollWindow相结合(需要管理所有滚动条信息:可滚动大小,当前位置,...并在每个OnSize((上重新计算它(这不是太微不足道...
使用 seconde 方法(ScrollToPosition(模式,我们所要做的就是调用具有所需滚动大小的ScrollToPosition
。我们不必管理裸露滚动的细节,Windows 为我们做到了!
由于我不知道的某种原因,Windows 10
上的stylus
滚动功能在Windows 7
上没有相同的行为:滚动条滚动但不滚动窗口的内容!!
2. 解决方案
在这个问题上花了几个小时,我得出结论,解决此问题的简单解决方案是尽可能多地使用 ScrollToPosition 函数。在这种情况下,您只需要计算滚动大小(delta
(,其定义如下:
- 按下鼠标按钮时启动(斯图利斯指向((使用ON_WM_LBUTTONDOWN(
- 拖动期间延长/减少(使用ON_WM_MOUSEMOVE(
- 松开按钮时结束(使用 ON_WM_LBUTTONUP(
您所要做的就是使用计算delta
调用ScrollToPosition
函数。这将允许您从极其复杂的管理模式移动到如下所示的一些内容:
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
}
}
通过添加它,您可以避免明确的管理,这根本不是微不足道的......
希望这对那些和我情况相同的人有所帮助