Dan Polansky said:
Larry, that is a good news. Do you know or have a link on how to do it
using JNI, at least for Windows? Dan
Following is what I use to load small and large icons from a
..ico file. I stripped out a caching mechanism, so it may not
compile as-is. Of course, if you've never used jni you'll have
to figure that out as well.
JNIEXPORT void JNICALL Java_nativ_W32Native_setIconX(JNIEnv *env,
jclass obj, jobject wnd, jstring icon_path) {
JAWT awt;
awt.version = JAWT_VERSION_1_3;
if(JAWT_GetAWT(env, &awt) == JNI_FALSE)
return;
JAWT_DrawingSurface *ds = awt.GetDrawingSurface(env, wnd);
if(ds == NULL)
return;
jint lock = ds->Lock(ds);
if((lock & JAWT_LOCK_ERROR) != 0) {
awt.FreeDrawingSurface(ds);
return; }
JAWT_DrawingSurfaceInfo *dsi = ds->GetDrawingSurfaceInfo(ds);
if(dsi != NULL) {
JAWT_Win32DrawingSurfaceInfo *dsi_win =
(JAWT_Win32DrawingSurfaceInfo*)dsi->platformInfo;
HWND win_handle = dsi_win->hwnd;
if(win_handle != NULL) {
LPTSTR icon_path_str = (LPTSTR)GetString(env, icon_path);
HICON icon, icon_sm;
bool found = false;
icon = (HICON)LoadImage(NULL, icon_path_str, IMAGE_ICON,
GetSystemMetrics(SM_CXICON), GetSystemMetrics(SM_CYICON),
LR_LOADFROMFILE);
icon_sm = (HICON)LoadImage(NULL, icon_path_str, IMAGE_ICON,
GetSystemMetrics(SM_CXSMICON), GetSystemMetrics(SM_CYSMICON),
LR_LOADFROMFILE);
if(icon != NULL)
SendMessage(win_handle, WM_SETICON, ICON_BIG, (long)icon);
if(icon_sm != NULL)
SendMessage(win_handle, WM_SETICON, ICON_SMALL, (long)icon_sm);
ReleaseString(env, icon_path, icon_path_str);
}
ds->FreeDrawingSurfaceInfo(dsi);
}
ds->Unlock(ds);
awt.FreeDrawingSurface(ds);
}