Update of /cvsroot/perl-win32-gui/Win32-GUI
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv7193
Modified Files:
CHANGELOG GUI.pm GUI.xs
Log Message:
Enhanced resouce loaing for Icons/Bitmaps and Cursors
Index: GUI.xs
===
RCS file: /cvsroot/perl-win32-gui/Win32-GUI/GUI.xs,v
retrieving revision 1.57
retrieving revision 1.58
diff -C2 -d -r1.57 -r1.58
*** GUI.xs 16 May 2006 18:57:25 - 1.57
--- GUI.xs 1 Jun 2006 19:46:11 - 1.58
***
*** 1448,1451
--- 1448,1452
#my $hourglass=Win32::GUI::LoadCursor(32514);
#
+ #NOTE: it is better to use Win32::GUI::Cursor->new(ID);
void
LoadCursor(ID)
***
*** 1482,1487
# (@)INTERNAL:LoadImage(FILENAME, [TYPE, X, Y, FLAGS])
HBITMAP
! LoadImage(filename,iType=IMAGE_BITMAP,iX=0,iY=0,iFlags=LR_LOADFROMFILE)
! LPCTSTR filename
UINT iType
int iX
--- 1483,1488
# (@)INTERNAL:LoadImage(FILENAME, [TYPE, X, Y, FLAGS])
HBITMAP
! LoadImage(filename,iType=IMAGE_BITMAP,iX=0,iY=0,iFlags=LR_DEFAULTCOLOR)
! SV *filename
UINT iType
int iX
***
*** 1490,1509
PREINIT:
HINSTANCE moduleHandle;
! HBITMAP bitmap;
CODE:
moduleHandle = GetModuleHandle(NULL);
! // Attempt to load from current EXE:
! bitmap = (HBITMAP) LoadImage((HINSTANCE) moduleHandle, filename, iType,
iX, iY, LR_DEFAULTCOLOR);
! // Try OEM ressource
! /* Can't use filename (a string pointer) as a resource id - should be
able to use
! * a filename like '#1' to get resource from EXE - TODO: test this
! if(bitmap == NULL) {
! bitmap = (HBITMAP) LoadImage((HINSTANCE) NULL,
MAKEINTRESOURCE(filename), iType, iX, iY, LR_DEFAULTCOLOR);
}
! */
! if(bitmap == NULL) {
! // Ok, that failed. So attempt to load from file:
! bitmap = (HBITMAP) LoadImage((HINSTANCE) NULL, filename, iType, iX,
iY, iFlags);
}
RETVAL = bitmap;
OUTPUT:
--- 1491,1554
PREINIT:
HINSTANCE moduleHandle;
! HBITMAP bitmap = NULL;
CODE:
+ /* Try to find the resource in the current EXE */
moduleHandle = GetModuleHandle(NULL);
!
! /* If filename looks like a string, attempt to load from current EXE: */
! if((bitmap ==NULL) && SvPOK(filename) && !(iFlags & LR_LOADFROMFILE)) {
! bitmap = (HBITMAP) LoadImage((HINSTANCE) moduleHandle,
! SvPV_nolen(filename), iType, iX, iY, iFlags);
}
!
! /* If filename looks like a number, try it as a resource id from the
current EXE */
! if((bitmap == NULL) && SvIOK(filename) && !(iFlags & LR_LOADFROMFILE)) {
! bitmap = (HBITMAP) LoadImage((HINSTANCE) moduleHandle,
! MAKEINTRESOURCE(SvIV(filename)), iType, iX, iY, iFlags);
}
+
+ /* Try to find the resource from GUI.dll */
+ moduleHandle = GetModuleHandle("GUI.dll");
+
+ /* If filename looks like a string, try it as a resource name from
GUI.dll */
+ if((bitmap == NULL) && SvPOK(filename) && !(iFlags & LR_LOADFROMFILE)) {
+ bitmap = (HBITMAP) LoadImage((HINSTANCE) moduleHandle,
+ SvPV_nolen(filename), iType, iX, iY, iFlags);
+ }
+
+ /* If filename looks like a number, try it as a resource id from GUI.dll
*/
+ if((bitmap == NULL) && SvIOK(filename) && !(iFlags & LR_LOADFROMFILE)) {
+ bitmap = (HBITMAP) LoadImage((HINSTANCE) moduleHandle,
+ MAKEINTRESOURCE(SvIV(filename)), iType, iX, iY, iFlags);
+ }
+
+ /* Try to load from file or as an OEM resource */
+ moduleHandle = NULL;
+
+ /* if filename looks like a string, try it as a file name */
+ if((bitmap == NULL) && SvPOK(filename)) {
+ bitmap = (HBITMAP) LoadImage((HINSTANCE) moduleHandle,
+ SvPV_nolen(filename), iType, iX, iY, iFlags|LR_LOADFROMFILE);
+ }
+
+ /* If filename looks like a number, try it as an OEM resource id */
+ if((bitmap == NULL) && SvIOK(filename) && !(iFlags & LR_LOADFROMFILE)) {
+ bitmap = (HBITMAP) LoadImage((HINSTANCE) moduleHandle,
+ MAKEINTRESOURCE(SvIV(filename)), iType, iX, iY, iFlags);
+ }
+
+ /* Finally, if it looks like a number, try it as a pre-defined resource */
+ if((bitmap == NULL) && SvIOK(filename)) {
+ if(iType == IMAGE_BITMAP) {
+ bitmap = LoadBitmap(NULL, MAKEINTRESOURCE(SvIV(filename)));
+ }
+ else if (iType == IMAGE_ICON) {
+ bitmap = LoadIcon(NULL, MAKEINTRESOURCE(SvIV(filename)));
+ }
+ else if (iType == IMAGE_CURSOR) {
+ bitmap = LoadCursor(NULL, MAKEINTRESOURCE(SvIV(filename)));
+ }
+ }
+
RETVAL = bitmap;
OUTPUT:
Index: GUI.pm
===
RCS file: /cvsroot/perl-win32-gui/Win32-GUI/GUI.pm,v
retrieving revision 1.45
retrieving revision 1.46
d