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 -0000 1.57 --- GUI.xs 1 Jun 2006 19:46:11 -0000 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 diff -C2 -d -r1.45 -r1.46 *** GUI.pm 30 May 2006 18:20:57 -0000 1.45 --- GUI.pm 1 Jun 2006 19:46:11 -0000 1.46 *************** *** 366,369 **** --- 366,378 ---- # You can eventually specify your desired size for the image with X and # Y and pass some FLAGS to the underlying LoadImage API (at your own risk) + # + # If FILENAME is a string, then it is first tried as a resource + # name, then a filename. If FILENAME is a number it is tried + # as a resource identifier. + # + # Resources are searched for in the current exe (perl.exe unless + # you have packed your application using perl2exe, PAR or similar), + # then in the Win32::GUI GUI.dll, and finally as an OEM resource + # identifier sub new { my $class = shift; *************** *** 372,375 **** --- 381,385 ---- my $handle = Win32::GUI::LoadImage(@_); + # TODO: this gives us a bitmap object, even if we ask for a cursor! if($handle) { $self->{-handle} = $handle; *************** *** 390,393 **** --- 400,412 ---- # (@)METHOD:new Win32::GUI::Icon(FILENAME) # Creates a new Icon object reading from FILENAME. + # + # If FILENAME is a string, then it is first tried as a resource + # name, then a filename. If FILENAME is a number it is tried + # as a resource identifier. + # + # Resources are searched for in the current exe (perl.exe unless + # you have packed your application using perl2exe, PAR or similar), + # then in the Win32::GUI GUI.dll, and finally as an OEM resource + # identifier sub new { my $class = shift; *************** *** 426,429 **** --- 445,457 ---- # (@)METHOD:new Win32::GUI::Cursor(FILENAME) # Creates a new Cursor object reading from FILENAME. + # + # If FILENAME is a string, then it is first tried as a resource + # name, then a filename. If FILENAME is a number it is tried + # as a resource identifier. + # + # Resources are searched for in the current exe (perl.exe unless + # you have packed your application using perl2exe, PAR or similar), + # then in the Win32::GUI GUI.dll, and finally as an OEM resource + # identifier sub new { my $class = shift; Index: CHANGELOG =================================================================== RCS file: /cvsroot/perl-win32-gui/Win32-GUI/CHANGELOG,v retrieving revision 1.84 retrieving revision 1.85 diff -C2 -d -r1.84 -r1.85 *** CHANGELOG 16 May 2006 19:18:30 -0000 1.84 --- CHANGELOG 1 Jun 2006 19:46:11 -0000 1.85 *************** *** 6,9 **** --- 6,21 ---- Win32-GUI ChangeLog =================== + + [Robert May] : 01 June 2006 - Icon/Cursor/Bitmap enhancement + --- Win32::GUI core --- + - GUI.xs,GUI.pm enhanced LoadImage to search more files for + resources, and to allow passing a resource ID. Update + documentation for Icon, Cursor and Bitmap constructors + to reflect additions. + - samples/standard_images.pl add sample that allows browsing of + all the standard resources. + --- Win32::GUI::Constants --- + - Constants.PL add IDI_, IDC_, OBM_, OCR_ and OIC_ constants + to load pre-defined resources. + + [Robert May] : 16 May 2006 - More Win32::GUI::Constants --- Win32::GUI core ---