尝试通过jni调用从java更改Windows鼠标光标图标

在我的java应用程序中,即时尝试使用具有透明度的argb 32位bmp文件更改鼠标光标。

我想进行jni调用以从Windows更改它,因为在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); 

但不是在java中通过jni调用的dll

如果有人对这种情况有更好的方法或解决方案,谢谢

干杯

有没有你想做的东西,这是java.awt.Cursor无法实现的?