2016-07-03 19 views
0

私は、カーソルアイコンをディレクトリからカスタム画像に変更する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++の経験はあまりないので、私には負担してください)。私はあなたが私を助けることができることを願っています。ありがとう。

+0

それはそれよりはるかに複雑です。 MSDNの[カーソルを使用]ページ(https://msdn.microsoft.com/en-us/library/windows/desktop/ms648380(v = vs.85).aspx#_win32_Creating_a_Cursor)は正しい方向を指しているはずです。 –

+0

'LoadImage'はビットマップではなく* .curファイルが必要です。 Visual Studioのリソースエディタで* .curファイルを作成できます。ここにコンソールプログラムがあります。 WinMainエントリポイントを持つWindowsプログラムでは、 'WM_SETCURSOR'と' WNDCLASS/LoadCursor'が使われます。通常、カーソルはウィンドウに限定されます。 'SetSystemCursor'はデスクトップ全体のカーソルを変更しますが、ユーザがコントロールパネルから行うべきであるため、良い選択肢ではありません。あなたが 'SetCapture' /' ReleaseCapture'をウィンドウプログラムやJavaプログラムで試してみましょう。ドラッグ&ドロップのオプションもあります... –

+0

私が持っている質問はこれです:自分のウィンドウの外にカーソルを変更したい理由は何ですか?それはドラッグ+ドロップ、または何かのためですか?解決策は異なる場合があります。あなたの最後の段落については、WindowsはそのUIにデザインを渡すメッセージを使用します。 'WM_' _something_はウィンドウメッセージです。メッセージとその使用方法の概要については、[this](https://msdn.microsoft.com/en-us/library/windows/desktop/ms644927.aspx)を参照してください。 – theB

答えて

0

コンソールウィンドウでカーソルを変更することはできません。代わりにダイアログをポップアップした場合、カーソルが変わると思います。私はWindowsのコンソールウィンドウでカーソルの変更を見たことがありません。

関連する問題