管理人様、
ご返信ありがとうございます。
>デスクトップ上のどこにマウスカーソルがあっても非表示にするということでしょうか?
その意図でしたが、OSの仕様で不可能なのですね・・・
もともと以下のようなサンプルで、マウスポインタを画面外に出せない処理を実現したかったのですが
マウスポインタを画面内に戻す際、一瞬だけ画面の外側にポインタが映ってしまうのが気に食わないのです・・・
#include <algorithm>
#include "DxLib.h"
namespace {
constexpr int windowWidth = 640;
constexpr int windowHeight = 480;
}
bool dxlibInit() {
ChangeWindowMode(TRUE); //ウインドウモードにする
SetWindowSize(windowWidth, windowHeight);
// DXライブラリ初期化処理
if (DxLib_Init() == -1) {
return false;
}
SetDrawScreen(DX_SCREEN_BACK); //描画先を裏画面に設定
return true;
}
void draw(int x, int y) {
ClearDrawScreen();
DrawString(100, 100, "画面からポインタが出せないサンプル\n(上方向から出せます)\n[ESC]で終了", GetColor(255, 255, 255));
DrawString(x, y, "x", GetColor(255, 0, 0));
}
std::pair<int, int> bindMouse() {
int x, y, xNew, yNew;
GetMousePoint(&x, &y);
xNew = std::clamp(x, 0, windowWidth - 1);
#undef min
yNew = std::min({ y, windowHeight - 1 });
if (x != xNew || y != yNew)SetMousePoint(xNew, yNew);
return { xNew, yNew };
}
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {
if (!dxlibInit()) {
// エラーが起きたら直ちに終了
return 1;
}
SetMouseDispFlag(FALSE);
while (ProcessMessage() == 0 && CheckHitKey(KEY_INPUT_ESCAPE) == 0) {
const auto[x, y] = bindMouse();
draw(x, y);
ScreenFlip();
}
DxLib_End();
return 0;
}