让屏幕尺寸不受限制,c ++&视窗

时间:2009-08-10 23:53:12

标签: c++ mouse

我目前正在编写一个c ++控制台应用程序,它定期抓取鼠标位置并将其发送到另一个可视应用程序,用于实时驱动一些3D图形。可视应用程序是封闭源代码,无法在其有限的插件功能之外进行更改。

目前我正在使用GetCursorPos()函数,该函数既简单又快速,但我遇到的问题是所有数据都是根据1920x1600的当前屏幕分辨率进行剪裁,以便所有x值介于两者之间0和1920,无论鼠标移动多远,所有y值都在0到1600之间。

我需要在屏幕边缘剪切之前获取鼠标位置,或者我可以用来计算当前位置的增量。

我已经看到一些对Windows MouseMove事件的引用,但我真的不想实现一个窗口使其工作或特别是让它作为活动来接收这些事件。

我在Windows环境中工作,语言变化不可行。

3 个答案:

答案 0 :(得分:6)

我可能错了,但是在Win32的土地上,当鼠标位于屏幕边缘时,你不会得到鼠标移动信息,因为鼠标没有移动。获得无限鼠标区域的常用方法是执行以下操作:

  1. 隐藏鼠标,获取独占访问权限并记录位置
  2. 将鼠标中心移动到窗口
  3. 当鼠标移动时,从屏幕中心到当前位置获得增量
  4. 再次将鼠标中心转到窗口
  5. 下一次鼠标移动应该有一个(0,0)的delta,所以忽略它
  6. 转到3直到鼠标移动操作结束
  7. 重置位置,显示鼠标并释放独占访问权限
  8. 如果你没有隐藏鼠标,那么你会看到鼠标移动一小段距离然后再回到中心位置,这看起来很讨厌。

    此方法确实需要消息泵来显示鼠标移动消息,因此控制台应用程序的想法可能不适用于此。你能创建一个全屏隐形窗口来抓取鼠标吗?

答案 1 :(得分:2)

只需获得该位置,然后将其移至中心并自行返回delta

这就是FPS游戏的用途

答案 2 :(得分:1)

我对原始输入没有任何直接经验,这可能是您需要利用的。 According to MSDN,您必须注册设备,然后设置您的winproc以接受WM_INPUT消息,然后根据原始数据进行计算。

这是another relevant link