JAVA对于底层对象比如鼠标等还是得依靠JNI或是JNA来处理,这里记录下如何实现鼠标的获取、是否是默认鼠标样式判断等。
获取鼠标样式并显示:
import java.awt.image.BufferedImage;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import com.sun.jna.Pointer;
public class LoadCursor {
public static void draw(BufferedImage image, int cursor,
int diFlags) {
int width = image.getWidth();
int height = image.getHeight();
User32 user32 = User32.INSTANCE;
Gdi32 gdi32 = Gdi32.INSTANCE;
Pointer hIcon = user32
.LoadCursorW(Pointer.NULL, cursor);
Pointer hdc = gdi32.CreateCompatibleDC(Pointer.NULL);
Pointer bitmap = gdi32.CreateCompatibleBitmap(hdc,
width, height);
gdi32.SelectObject(hdc, bitmap);
user32.DrawIconEx(hdc, 0, 0, hIcon, width, height, 0,
Pointer.NULL, diFlags);
for (int x = 0; x < width; x++) {
for (int y = 0; y < width; y++) {
int rgb = gdi32.GetPixel(hdc, x, y);
image.setRGB(x, y, rgb);
}
}
gdi32.DeleteObject(bitmap);
gdi32.DeleteDC(hdc);
}
public static void main(String[] args) {
final int width = 128;
final int height = 128;
BufferedImage image = new BufferedImage(width, height,
BufferedImage.TYPE_INT_ARGB);
draw(image, User32.IDC_HAND, User32.DI_NORMAL);
BufferedImage mask = new BufferedImage(width, height,
BufferedImage.TYPE_INT_RGB);
draw(mask, User32.IDC_HAND, User32.DI_MASK);
applyMask(image, mask);
JLabel icon = new JLabel();
icon.setIcon(new ImageIcon(image));
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setContentPane(icon);
frame.pack();
frame.setVisible(true);
}
private static void applyMask(BufferedImage image,
BufferedImage mask) {
int width = image.getWidth();
int height = image.getHeight();
for (int x = 0; x < width; x++) {
for (int y = 0; y < height; y++) {
int masked = mask.getRGB(x, y);
if ((masked & 0x00FFFFFF) == 0) {
int rgb = image.getRGB(x, y);
rgb = 0xFF000000 | rgb;
image.setRGB(x, y, rgb);
}
}
}
}
}
判断鼠标是否是默认样式
import com.sun.jna.Pointer;
public class CursorTest {
public static boolean isDefaultCursor() {
final int width = 128;
final int height = 128;
User32 user32 = User32.INSTANCE;
Gdi32 gdi32 = Gdi32.INSTANCE;
Pointer hIcon = user32.LoadCursorW(Pointer.NULL, User32.IDC_HAND);
Pointer hdc = gdi32.CreateCompatibleDC(Pointer.NULL);
Pointer bitmap = gdi32.CreateCompatibleBitmap(hdc, width, height);
gdi32.SelectObject(hdc, bitmap);
user32.DrawIconEx(hdc, 0, 0, hIcon, width, height, 0, Pointer.NULL,
User32.DI_MASK);
for (int x = 0; x < width; x++) {
for (int y = 0; y < width; y++) {
int rgb = gdi32.GetPixel(hdc, x, y);
// System.out.print(rgb+",");
if (rgb == 0)
return true;
}
}
return false;
}
public static void main(String[] args) {
boolean defaultCursor = isDefaultCursor();
System.out.println(defaultCursor);
}
}
相关类:
import com.sun.jna.Library;
import com.sun.jna.Native;
import com.sun.jna.Pointer;
public interface Gdi32 extends Library {
public static Gdi32 INSTANCE = (Gdi32) Native
.loadLibrary("Gdi32", Gdi32.class);
/** http://msdn.microsoft.com/en-us/library/dd183489(VS.85).aspx */
public Pointer CreateCompatibleDC(Pointer hdc);
/** http://msdn.microsoft.com/en-us/library/dd183488(VS.85).aspx */
public Pointer CreateCompatibleBitmap(Pointer hdc,
int nWidth, int nHeight);
/** http://msdn.microsoft.com/en-us/library/dd162957(VS.85).aspx */
public Pointer SelectObject(Pointer hdc, Pointer hgdiobj);
/** http://msdn.microsoft.com/en-us/library/dd145078(VS.85).aspx */
public int SetPixel(Pointer hdc, int X, int Y, int crColor);
/** http://msdn.microsoft.com/en-us/library/dd144909(VS.85).aspx */
public int GetPixel(Pointer hdc, int nXPos, int nYPos);
/** http://msdn.microsoft.com/en-us/library/dd183539(VS.85).aspx */
public boolean DeleteObject(Pointer hObject);
/** http://msdn.microsoft.com/en-us/library/dd183533(VS.85).aspx */
public boolean DeleteDC(Pointer hdc);
}
import com.sun.jna.Library;
import com.sun.jna.Native;
import com.sun.jna.Pointer;
public interface User32 extends Library {
public static User32 INSTANCE = (User32) Native
.loadLibrary("User32", User32.class);
/** @see #LoadCursorW(Pointer, int) */
public static final int IDC_ARROW = 32512;
/** @see #LoadCursorW(Pointer, int) */
public static final int IDC_IBEAM = 32513;
/** @see #LoadCursorW(Pointer, int) */
public static final int IDC_WAIT = 32514;
/** @see #LoadCursorW(Pointer, int) */
public static final int IDC_CROSS = 32515;
/** @see #LoadCursorW(Pointer, int) */
public static final int IDC_UPARROW = 32516;
/** @see #LoadCursorW(Pointer, int) */
public static final int IDC_SIZENWSE = 32642;
/** @see #LoadCursorW(Pointer, int) */
public static final int IDC_SIZENESW = 32643;
/** @see #LoadCursorW(Pointer, int) */
public static final int IDC_SIZEWE = 32644;
/** @see #LoadCursorW(Pointer, int) */
public static final int IDC_SIZENS = 32645;
/** @see #LoadCursorW(Pointer, int) */
public static final int IDC_SIZEALL = 32646;
/** @see #LoadCursorW(Pointer, int) */
public static final int IDC_NO = 32648;
/** @see #LoadCursorW(Pointer, int) */
public static final int IDC_HAND = 32649;
/** @see #LoadCursorW(Pointer, int) */
public static final int IDC_APPSTARTING = 32650;
/** @see #LoadCursorW(Pointer, int) */
public static final int IDC_HELP = 32651;
/** @see #LoadCursorW(Pointer, int) */
public static final int IDC_ICON = 32641;
/** @see #LoadCursorW(Pointer, int) */
public static final int IDC_SIZE = 32640;
/** @see #DrawIconEx(Pointer, int, int, Pointer, int, int, int, Pointer, int) */
public static final int DI_COMPAT = 4;
/** @see #DrawIconEx(Pointer, int, int, Pointer, int, int, int, Pointer, int) */
public static final int DI_DEFAULTSIZE = 8;
/** @see #DrawIconEx(Pointer, int, int, Pointer, int, int, int, Pointer, int) */
public static final int DI_IMAGE = 2;
/** @see #DrawIconEx(Pointer, int, int, Pointer, int, int, int, Pointer, int) */
public static final int DI_MASK = 1;
/** @see #DrawIconEx(Pointer, int, int, Pointer, int, int, int, Pointer, int) */
public static final int DI_NORMAL = 3;
/** @see #DrawIconEx(Pointer, int, int, Pointer, int, int, int, Pointer, int) */
public static final int DI_APPBANDING = 1;
/** http://msdn.microsoft.com/en-us/library/ms648391(VS.85).aspx */
public Pointer LoadCursorW(Pointer hInstance,
int lpCursorName);
/** http://msdn.microsoft.com/en-us/library/ms648065(VS.85).aspx */
public boolean DrawIconEx(Pointer hdc, int xLeft,
int yTop, Pointer hIcon, int cxWidth, int cyWidth,
int istepIfAniCur, Pointer hbrFlickerFreeDraw,
int diFlags);
}
分享到:
相关推荐
主要介绍了解决css中hover做遮盖罩闪动问题的相关知识,需要的朋友可以参考下
为了更好的用户体验或者SEO优化,我们一般会在按钮、链接或者图片的鼠标经过事件中添加一个提示,如果只是为了SEO优化,用title、alter方法是个好主意,但如果不止这些,比如还要让用户知道这个按钮的用途及相关信息...
WebGIS相关的OpenGIS规范 58 geoserver中地图以外的区域以自定义图片填充 62 怎样修改 geoServer 的用户名密码 65 GeoServer中的WMS服务生成的png图片背景色为透明 65 比例尺 65 需不需要一个layer对应一个store 66 ...
3.改进了CT程序内网页相关功能的稳定性 CCTalk4.5.16.76 1.支持答题功能,目前支持单选题,并且可以设置题干和答案 2.支持给老师献花,献花由参加答题答对获得 3.优化了讲义上传速度和体验,支持显示上传进度 4....
解决了用样式和JS实现转盘抽奖活动效果不佳的问题。 功能如下: 1.只需换几张图片就可以完成转盘,资源名称随便定义; 2.奖品数量可控制; 3.按钮灵活定义!; 4.指针自动旋转效果; 5.鼠标指针效果可以启用; 6.兼容...
问题提出: 在asp.net开发中,如果有这样的一个需求,如果在列表控件,如GridView中的某列中显示的是一个计算公式得出的值,那么需求来了,鼠标移入该数字,显示该数字的计算公式和过程,如何做? 解决方案分析: ...
26、增加会员资讯页显示发布会员相关信息功能; 27、增加截取信息鼠标指向提示功能; 28、增加公司库及公司列表等页显示会员等级图标功能; 29、增加未通过审核供求、产品原因反馈功能; 30、增加过期供求、产品...
修复了一个问题,即在重命名相关的PCB文档后,Draftsman会崩溃。 26542 修复了回归,其中未选择丝网印刷图形的组件的装配视图中缺少阴影线(BC:9416)。 26867 修复了回归,其中没有显示缺少3D体的Not Fitted组件的...
6) 修改MYSQL支持库跨静态编译的EXE和DLL传递连接句柄和记录集句柄无效的BUG(改动较大,可能会产生兼容性问题,我们已经仔细测试,也请使用到此库的用户帮助我们多多测试,以便及早发现问题,谢谢) 7) 其它修改 ...
修复了有时在单元格上点击鼠标右键,弹出的右键菜单上没有包含单元格相关菜单项的问题;新增通过placeholder选项为编辑器设置并显示没有内容时的占位提示文本;新增通过pasteImage选项实现贴图自动上传功能;新增...
- ie 8~10样式问题调整 ###ver2.6 `2014/7/6` ---- ####update: - 完全性优化;加入严格的校验机制 - 首次运行环境检测[data目录检测,必须的函数支持提示] - 上传已存在处理——创建副本(另外包括粘贴,解压) ...
现在可以使用颜色命名的辅助类添加文本颜色、背景样式,包括(.text-red,.text-green,.bg-yellow,hl-blue 等); 对话框触发器: 支持使用 className 选项来指定生成的对话框额外添加的 CLASS 属性; 图表: ...
大部分章节含有一个“Q & A”部分,来回答该章节相关的一些常见问题。注意,某些问题会由于知识点的关联性重复出现在多个章节。这些问题、答案及其附带的示例代码都包含在本文档的附录部分。 一、...
引入相关代码,但我们还是需要了解一下这种效果是如何完成的。一.问题所在第一步,先使用 CSS 把百度侧栏分享滑动的样式整理好。第二步,滑动的侧栏主要是由鼠标移入
随鼠标指针的提示文本, 这是老式的, 下面有新型的. TrayIcon.BalloonHint、BalloonTitle、BalloonFlags、BalloonTimeout 这都是新型的 Hint 相关的. TrayIcon.BalloonHint: Hint 文本 TrayIcon.BalloonTitle: Hint ...
如果文档中的符号和共享样式已停止在检查器中显示其源库,而是显示“此文档”,则您将遇到此问题。 用法 下载并安装插件(有关更多详细信息,请参见“安装”部分) 直接从Cloud中打开有问题的文档,选择一个Symbol...
42、CSS鼠标样式 319 43、IFRAME WINDOW、DOCUMENT获取与其他 320 44、CSS Z-INDEX 取值范围 320 45、CSS背景图片与内容放大与缩小时相对定位 321 46、JS ATTACHEVENT与ADDEVENTLISTENER区别 321 47、JS WINDOW....
修改 文章修改鼠标滑过背景色及添加彩色边框效果 更新记录 5.3版本更新: 新增全面兼容 PHP 7.3 新增对WordPress5.0+新版编辑器的兼容支持 新增登录注册找回密码链接的 nofollow 更新Awesome图标库到最新版5.7.2,...