私は、カーソルアイコンをディレクトリからカスタム画像に変更するC++プログラムを作成しようとしています。C++:LoadImage関数とSetCursor関数を正しく使用する
#include <iostream>
#include <chrono>
#include <thread>
#include <Windows.h>
using namespace std;
int main(int argc, char** argv)
{
//HINSTANCE hInst = GetModuleHandle(NULL);
HINSTANCE hInst = NULL;
HCURSOR cursor = (HCURSOR)LoadImage(hInst, "Image.bmp", IMAGE_BITMAP,
32, 32, LR_LOADFROMFILE); //Also tried LR_SHARED
cout << "Initializing\n";
Sleep(1500);
SetCursor(cursor);
//Also tried SetSystemCursor(cursor, 32512);
cout << "Setting cursor\n";
Sleep(1500);
DestroyCursor(cursor);
cout << "Restoring cursor\n";
Sleep(2000);
return 0;
}
プログラムして終了し、その後、それをバックに変更、ビットマップ画像にカーソルを変更する必要があります。Windowsデベロッパーセンターは、私はこのコードを思いついたからsome fairly straightforward documentation on how to do this in C++を、持っているようです。メッセージは、実行すると印刷されますが、カーソルは変わらないように変更されません。私は、問題がLoadImage関数、SetCursor関数、または他のものにあるかどうかは完全にはわかりません。私は、LoadImage関数のHINSTANCEパラメータに対してさまざまなタイプのHINSTANCEを試しました.LoadImage関数の最後の引数に異なるフラグを試しました。また、SetCursor関数の代わりにSetSystemCursor関数を使用してみました。
私がやりたいことは、マウスカーソルイメージを変更することです。これは本当にシンプルなはずですが、思ったよりも複雑になっています。私の意図は、JVMがカーソルをプログラムウィンドウの外に変更することができないため、このコードをDLLとしてエクスポートして、使用しているJavaプロジェクトのJavaネイティブインタフェースで使用することです。
私はすべての場所で検索し、ここでいくつかのわずか同様の質問を見ましたが、正しくました私がいる問題に対処なし。私は、WM_SETCURSORメッセージに応答してSetCursor関数を呼び出す必要があると言及している人もいますが、どういう意味なのか分かりません(C++の経験はあまりないので、私には負担してください)。私はあなたが私を助けることができることを願っています。ありがとう。
それはそれよりはるかに複雑です。 MSDNの[カーソルを使用]ページ(https://msdn.microsoft.com/en-us/library/windows/desktop/ms648380(v = vs.85).aspx#_win32_Creating_a_Cursor)は正しい方向を指しているはずです。 –
'LoadImage'はビットマップではなく* .curファイルが必要です。 Visual Studioのリソースエディタで* .curファイルを作成できます。ここにコンソールプログラムがあります。 WinMainエントリポイントを持つWindowsプログラムでは、 'WM_SETCURSOR'と' WNDCLASS/LoadCursor'が使われます。通常、カーソルはウィンドウに限定されます。 'SetSystemCursor'はデスクトップ全体のカーソルを変更しますが、ユーザがコントロールパネルから行うべきであるため、良い選択肢ではありません。あなたが 'SetCapture' /' ReleaseCapture'をウィンドウプログラムやJavaプログラムで試してみましょう。ドラッグ&ドロップのオプションもあります... –
私が持っている質問はこれです:自分のウィンドウの外にカーソルを変更したい理由は何ですか?それはドラッグ+ドロップ、または何かのためですか?解決策は異なる場合があります。あなたの最後の段落については、WindowsはそのUIにデザインを渡すメッセージを使用します。 'WM_' _something_はウィンドウメッセージです。メッセージとその使用方法の概要については、[this](https://msdn.microsoft.com/en-us/library/windows/desktop/ms644927.aspx)を参照してください。 – theB