绘制自定义鼠标光标

时间:2020-07-06 14:44:52

标签: c++ windows

我需要使用C ++为我的应用程序绘制自定义鼠标光标。我正在使用一种设备来跟踪手部运动并将其转换为屏幕上的光标位置。

但是,对于此应用程序,系统光标可能会显示或可能不会显示,因此我需要以某种方式绘制在屏幕上。我还需要与任何窗口进行交互。因此,我不确定自己的操作方式-我相信我可以创建一个“透明”窗口来画图,同时将点击/拖动传递到下一个窗口,但是不确定如何执行此操作。

编辑:澄清-此应用程序可能在通过某种方式隐藏了光标的触摸屏设备上运行。我正在竭尽所能地创建该应用程序,使其尽可能地作为宿主系统的“传手”-该程序旨在成为一个拖放式应用程序,该程序将仅在无需执行任何操作或执行非常少量操作的系统上运行主机系统本身的设置。

当前,我有以下代码在“鼠标”的位置绘制一个光标,但是在绘制新的鼠标之前,我不知道如何刷新屏幕或在旧的“光标”上绘制。这会导致在屏幕上重复出现光标:

// Some thread
DWORD WINAPI Cursor(LPVOID lpParam) {
  auto dc = GetDC(NULL);
  std::optional<POINT> point;
  while (true) {
    if (point.has_value()) {
      auto p = point.value();
      RoundRect(......); // Paint over old cursor
    }

    POINT p;
    if (GetCursorPos(&p)) {
      point.emplace(p);
      RoundRect(......); // Paint new cursor
  }
}

我读过,只需在同一位置调用另一个RoundRect即可清除它,但事实并非如此,否则我做错了。

我相信我的程序可以在需要时具有超级权限。与linux上的这种东西相比,使用WINAPI似乎有点麻烦,因为它涉及到使用不同Windows的权限以及允许单击等操作的权限。

关于如何进行的任何建议?

0 个答案:

没有答案