视窗 10 :笔(手写笔)在 MFC 应用程序上不起作用
Windows 10 : Pen (stylus) not working on MFC application
我有一个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
}
}
通过添加它,您可以避免明确的管理,这根本不是微不足道的......
希望这对那些和我情况相同的人有所帮助
- 在 1 个服务器 n 客户端套接字 C++ MFC 应用程序中更新数据的客户端
- 如何在 MFC 应用程序中启动 ZeroMQ 线程?
- 视窗 10 :笔(手写笔)在 MFC 应用程序上不起作用
- 从 MFC C++ 6.0 应用程序迁移到 VS 2005
- C++ - 从 MFC 应用程序启动记事本,并将其默认标题从 "Untitled - Notepad" 更改为其他内容
- 由于选项卡顺序的原因,鼠标光标总是得到错误的hwnd-MFC应用程序
- 在网格视图中显示数据 - 基于 MFC c++ 对话框的应用程序
- MFC功能区主页按钮双击关闭应用程序
- 使用参数 + stdout + stderr 从命令行调用 MFC 应用程序
- 在 MFC 应用程序中实现 IServiceProvider
- 如何在MFC对话框应用程序中默认将复选框设置为选中?
- 基于 MFC 对话框的应用程序无法调用对话框两次
- MFC C++与非 MFC 控制台应用链接的静态库
- 将数组/对象/结构列表从C#库中传递给C MFC应用程序
- 在 MFC 应用中模拟应用内的键盘输入C++
- 无论如何,是否可以确定MFC应用程序是通过PC重新启动或用户单击应用程序快捷方式开始的
- 如何在MFC多字节应用程序中显示西里尔文本?
- 如何仅从另一个 MFC 应用程序打开 MFC 应用程序
- 如何将子窗口(MFC 应用程序)的工作区保存到图像
- 创建不会阻止主应用 MFC 的对话框