- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个从 CButton
子类化的自定义 Windows 控件(不知道为什么选择它——这是 17 年前的代码;没有类似的按钮功能)。
DrawItem( LPDRAWITEMSTRUCT pdis )
方法由 CButton::OnChildNotify
调用以响应 WM_DRAWITEM
。它使用 DC CDC::FromHandle( pdis->hDC )
渲染它的场景。
鼠标事件方法 OnMouseMove()
计算新的光标位置并调用 RedrawWindow( NULL, NULL, RDW_INVALIDATE )
。跟随鼠标的光标适时出现在新的鼠标位置。它工作正常,但速度很慢。事实上,只有以前的和新的光标单元需要重绘(如果那样的话),但随着整个场景多次渲染,图形更新开始滞后。
我想在我的 OnMouseMove()
方法中,可以只绘制有问题的单元格,而不是重新绘制整个场景。它已经具有单元格的确切 X 和 Y 坐标以及指向其数据的指针。我认为 CPaintDC(this)
会提供一个允许这样做的 DC
,但它不会绘制。 (也不崩溃,难得的开心。)
我模糊的记忆是,执行此操作的“最佳”方法是仅使两个单元格的区域无效,并且 DrawItem()
方法最终会被告知这些区域已无效,而不是完全重新绘制它可以只从坐标计算出它们是哪些单元格(顺便说一句,这不是一个简单的操作)并重新绘制它们,这不仅可以简化这个光标问题,而且还可以确保只绘制几个单元格是部分 -模糊控制部分显示。但是时间压力不允许,用例似乎也不需要对此进行优化。
所以问题是:OnMouseMove()
是否有一些很好的方法来立即重新呈现单个控件,如果有,用什么DC
? (例如,我可以缓存通过 FromHandle() 在
DrawItem()
中收到的 DC
吗?
现在我唯一的想法是让一个对象成员指向要重绘的单个单元格,用这个 RDW_UPDATENOW 标志调用 RedrawWindow(),并让 DrawItem(),如果该标志被设置,就这样做一项。这将导致 DrawItem() 获得一个 DC,该 DC 可能会像往常一样工作。不过,这似乎是一个真正的技巧,有没有更好的方法?
最佳答案
在 Windows 应用程序中,通常执行所有渲染以响应 WM_PAINT
(或 WM_NCPAINT
)消息。需要触发重绘的代码通过调用 InvalidateRect
将窗口的部分或全部客户区标记为脏(和 friend )。该系统针对这种方法进行了优化,将多个请求合并到一个更新区域中,并随后在没有更重要的工作要做(如处理输入)时发出 WM_PAINT
消息。
这工作可靠,并且通常比将渲染分布在多个地方更容易实现。然而,偏离这一点并在代码中的任何位置执行渲染是完全合法的。虽然 WM_PAINT
消息仍然可以随时到达,但最好让带外渲染产生与 WM_PAINT
处理程序相同的视觉结果,以防止视觉伪影.
所有渲染都经过一个称为 device context 的抽象(直流电)。在 MFC 应用程序中处理 WM_PAINT
消息时,可以通过构造 CPaintDC
来获得合适的 DC实例。在其他任何地方渲染时,您不能使用 CPaintDC
,但需要使用 CClientDC
相反(或 CWindowDC
,也渲染非客户区)。通常,渲染代码不需要知道它正在渲染到哪种类型的 DC,并且通常可以在不更改的情况下重复使用。
关于c++ - MFC GUI 自定义控件 : how to draw cursor updates in response to mouse moves?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55883399/
我想检测 Area2D 内的鼠标单击(并按住),然后检测 Area2D 内部或外部的鼠标释放。 这是我目前所拥有的: extends Area2D #PickArea func _input_even
鼠标上的以下按钮在哪里? 编辑: jack 回答后,我在括号中添加了位置。 mouse-1(向左按钮) mouse-2(单击车轮按钮/中间按钮) mouse-3(右键) mouse-4(振铃) mou
这是我的问题;我正在尝试显示“标记”,并在鼠标悬停/移出/单击上进行一些操作。 问题是,根本没有任何事件在over上触发,当在控制台中单击(向下)时,我收到了一些反馈,但不是每个元素的反馈说(目标==
我将从 Textmate 切换到 SublimeText 2。 在 TextMate 中,只需单击行号即可用鼠标为该行添加书签。我这样做已经很多年了,虽然我确信有些人可能更喜欢键盘快捷键,但我不是其中
如何在JavaScript中获取“mouse key up”的按键代码? 如果我按下鼠标左键,那么键码就是一个。 我想在 onmousekeyup 时触发一些代码。但是只要鼠标按下键,这段代码就不会触
我想要实现的是,我想让它像星级评定一样工作。当你进入鼠标时,星星变成黄色,当你离开鼠标时,它变成灰色,然后如果你再次点击它变成黄色。 不知道如何实现它,我添加了代码来向您展示我到目前为止所做的尝试。
我刚刚发现:set mouse=a .令人惊奇的是,它允许我的同事滚动浏览我的 openend 文件。 但事情是这样的:当我左键单击某处时,我真的不希望光标移动。我不想要 :set mouse=a 的
我正在使用官方 highcharts 包装器进行 react 以生成甘特图。我试图从鼠标悬停事件中获取鼠标坐标并将其用于自定义工具提示,但坐标不精确。 例子: https://stackblitz.c
我在 reactjs 上创建了一个简单的组件(一种值选择器:plunker) 现在,我希望隐藏控件的上部和下部 (opacity=0) 并在用户将鼠标悬停在中央 时动画化为 opacity=1 >di
我正在编写一个测试,它在Cuprite::Ferrum上运行,我需要在其中单击一个元素,并将其拖放到页面上另一个元素的下方。当我手动操作时,它工作得很好,但当我尝试将其放在测试中时,它几乎可以工作,但
I want to record mouse and keyboard simultaneously and replay them later. When MIDDLE MOUSE is pr
我为 3d 射击游戏添加了主要用户对象,为其附加了摄像头,并试图在脚本代码中捕捉鼠标移动,附加到玩家游戏对象。但是不能使用Input.GetAxis("Mouse X")、Input.GetAxis(
我是 Unity 脚本的新手,我正在尝试制作 ThirdPersonCamera,所以关注 this tutorial他可以正确上下左右移动鼠标 使用的脚本是 posY += Input.GetAxi
Fotorama slider : slider 设置为 Autoplay="true",效果很好。如何让 slider 在鼠标悬停时暂停,然后在鼠标移开时恢复自动播放?这是我的代码: 最佳答案 v
我在 Windows 窗体中有一个 TreeView 。当我左键单击 TreeView 中的一个节点时,e.Node 显示正确的值,但是当我右键单击同一节点时,e.Node 在 trreview Af
是涉及到寄存器还是缓存内存相关? 我的问题的说明性示例可能很简单,我将鼠标移过我当前正在输入的屏幕。我不点击任何东西,我只是将箭头从左到右、上下移动。 CPU 如何处理鼠标相对于显示器显示的瞬时位置变
用户可以使用一个非常简单的工具(在按住 LMB 的同时移动鼠标)在我的应用程序中绘制草图。这会导致一系列 mousemove 事件,我会在每个事件中记录光标位置。生成的折线曲线往往相当密集,几乎每隔一
我有一些新手问题。 在我的应用程序 (processingjs) 中,我使用 scale() 和 translate() 来允许用户缩放和滚动场景。只要我将比例设置为 1.0,我就没有问题。但是每当我
我正在寻找一个在 XP/Vista/7 中工作的全局鼠标钩子(Hook),它允许我访问鼠标输入的 X、Y 值,并在它们到达 Windows 之前修改这些值...... 我还希望能够在实际鼠标输入之间模
我正在使用mousejoint来拖动box2d中的物体,但这会导致惯性延迟。 是否存在即时拖动 body 的任何方式? 最佳答案 解决方案是在b2MouseJointDef中调整属性frequency
我是一名优秀的程序员,十分优秀!