ウィンドウ外(デスクトップなど)のマウスカーソルを変更したいです

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
PkLkP

ウィンドウ外(デスクトップなど)のマウスカーソルを変更したいです

#1

投稿記事 by PkLkP » 3年前

SetSystemCursorを使用して
左クリックで十字、右クリックで矢印にマウスカーソルを変更する処理をしたいのですが、
変更できません。

ヘッダーでwinuser.hを使うとのことですが、windows.hをincludeしているので不要かと判断しました。

また、第二引数のidですが、OCR_***がなぜか定義されていないので下記のURLを見て独自に
#define OCR_CROSS 32515
#define OCR_NORMAL 32512
https://docs.microsoft.com/ja-jp/window ... stemcursor

VC++2019

コード:

LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
	HCURSOR hCursor = CopyCursor(LoadCursor(NULL, IDC_ARROW)); //現在のカーソルを保存(復旧に使用)
	
	switch (msg)
	{
		case WM_CREATE:
			break;

		case WM_RBUTTONDOWN:
			SetSystemCursor(CopyCursor(hCursor), OCR_NORMAL); //カーソル復旧
			break;

		case WM_LBUTTONDOWN:
			SetSystemCursor(CopyCursor(LoadCursor(NULL, IDC_CROSS)), OCR_CROSS); //カーソル変更
			break;

		case WM_DESTROY:
			PostQuitMessage(0);
			break;

		default:
			return DefWindowProc(hWnd, msg, wParam, lParam);
	}

	return 0;
}

Meta3

Re: ウィンドウ外(デスクトップなど)のマウスカーソルを変更したいです

#2

投稿記事 by Meta3 » 3年前

これではどうでしょう
VC++2019

コード:

LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
	static int flag_cur;

	switch (msg)
	{
	case WM_CREATE:
		break;


	case WM_SETCURSOR:
		if (flag_cur == 1)SetCursor(LoadCursor(NULL, IDC_CROSS));
		if (flag_cur == 0)SetCursor(LoadCursor(NULL, IDC_ARROW));

		break;

	case WM_RBUTTONDOWN:
		flag_cur = 0;

		break;

	case WM_LBUTTONDOWN:
		flag_cur = 1;
		
		break;

	case WM_DESTROY:
		PostQuitMessage(0);
		break;

	default:
		return DefWindowProc(hWnd, msg, wParam, lParam);
	}

	return 0;
}




Meta3

Re: ウィンドウ外(デスクトップなど)のマウスカーソルを変更したいです

#3

投稿記事 by Meta3 » 3年前

>また、第二引数のidですが、OCR_***がなぜか定義されていないので下記のURLを見て独自に
#define OCR_CROSS 32515
#define OCR_NORMAL 32512
https://docs.microsoft.com/ja-jp/window ... stemcursor

コード:

#define OEMRESOURCE
#include <Windows.h>
Windows.hの前にOEMRESOURCEを定義してください と注意がきがありますね

PkLkP

Re: ウィンドウ外(デスクトップなど)のマウスカーソルを変更したいです

#4

投稿記事 by PkLkP » 3年前

返答ありがとうございます。
教えていただいた通りソースを編集してみましたが、カーソルが変更されることはありませんでした。

#define OEMRESOURCE
の件、見落としてました。ありがとうございます。

返信

“C言語何でも質問掲示板” へ戻る