🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

1回答

1983閲覧

マウスカーソルをメモリから読み込みたい

nicoyou

総合スコア129

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2019/11/06 02:52

下のコードのようにすることでマウスカーソルを変更することは出来たのですが、これを暗号化しようと考えています
しかし、aniファイルを暗号化した場合、複合したものをメモリ上に展開したものを読み込む必要があるのですが、そのような関数は自分では見つけられませんでした
どの様にすればメモリから読み込めるか教えていただければ嬉しいです
win10 デスクトップアプリケーション vc++2019

C++

1 HCURSOR mouse_cursor_handle = LoadCursorFromFile(".\data\test.ani"); 2 HWND main_window_h = GetMainWindowHandle(); 3 SetClassLong(main_window_h, GCL_HCURSOR, (LONG)mouse_cursor_handle);

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

ちょうど、ご質問と同じ内容のものがStack Overflowにありましたのでご案内しておきます。

Load an animated cursor at runtime from memory - Stack Overflow

Windowsでマウスカーソルを取り扱うには何らかのリソースIDを割り当てる必要がありますが、こちらの回答ではCreateIconFromResourceというWindows APIを使い、メモリ上のイメージをマウスカーソルとして割り当てています。全文英語な上にWindows API特有の事情があるので読み解くのは大変かもしれませんが、ご要望の操作は不可能ではなさそう、と言うことです。(なお、私の方では確認していません)

投稿2019/11/06 03:13

dodox86

総合スコア9254

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nicoyou

2019/11/06 14:42

貼っていただいたリンク先を参考に無事完成しました ありがとうございますm(__)m (Dxライブラリを使っているのであれですが一応コードを貼っておきます) // 指定されたパスがDxアーカイブを含めてファイルを指しているかを確認する bool IsDxFile(LPCSTR FilePath) { int file_handle = FileRead_open(FilePath); if (file_handle == NULL) return false; // ファイルが見つからなかった場合 FileRead_close(file_handle); return true; // ファイルが見つかった場合 } // マウスカーソルを読み込んでウィンドウに登録する bool LoadMouseCursor(LPCSTR MouseCursorPath) { if (MouseCursorPath == nullptr) { ERR_GL("MouseCursorPath が nullptr です"); return GL_BOOL_ERROR; } error_code err; HCURSOR mouse_cursor_handle = nullptr; // マウスカーソルのハンドル if (fs::is_regular_file(MouseCursorPath, err)) // 通常ファイルとして存在していれば { mouse_cursor_handle = LoadCursorFromFile(MouseCursorPath); } else if(IsDxFile(MouseCursorPath)) // Dxアーカイブ内に存在すれば { int cursor_file_size = FileRead_size(MouseCursorPath); int cursor_file_handle = FileRead_open(MouseCursorPath); if (cursor_file_size <= 0 || cursor_file_handle == NULL) { ERR_GL("マウスカーソルデータが見つかりませんでした"); return GL_BOOL_ERROR; } Byte* buffer = new Byte[cursor_file_size]; FileRead_read(buffer, cursor_file_size, cursor_file_handle); FileRead_close(cursor_file_handle); mouse_cursor_handle = (HCURSOR)CreateIconFromResource(buffer, cursor_file_size, FALSE, 0x00030000); delete[] buffer; } else { ERR_GL("ファイルが見つかりませんでした"); return GL_BOOL_ERROR; } if (mouse_cursor_handle == nullptr) { ERR_GL("マウスカーソルデータの読み込みに失敗しました"); return GL_BOOL_ERROR; } SetClassLong(GetMainWindowHandle(), GCL_HCURSOR, (LONG)mouse_cursor_handle); AddGameLibLog("マウスカーソルデータの読み込みが完了しました"); return GL_BOOL_NO_ERROR; }
dodox86

2019/11/07 16:14

ご報告、どうもありがとうございます。単にURLを紹介しただけの回答でしたが、お役に立てて良かったです。本質問が解決したのであれば、質問を閉じてもらえますとよいです。
nicoyou

2019/11/09 03:08

すみません、BAを決定していたつもりだったのですが、完了していなかったようです おそらくこのページを2,3日開きっぱなしにしていたのが原因だと思います また質問することがあればちゃんと確認しますm(__)m
dodox86

2019/11/09 03:10

なるほど、そうでしたか。ご対応ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問