在我的Java应用程序中,我试图使用具有透明度的argb 32位bmp文件来更改鼠标光标。
我想通过Windows进行jni调用来更改它,因为在Java中更改光标会给我一个非常糟糕的鼠标光标(所有透明度都是0x00或0xFF)
目前,我正在尝试使用功能SetClassLong作为参数:
来自Java的hWnd(我在方法http://download.oracle.com/javase/1.3/docs/guide/awt/AWT_Native_Interface.html之后得到它)
GCL_HCURSOR
和一个由原始argb 32位bmp缓冲区制成的游标
这段代码在示例win32 atl Windows测试程序中起作用:
HBITMAP hBitmap = (HBITMAP)CreateBitmap(32, 32, 1, 32, pRawBmpData);
BITMAP bmp;
::GetObject(hBitmap, sizeof(BITMAP), &bmp);
HBITMAP hMask = ::CreateCompatibleBitmap(::GetDC(NULL), bmp.bmWidth, bmp.bmHeight);
ICONINFO ii = {0};
ii.fIcon = FALSE;
ii.hbmColor = hBitmap;
ii.hbmMask = hMask;
ii.xHotspot = 0;
ii.yHotspot = 0;
HCURSOR cursor = ::CreateIconIndirect(&ii);
SetCursor(cursor);
SetClassLong(hWnd, GCL_HCURSOR, (DWORD)cursor);
但是不在通过jni从Java调用的dll中
如果有人对这种情况有更好的方法或解决方案,谢谢
干杯
最佳答案
您是否想做java.awt.Cursor无法做到的事情?
关于java - 尝试通过jni调用从Java更改Windows鼠标指针图标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6220810/