You can subscribe to this list here.
2005 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
(6) |
Nov
(31) |
Dec
(6) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2006 |
Jan
(6) |
Feb
|
Mar
(17) |
Apr
(17) |
May
(27) |
Jun
(67) |
Jul
(26) |
Aug
(15) |
Sep
(2) |
Oct
(24) |
Nov
(6) |
Dec
|
2007 |
Jan
(4) |
Feb
(1) |
Mar
|
Apr
|
May
|
Jun
|
Jul
(28) |
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2008 |
Jan
(21) |
Feb
(45) |
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2010 |
Jan
|
Feb
(3) |
Mar
|
Apr
(3) |
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2011 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
(1) |
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
S | M | T | W | T | F | S |
---|---|---|---|---|---|---|
|
|
1
(15) |
2
(7) |
3
|
4
|
5
|
6
|
7
|
8
|
9
|
10
|
11
|
12
|
13
(4) |
14
|
15
|
16
|
17
|
18
|
19
|
20
|
21
(4) |
22
(1) |
23
|
24
|
25
|
26
|
27
|
28
|
29
|
30
|
|
|
|
From: Robert M. <rob...@us...> - 2005-11-22 20:54:57
|
Update of /cvsroot/perl-win32-gui/Win32-GUI In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv30370 Modified Files: CHANGELOG Log Message: 1.03 Release Index: CHANGELOG =================================================================== RCS file: /cvsroot/perl-win32-gui/Win32-GUI/CHANGELOG,v retrieving revision 1.67 retrieving revision 1.68 diff -C2 -d -r1.67 -r1.68 *** CHANGELOG 21 Nov 2005 22:33:33 -0000 1.67 --- CHANGELOG 22 Nov 2005 20:54:45 -0000 1.68 *************** *** 6,9 **** --- 6,12 ---- Win32-GUI ChangeLog =================== + + [Robert May] : 22 Nov 2003 - 1.03 release + - Tagged head as Win32-GUI-1_03 + + [Robert May] : 21 Nov 2003 - 1.03 release candidate - t\05_Timer_*.t change interval test to use milli-seconds using |
From: Robert M. <rob...@us...> - 2005-11-21 22:33:52
|
Update of /cvsroot/perl-win32-gui/Win32-GUI In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv1048 Modified Files: CHANGELOG GUI.pm GUI.rc MANIFEST Makefile.PL Readme Readme.html TODO Log Message: Tests and 1.03 release candidate Index: GUI.rc =================================================================== RCS file: /cvsroot/perl-win32-gui/Win32-GUI/GUI.rc,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** GUI.rc 5 Oct 2005 22:20:48 -0000 1.5 --- GUI.rc 21 Nov 2005 22:33:33 -0000 1.6 *************** *** 8,13 **** 1 VERSIONINFO ! FILEVERSION 1,02,02,00 ! PRODUCTVERSION 1,02,02,00 FILEOS VOS__WINDOWS32 FILETYPE VFT_DLL --- 8,13 ---- 1 VERSIONINFO ! FILEVERSION 1,03,00,00 ! PRODUCTVERSION 1,03,00,00 FILEOS VOS__WINDOWS32 FILETYPE VFT_DLL *************** *** 17,24 **** BLOCK "040904E4" { ! VALUE "Comments" , "Win32::GUI Perl module v1.02_02" VALUE "CompanyName" , "Open Source" VALUE "FileDescription" , "perl-win32-gui Perl extension" ! VALUE "FileVersion" , "1.02_02" VALUE "InternalName" , "GUI.dll" VALUE "LegalCopyright" , "Copyright © Aldo Caplini 1997..2005" --- 17,24 ---- BLOCK "040904E4" { ! VALUE "Comments" , "Win32::GUI Perl module v1.03" VALUE "CompanyName" , "Open Source" VALUE "FileDescription" , "perl-win32-gui Perl extension" ! VALUE "FileVersion" , "1.03" VALUE "InternalName" , "GUI.dll" VALUE "LegalCopyright" , "Copyright © Aldo Caplini 1997..2005" *************** *** 26,30 **** VALUE "OriginalFilename" , "GUI.dll" VALUE "ProductName" , "Win32::GUI" ! VALUE "ProductVersion" , "1.02_02" } } --- 26,30 ---- VALUE "OriginalFilename" , "GUI.dll" VALUE "ProductName" , "Win32::GUI" ! VALUE "ProductVersion" , "1.03" } } Index: Makefile.PL =================================================================== RCS file: /cvsroot/perl-win32-gui/Win32-GUI/Makefile.PL,v retrieving revision 1.14 retrieving revision 1.15 diff -C2 -d -r1.14 -r1.15 *** Makefile.PL 13 Nov 2005 18:57:52 -0000 1.14 --- Makefile.PL 21 Nov 2005 22:33:33 -0000 1.15 *************** *** 2,5 **** --- 2,6 ---- use warnings; + use File::Spec(); use ExtUtils::MakeMaker; use Config; *************** *** 7,13 **** $main::USERESOURCE = 1; $main::BUILDENV = ''; # parse our command line options, removing them from @ARGV so that ! # MakeMaker doesn't warm that they are unrecoginised. my @tmp; foreach (@ARGV) { --- 8,15 ---- $main::USERESOURCE = 1; $main::BUILDENV = ''; + $main::BUILDENV_SETONCMDLINE = 0; # parse our command line options, removing them from @ARGV so that ! # MakeMaker doesn't warn that they are unrecoginised. my @tmp; foreach (@ARGV) { *************** *** 20,23 **** --- 22,26 ---- elsif(/BUILDENV=(.*)/) { $main::BUILDENV = $1; + $main::BUILDENV_SETONCMDLINE = 1; } else { *************** *** 63,67 **** __NOBUILDENV ! print "$_\t($allowed{$_})\n" for (keys %allowed); exit(1); --- 66,70 ---- __NOBUILDENV ! print "$_\t($allowed{$_})\n" for (keys %allowed); exit(1); *************** *** 83,86 **** --- 86,125 ---- print "\n\nBUILDENV=$main::BUILDENV Used build environment is: $allowed{$main::BUILDENV}\n\n"; + # If we got this far, then we have a buildenv and compiler that + # we want to try to use. Check that we can find the compiler, + # and exit with a nice error message if we can't. This stops + # us from failing CPAN Smoke tests on boxes that don't have + # compilers. + if($main::BUILDENV_SETONCMDLINE == 0) { + my @path = File::Spec->path(); + unshift @path, ('', '.'); + + my $found = 0; + foreach my $prog ( map { ( $_, "$_.exe" ) } ($Config{cc}) ) { + foreach my $path ( @path ) { + if( -f File::Spec->catfile( $path, $prog ) ) { + $found=1, last; + } + } + } + + if(!$found) { + print STDERR <<__NOCOMPILER; + + Makefile.PL was unable to find compiler '$Config{cc}' on your path. + To force a build call this script with the additional parameter 'BUILDENV': + + perl Makefile.PL BUILDENV=xxxx + + where xxxx is one of: + __NOCOMPILER + + print "$_\t($allowed{$_})\n" for (keys %allowed); + + + exit(1); + } + } + if($main::USERESOURCE == -1) { $main::USERESOURCE = 0; *************** *** 187,203 **** BINARY_LOCATION => 'Win32-GUI.tar.gz', macro => { ! BUILD_TOOLS => './build_tools', ! INST_DEMO => '$(INST_LIBDIR)/GUI/demos', ! PPMDISTVNAME => '$(DISTVNAME)-PPM-' . substr($Config{version},0,3), ! }, clean => { ! FILES => 'comctrl32.def cygwin.o libcyg.a GUI.res', ! }, realclean => { ! FILES => '$(PPMDISTVNAME) Readme.old Readme.html.old', ! }, depend => { ! distdir => 'readmedocs', ! }, ); --- 226,242 ---- BINARY_LOCATION => 'Win32-GUI.tar.gz', macro => { ! BUILD_TOOLS => './build_tools', ! INST_DEMO => '$(INST_LIBDIR)/GUI/demos', ! PPMDISTVNAME => '$(DISTVNAME)-PPM-' . substr($Config{version},0,3), ! }, clean => { ! FILES => 'comctrl32.def cygwin.o libcyg.a GUI.res', ! }, realclean => { ! FILES => '$(PPMDISTVNAME) Readme.old Readme.html.old', ! }, depend => { ! distdir => 'readmedocs', ! }, ); *************** *** 208,216 **** } - if ($main::BUILDENV eq "mingw") { - #$MakefileArgs{'LIBS'} = [':nosearch -lcomctl32']; - #$MakefileArgs{'DEFINE'} = '-D__MINGW__'; # should really use __MINGW32__, as that's defined by the compiler - } - WriteMakefile( %MakefileArgs ); --- 247,250 ---- Index: GUI.pm =================================================================== RCS file: /cvsroot/perl-win32-gui/Win32-GUI/GUI.pm,v retrieving revision 1.34 retrieving revision 1.35 diff -C2 -d -r1.34 -r1.35 *** GUI.pm 13 Nov 2005 18:57:52 -0000 1.34 --- GUI.pm 21 Nov 2005 22:33:33 -0000 1.35 *************** *** 25,29 **** # STATIC OBJECT PROPERTIES # ! $VERSION = "1.02_03"; # For MakeMaker $XS_VERSION = $VERSION; # For dynaloader $VERSION = eval $VERSION; # For Perl (see perldoc perlmodstyle) --- 25,29 ---- # STATIC OBJECT PROPERTIES # ! $VERSION = "1.03"; # For MakeMaker $XS_VERSION = $VERSION; # For dynaloader $VERSION = eval $VERSION; # For Perl (see perldoc perlmodstyle) Index: CHANGELOG =================================================================== RCS file: /cvsroot/perl-win32-gui/Win32-GUI/CHANGELOG,v retrieving revision 1.66 retrieving revision 1.67 diff -C2 -d -r1.66 -r1.67 *** CHANGELOG 13 Nov 2005 18:57:52 -0000 1.66 --- CHANGELOG 21 Nov 2005 22:33:33 -0000 1.67 *************** *** 6,9 **** --- 6,19 ---- Win32-GUI ChangeLog =================== + + [Robert May] : 21 Nov 2003 - 1.03 release candidate + - t\05_Timer_*.t change interval test to use milli-seconds using + Win32::GetTickCount() rather than time(). + -t\01_basic.t add tests for Test::More availability and correct OS. + -t\98_Pod.t new test of POD syntax + - various minor documentation edits to correct POD syntax + -Makefile.PL added test for presence of compiler to stop us failing CPAN + Smoke tests in test environments with no compilers. + - Up version to 1.03 + + [Robert May] : 13 Nov 2005 - Bug fixes and preparing for 1.03 release - Makefile.PL added code to remove Test::More dependence from PPD Index: MANIFEST =================================================================== RCS file: /cvsroot/perl-win32-gui/Win32-GUI/MANIFEST,v retrieving revision 1.10 retrieving revision 1.11 diff -C2 -d -r1.10 -r1.11 *** MANIFEST 13 Nov 2005 18:57:52 -0000 1.10 --- MANIFEST 21 Nov 2005 22:33:33 -0000 1.11 *************** *** 124,127 **** --- 124,128 ---- t/50_Font_GetMetrics.t t/50_Richedit_GetCharFormat.t + t/98_Pod.t TabStrip.xs Textfield.xs Index: Readme =================================================================== RCS file: /cvsroot/perl-win32-gui/Win32-GUI/Readme,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** Readme 10 Jul 2005 11:24:29 -0000 1.3 --- Readme 21 Nov 2005 22:33:33 -0000 1.4 *************** *** 14,21 **** AVAILABILITY ! This is the README file for Win32::GUI v1.02 built on 10 Jul 2005. Source and ActiveState Perl PPMs are available from ! <http://sourceforge.net/project/showfiles.php?group_id=16572>. A cygwin distribution (available through cygwin's setup.exe) is --- 14,21 ---- AVAILABILITY ! This is the README file for Win32::GUI v1.03 built on 21 Nov 2005. Source and ActiveState Perl PPMs are available from ! http://sourceforge.net/project/showfiles.php?group_id=16572. A cygwin distribution (available through cygwin's setup.exe) is *************** *** 58,62 **** Cygwin port questions to the mailinglist <cy...@cy...> ! Building from source Unpack the distribution into a local directory, and from a command --- 58,62 ---- Cygwin port questions to the mailinglist <cy...@cy...> ! Building from source Unpack the distribution into a local directory, and from a command *************** *** 67,135 **** environments are known to work: ! 1. Microsoft Visual C++ V6 ! Other versions may work. There are reported issues with VC++ 7 which ! links with a different C runtime to VC++ 6, and so you may have ! issues running an extension built with VC++ 7 with the ActiveState ! Perls. ! perl Makefle.PL ! nmake ! nmake test ! nmake install ! 2. MinGW and ExtUtils::FakeConfig ! perl -MConfig_m Makefile.PL ! nmake ! nmake test ! nmake install ! Built this way the GUI.dll extension can be very large (~3MB). There ! is a module in the build_tools directory that works with Config_m ! and Extutils::FakeConfig to set the MinGW compiler flags more ! optimally. If you want to try this, then replace the first command ! with: ! perl -Ibuild_tools -MConfig_mO Makefile.PL ! 3. Cygwin ! Build requirements (over and above the runtime requirements above): ! cygwin ! cygutils ! gcc ! make ! gzip ! Build instructions: ! unpack perl-Win32-GUI-1.0-2-src.tar.bz2. If you use setup to install ! this src package, it will be unpacked under /usr/src automatically. ! cd /usr/src ! ./perl-Win32-GUI-1.0-2.sh all ! This will create: ! /usr/src/perl-Win32-GUI-1.0-2.tar.bz2 ! /usr/src/perl-Win32-GUI-1.0-2-src.tar.bz2 ! Port Notes: ! The dll's must probably be rebased. If a remap error occurs run ! rebaseall from the rebase package. The packaged version is already ! rebased to my personal settings. ! For a source build from the official source, the standard build ! process should be sufficient: ! Perl Makefile.PL ! make ! make test ! make install ! Documentation - HTML documentation is included with the PPM distributions, and installed - into your ActiveState Perl documentation tree by the install process. When building from source the POD documentation is built automatically by the make process. It can also be generated by issuing: --- 67,136 ---- environments are known to work: ! Microsoft Visual C++ V6 ! Other versions may work. There are reported issues with VC++ 7 which ! links with a different C runtime to VC++ 6, and so you may have issues ! running an extension built with VC++ 7 with the ActiveState Perls. ! perl Makefle.PL ! nmake ! nmake test ! nmake install ! MinGW and ExtUtils::FakeConfig ! perl -MConfig_m Makefile.PL ! nmake ! nmake test ! nmake install ! Built this way the GUI.dll extension can be very large (~3MB). There is ! a module in the build_tools directory that works with Config_m and ! Extutils::FakeConfig to set the MinGW compiler flags more optimally. If ! you want to try this, then replace the first command with: ! perl -Ibuild_tools -MConfig_mO Makefile.PL ! Cygwin ! Build requirements (over and above the runtime requirements above): ! cygwin ! cygutils ! gcc ! make ! gzip ! Build instructions: ! unpack perl-Win32-GUI-X.XX-X-src.tar.bz2. If you use setup to install ! this src package, it will be unpacked under /usr/src automatically. ! cd /usr/src ! ./perl-Win32-GUI-X.XX-X.sh all ! This will create: ! /usr/src/perl-Win32-GUI-X.XX-X.tar.bz2 ! /usr/src/perl-Win32-GUI-X.XX-X-src.tar.bz2 ! Port Notes: ! The dll's must probably be rebased. If a remap error occurs run ! rebaseall from the rebase package. The packaged version is already ! rebased to my personal settings. ! ! For a source build from the official source, the standard build process ! should be sufficient: ! ! Perl Makefile.PL ! make ! make test ! make install ! ! Documentation ! ! POD documentation When building from source the POD documentation is built automatically by the make process. It can also be generated by issuing: *************** *** 137,145 **** nmake poddocs; ! The HTML documentation can be built by issuing: nmake htmldocs; ! Building your own PPM from source perl Makefile.PL (adjust as necessary for your build environment) --- 138,154 ---- nmake poddocs; ! HTML Documentation ! ! HTML documentation is included with the PPM distributions, and installed ! into your ActiveState Perl documentation tree by the install process. ! ! The HTML documentation can also be generated by issuing: nmake htmldocs; ! Building your own PPM from source ! ! You will need tar, gzip and zip utilities on your path. Issue the ! following commands. perl Makefile.PL (adjust as necessary for your build environment) *************** *** 148,158 **** nmake ppm ! You will need tar, gzip and zip utilities on your path. This procedure ! will generate a PPM for you current perl environment, including the HTML ! documentation, ready for installation as above. VERSION ! Documentation for Win32::GUI v1.02 created 10 Jul 2005 This document is autogenerated by the build process. Edits made here --- 157,166 ---- nmake ppm ! This procedure will generate a PPM for you current perl environment, ! including the HTML documentation, ready for installation as above. VERSION ! Documentation for Win32::GUI v1.03 created 21 Nov 2005 This document is autogenerated by the build process. Edits made here *************** *** 161,171 **** SUPPORT ! Homepage: <http://sourceforge.net/projects/perl-win32-gui/>. For further support join the users mailing ! list(per...@li...) from the website at ! <http://lists.sourceforge.net/lists/listinfo/perl-win32-gui-users>. ! There is a searchable list archive at ! <http://sourceforge.net/mail/?group_id=16572>. COPYRIGHT and LICENCE --- 169,179 ---- SUPPORT ! Homepage: http://perl-win32-gui.sourceforge.net/. For further support join the users mailing ! list("per...@li...") from the website at ! http://lists.sourceforge.net/lists/listinfo/perl-win32-gui-users. There ! is a searchable list archive at ! http://sourceforge.net/mail/?group_id=16572. COPYRIGHT and LICENCE Index: Readme.html =================================================================== RCS file: /cvsroot/perl-win32-gui/Win32-GUI/Readme.html,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** Readme.html 10 Jul 2005 11:24:29 -0000 1.3 --- Readme.html 21 Nov 2005 22:33:33 -0000 1.4 *************** *** 1,200 **** ! <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> ! <html xmlns="http://www.w3.org/1999/xhtml"> ! <head> ! <title>Win32::GUI::UserGuide::Readme - Perl-Win32 Graphical User Interface Extension README</title> ! <link rev="made" href="mailto:" /> ! </head> ! <body style="background-color: white"> ! <p><a name="__index__"></a></p> <!-- INDEX BEGIN --> ! <ul> ! <li><a href="#name">NAME</a></li> ! <li><a href="#description">DESCRIPTION</a></li> ! <li><a href="#availability">AVAILABILITY</a></li> ! <li><a href="#installing">INSTALLING</a></li> ! <ul> ! <li><a href="#activestate_activeperl_ppms">ActiveState ActivePerl PPMs</a></li> ! <li><a href="#cygwin">Cygwin</a></li> ! <li><a href="#building_from_source">Building from source</a></li> ! <li><a href="#documentation">Documentation</a></li> ! <li><a href="#building_your_own_ppm_from_source">Building your own PPM from source</a></li> ! </ul> ! <li><a href="#version">VERSION</a></li> ! <li><a href="#support">SUPPORT</a></li> ! <li><a href="#copyright_and_licence">COPYRIGHT and LICENCE</a></li> ! </ul> <!-- INDEX END --> ! <hr /> ! <p> ! </p> ! <h1><a name="name">NAME</a></h1> ! <p>Win32::GUI::UserGuide::Readme - Perl-Win32 Graphical User Interface Extension README</p> ! <p> ! </p> ! <hr /> ! <h1><a name="description">DESCRIPTION</a></h1> ! <p>Win32::GUI is a Win32-platform native graphical user interface toolkit for perl. Basically, it's an XS implementation of most of the functions found in user32.dll and gdi32.dll, with an object oriented perl interface and an ! event-based dialog model that mimic the functionality of visual basic.</p> ! <p> ! </p> ! <hr /> ! <h1><a name="availability">AVAILABILITY</a></h1> ! <p>This is the README file for Win32::GUI v1.02 ! built on 10 Jul 2005.</p> ! <p>Source and ActiveState Perl PPMs are available from ! <a href="http://sourceforge.net/project/showfiles.php?group_id=16572">http://sourceforge.net/project/showfiles.php</a>.</p> ! <p>A cygwin distribution (available through cygwin's setup.exe) is maintained ! by Reini Urban (<a href="mailto:ru...@x-...">ru...@x-...</a>)</p> ! <p>If the Win32::GUI version number contains an underscore, then it is an alpha, beta or release candidate distribution. If there is no such underscore, then ! it is a stable release.</p> ! <p> ! </p> ! <hr /> ! <h1><a name="installing">INSTALLING</a></h1> ! <p> ! </p> ! <h2><a name="activestate_activeperl_ppms">ActiveState ActivePerl PPMs</a></h2> ! <p>It is recommended to uninstall any previous version of Win32::GUI before installing a new version. This ensures old documentation is removed correctly. ! From a command prompt run:</p> ! <pre> ! ppm uninstall Win32-GUI</pre> ! <p>If you have any packages that are dependent on Win32::GUI you may need to add ! the <code>-force</code> option to the command line. See your documentation for PPM.</p> ! <p>Unzip the PPM distribution into a local directory. From a command ! prompt in that directory run:</p> ! <pre> ! ppm install ./Win32-GUI.ppd</pre> ! <p> ! </p> ! <h2><a name="cygwin">Cygwin</a></h2> ! <p>Runtime requirements:</p> ! <pre> cygwin perl-5.8.6 ! w32api</pre> ! <p>Use the cygwin setup.exe tool to locate, download and install ! the perl-Win32-GUI binary package.</p> ! <p>Cygwin port questions to the mailinglist <<a href="mailto:cy...@cy...">cy...@cy...</a>></p> ! <p> ! </p> ! <h2><a name="building_from_source">Building from source</a></h2> ! <p>Unpack the distribution into a local directory, and from a command ! prompt in that directory follow the instructions below.</p> ! <p>These instructions assume that you have already set up your build environment, and can build source distributions. The following ! environments are known to work:</p> ! <ol> ! <li><strong><a name="item_microsoft_visual_c_2b_2b_v6">Microsoft Visual C++ V6</a></strong><br /> ! </li> ! Other versions may work. There are reported issues with VC++ 7 which links with a different C runtime to VC++ 6, and so you may have ! issues running an extension built with VC++ 7 with the ActiveState Perls. ! <pre> perl Makefle.PL nmake nmake test ! nmake install</pre> ! <p></p> ! <li><strong><a name="item_mingw_and_extutils_3a_3afakeconfig">MinGW and ExtUtils::FakeConfig</a></strong><br /> ! </li> ! <pre> perl -MConfig_m Makefile.PL nmake nmake test ! nmake install</pre> ! <p>Built this way the GUI.dll extension can be very large (~3MB). There is a ! module in the <em>build_tools</em> directory that works with <strong>Config_m</strong> and ! <a href="/ExtUtils/FakeConfig.html">Extutils::FakeConfig</a> to set the MinGW compiler flags more optimally. If you want to try this, then replace the first ! command with:</p> ! <pre> ! perl -Ibuild_tools -MConfig_mO Makefile.PL</pre> ! <li><strong><a name="item_cygwin">Cygwin</a></strong><br /> ! </li> ! Build requirements (over and above the runtime requirements above): ! <pre> cygwin cygutils gcc make ! gzip</pre> ! <p>Build instructions:</p> ! <p>unpack <em>perl-Win32-GUI-1.0-2-src.tar.bz2</em>. If you use setup to install ! this src package, it will be unpacked under <em>/usr/src</em> automatically.</p> ! <pre> cd /usr/src ! ./perl-Win32-GUI-1.0-2.sh all</pre> ! <p>This will create:</p> ! <pre> ! /usr/src/perl-Win32-GUI-1.0-2.tar.bz2 ! /usr/src/perl-Win32-GUI-1.0-2-src.tar.bz2</pre> ! <p>Port Notes:</p> ! <p>The dll's must probably be rebased. If a remap error occurs run rebaseall from ! the rebase package. The packaged version is already rebased to my personal settings.</p> ! <p>For a source build from the official source, the standard build process ! should be sufficient:</p> ! <pre> Perl Makefile.PL make make test ! make install</pre> ! <p></p></ol> ! <p> ! </p> ! <h2><a name="documentation">Documentation</a></h2> ! <p>HTML documentation is included with the PPM distributions, and installed ! into your ActiveState Perl documentation tree by the install process. ! When building from source the POD documentation is built automatically ! by the make process. It can also be generated by issuing:</p> ! <pre> ! nmake poddocs;</pre> ! <p>The HTML documentation can be built by issuing:</p> ! <pre> ! nmake htmldocs;</pre> ! <p> ! </p> ! <h2><a name="building_your_own_ppm_from_source">Building your own PPM from source</a></h2> ! <pre> perl Makefile.PL (adjust as necessary for your build environment) nmake nmake test ! nmake ppm</pre> ! <p>You will need <strong>tar</strong>, <strong>gzip</strong> and <strong>zip</strong> utilities on your path. This procedure ! will generate a PPM for you current perl environment, including the HTML ! documentation, ready for installation as above.</p> ! <p> ! </p> ! <hr /> ! <h1><a name="version">VERSION</a></h1> ! <p>Documentation for Win32::GUI v1.02 created 10 Jul 2005</p> ! <p>This document is autogenerated by the build process. Edits made here will be lost. ! Edit <em>docs/GUI/UserGuide/Readme.pod</em> instead.</p> ! <p> ! </p> ! <hr /> ! <h1><a name="support">SUPPORT</a></h1> ! <p>Homepage: <a href="http://sourceforge.net/projects/perl-win32-gui/">http://sourceforge.net/projects/perl-win32-gui/</a>.</p> ! <p>For further support join the users mailing <code>list(per...@li...)</code> from the website ! at <a href="http://lists.sourceforge.net/lists/listinfo/perl-win32-gui-users">http://lists.sourceforge.net/lists/listinfo/perl-win32-gui-users</a>. There is a searchable list archive at <a href="http://sourceforge.net/mail/?group_id=16572">http://sourceforge.net/mail/</a>.</p> ! <p> ! </p> ! <hr /> ! <h1><a name="copyright_and_licence">COPYRIGHT and LICENCE</a></h1> ! <p>Copyright (c) 1997..2005 Aldo Calpini. All rights reserved.</p> ! <p>This program is free software; you can redistribute it and/or ! modify it under the same terms as Perl itself.</p> ! </body> ! </html> --- 1,205 ---- ! <HTML> ! <HEAD> ! <TITLE>Win32::GUI::UserGuide::Readme - Perl-Win32 Graphical User Interface Extension README</TITLE> ! <LINK REV="made" HREF="mailto:"> ! </HEAD> ! <BODY> ! <A NAME="__index__"></A> <!-- INDEX BEGIN --> ! <UL> ! <LI><A HREF="#name">NAME</A></LI> ! <LI><A HREF="#description">DESCRIPTION</A></LI> ! <LI><A HREF="#availability">AVAILABILITY</A></LI> ! <LI><A HREF="#installing">INSTALLING</A></LI> ! <UL> ! <LI><A HREF="#activestate activeperl ppms">ActiveState ActivePerl PPMs</A></LI> ! <LI><A HREF="#cygwin">Cygwin</A></LI> ! </UL> ! <LI><A HREF="#building from source">Building from source</A></LI> ! <UL> ! ! <LI><A HREF="#microsoft visual c++ v6">Microsoft Visual C++ V6</A></LI> ! <LI><A HREF="#mingw and extutils::fakeconfig">MinGW and ExtUtils::FakeConfig</A></LI> ! <LI><A HREF="#cygwin">Cygwin</A></LI> ! </UL> ! ! <LI><A HREF="#documentation">Documentation</A></LI> ! <UL> ! ! <LI><A HREF="#pod documentation">POD documentation</A></LI> ! <LI><A HREF="#html documentation">HTML Documentation</A></LI> ! </UL> ! ! <LI><A HREF="#building your own ppm from source">Building your own PPM from source</A></LI> ! <LI><A HREF="#version">VERSION</A></LI> ! <LI><A HREF="#support">SUPPORT</A></LI> ! <LI><A HREF="#copyright and licence">COPYRIGHT and LICENCE</A></LI> ! </UL> <!-- INDEX END --> ! <HR> ! <P> ! <H1><A NAME="name">NAME</A></H1> ! <P>Win32::GUI::UserGuide::Readme - Perl-Win32 Graphical User Interface Extension README</P> ! <P> ! <HR> ! <H1><A NAME="description">DESCRIPTION</A></H1> ! <P>Win32::GUI is a Win32-platform native graphical user interface toolkit for perl. Basically, it's an XS implementation of most of the functions found in user32.dll and gdi32.dll, with an object oriented perl interface and an ! event-based dialog model that mimic the functionality of visual basic.</P> ! <P> ! <HR> ! <H1><A NAME="availability">AVAILABILITY</A></H1> ! <P>This is the README file for Win32::GUI v1.03 ! built on 21 Nov 2005.</P> ! <P>Source and ActiveState Perl PPMs are available from ! <A HREF="http://sourceforge.net/project/showfiles.php?group_id=16572">http://sourceforge.net/project/showfiles.php</A>.</P> ! <P>A cygwin distribution (available through cygwin's setup.exe) is maintained ! by Reini Urban (<A HREF="mailto:ru...@x-...">ru...@x-...</A>)</P> ! <P>If the Win32::GUI version number contains an underscore, then it is an alpha, beta or release candidate distribution. If there is no such underscore, then ! it is a stable release.</P> ! <P> ! <HR> ! <H1><A NAME="installing">INSTALLING</A></H1> ! <P> ! <H2><A NAME="activestate activeperl ppms">ActiveState ActivePerl PPMs</A></H2> ! <P>It is recommended to uninstall any previous version of Win32::GUI before installing a new version. This ensures old documentation is removed correctly. ! From a command prompt run:</P> ! <PRE> ! ppm uninstall Win32-GUI</PRE> ! <P>If you have any packages that are dependent on Win32::GUI you may need to add ! the <CODE>-force</CODE> option to the command line. See your documentation for PPM.</P> ! <P>Unzip the PPM distribution into a local directory. From a command ! prompt in that directory run:</P> ! <PRE> ! ppm install ./Win32-GUI.ppd</PRE> ! <P> ! <H2><A NAME="cygwin">Cygwin</A></H2> ! <P>Runtime requirements:</P> ! <PRE> cygwin perl-5.8.6 ! w32api</PRE> ! <P>Use the cygwin setup.exe tool to locate, download and install ! the perl-Win32-GUI binary package.</P> ! <P>Cygwin port questions to the mailinglist <<A HREF="mailto:cy...@cy...">cy...@cy...</A>></P> ! <P> ! <HR> ! <H1><A NAME="building from source">Building from source</A></H1> ! <P>Unpack the distribution into a local directory, and from a command ! prompt in that directory follow the instructions below.</P> ! <P>These instructions assume that you have already set up your build environment, and can build source distributions. The following ! environments are known to work:</P> ! <P> ! <H2><A NAME="microsoft visual c++ v6">Microsoft Visual C++ V6</A></H2> ! <P>Other versions may work. There are reported issues with VC++ 7 which links with a different C runtime to VC++ 6, and so you may have ! issues running an extension built with VC++ 7 with the ActiveState Perls.</P> ! <PRE> perl Makefle.PL nmake nmake test ! nmake install</PRE> ! <P> ! <H2><A NAME="mingw and extutils::fakeconfig">MinGW and ExtUtils::FakeConfig</A></H2> ! <PRE> perl -MConfig_m Makefile.PL nmake nmake test ! nmake install</PRE> ! <P>Built this way the GUI.dll extension can be very large (~3MB). There is a ! module in the <EM>build_tools</EM> directory that works with <STRONG>Config_m</STRONG> and ! <A HREF="/ExtUtils/FakeConfig.html">Extutils::FakeConfig</A> to set the MinGW compiler flags more optimally. If you want to try this, then replace the first ! command with:</P> ! <PRE> ! perl -Ibuild_tools -MConfig_mO Makefile.PL</PRE> ! <P> ! <H2><A NAME="cygwin">Cygwin</A></H2> ! <P>Build requirements (over and above the runtime requirements above):</P> ! <PRE> cygwin cygutils gcc make ! gzip</PRE> ! <P>Build instructions:</P> ! <P>unpack <EM>perl-Win32-GUI-X.XX-X-src.tar.bz2</EM>. If you use setup to install ! this src package, it will be unpacked under <EM>/usr/src</EM> automatically.</P> ! <PRE> cd /usr/src ! ./perl-Win32-GUI-X.XX-X.sh all</PRE> ! <P>This will create:</P> ! <PRE> ! /usr/src/perl-Win32-GUI-X.XX-X.tar.bz2 ! /usr/src/perl-Win32-GUI-X.XX-X-src.tar.bz2</PRE> ! <P>Port Notes:</P> ! <P>The dll's must probably be rebased. If a remap error occurs run rebaseall from ! the rebase package. The packaged version is already rebased to my personal settings.</P> ! <P>For a source build from the official source, the standard build process ! should be sufficient:</P> ! <PRE> Perl Makefile.PL make make test ! make install</PRE> ! <P> ! <HR> ! <H1><A NAME="documentation">Documentation</A></H1> ! <P> ! <H2><A NAME="pod documentation">POD documentation</A></H2> ! <P>When building from source the POD documentation is built automatically ! by the make process. It can also be generated by issuing:</P> ! <PRE> ! nmake poddocs;</PRE> ! <P> ! <H2><A NAME="html documentation">HTML Documentation</A></H2> ! <P>HTML documentation is included with the PPM distributions, and installed ! into your ActiveState Perl documentation tree by the install process.</P> ! <P>The HTML documentation can also be generated by issuing:</P> ! <PRE> ! nmake htmldocs;</PRE> ! <P> ! <HR> ! <H1><A NAME="building your own ppm from source">Building your own PPM from source</A></H1> ! <P>You will need <STRONG>tar</STRONG>, <STRONG>gzip</STRONG> and <STRONG>zip</STRONG> utilities on your path. Issue ! the following commands.</P> ! <PRE> perl Makefile.PL (adjust as necessary for your build environment) nmake nmake test ! nmake ppm</PRE> ! <P>This procedure will generate a PPM for you current perl environment, ! including the HTML documentation, ready for installation as above.</P> ! <P> ! <HR> ! <H1><A NAME="version">VERSION</A></H1> ! <P>Documentation for Win32::GUI v1.03 created 21 Nov 2005</P> ! <P>This document is autogenerated by the build process. Edits made here will be lost. ! Edit <EM>docs/GUI/UserGuide/Readme.pod</EM> instead.</P> ! <P> ! <HR> ! <H1><A NAME="support">SUPPORT</A></H1> ! <P>Homepage: <A HREF="http://perl-win32-gui.sourceforge.net/">http://perl-win32-gui.sourceforge.net/</A>.</P> ! <P>For further support join the users mailing list(<CODE>per...@li...</CODE>) from the website ! at <A HREF="http://lists.sourceforge.net/lists/listinfo/perl-win32-gui-users">http://lists.sourceforge.net/lists/listinfo/perl-win32-gui-users</A>. There is a searchable list archive at <A HREF="http://sourceforge.net/mail/?group_id=16572">http://sourceforge.net/mail/</A>.</P> ! <P> ! <HR> ! <H1><A NAME="copyright and licence">COPYRIGHT and LICENCE</A></H1> ! <P>Copyright (c) 1997..2005 Aldo Calpini. All rights reserved.</P> ! <P>This program is free software; you can redistribute it and/or ! modify it under the same terms as Perl itself.</P> ! </BODY> ! </HTML> Index: TODO =================================================================== RCS file: /cvsroot/perl-win32-gui/Win32-GUI/TODO,v retrieving revision 1.13 retrieving revision 1.14 diff -C2 -d -r1.13 -r1.14 *** TODO 13 Nov 2005 18:57:52 -0000 1.13 --- TODO 21 Nov 2005 22:33:33 -0000 1.14 *************** *** 40,44 **** to turn off Win32::GUI warnings. (see -DW32G_NEWWARN) ! - Makefile.PL. Add code to fail at Makefile.PL stage if the chosen compiler ! is not available, and we autodetected from $Config{cc}. This will prevent us getting ! FAILS from the CPAN Smoke test machines that have no compiler. --- 40,45 ---- to turn off Win32::GUI warnings. (see -DW32G_NEWWARN) ! - Get everything to run under strictures and warnings. ! ! - Start to split into smaller, more manageable pieces - hopefully this might make it ! easier to add tests. Look at moving code out of XS and into Perl? |
From: Robert M. <rob...@us...> - 2005-11-21 22:33:43
|
Update of /cvsroot/perl-win32-gui/Win32-GUI/t In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv1048/t Modified Files: 01_basic.t 05_Timer_01_OEM.t 05_Timer_02_NEM.t 05_Timer_03_Interval.t Added Files: 98_Pod.t Log Message: Tests and 1.03 release candidate Index: 01_basic.t =================================================================== RCS file: /cvsroot/perl-win32-gui/Win32-GUI/t/01_basic.t,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** 01_basic.t 3 Aug 2005 21:45:59 -0000 1.2 --- 01_basic.t 21 Nov 2005 22:33:34 -0000 1.3 *************** *** 12,27 **** BEGIN { $| = 1 } # Autoflush - use Test::More tests => 2; - # Perform tests ! # Check tha Win32::GUI load, and bail out of all ! # tests if it doesn't ! BEGIN { ! use_ok('Win32::GUI') ! or print STDOUT "Bail out! Can't load Win32::GUI"; ! }; ! ok($Win32::GUI::VERSION, "Win32::GUI version check"); --- 12,43 ---- BEGIN { $| = 1 } # Autoflush # Perform tests ! # Bail out if we havent got Test::More ! eval "use Test::More"; ! if($@) { ! # As we haven't got Test::More, can't use diag() ! print "#\n# Test::More required to perform any Win32::GUI test\n"; ! chomp $@; ! $@ =~ s/^/# /gm; ! print "$@\n"; ! print "Bail Out! Test::More not available\n"; ! exit(1); ! } + plan( tests => 3 ); ! # Check that we're on windows or cygwin ! # bail out if we're not ! if ( not ($^O =~ /MSwin32|cygwin/i)) { ! diag("\nWin32::GUI can only run on MSWin32 or cygwin, not '$^O'"); ! print "Bail out! Incompatible Operating System\n"; ! } ! pass("Correct OS"); ! ! # Check that Win32::GUI loads, and bail out of all ! # tests if it doesn't ! use_ok('Win32::GUI') or print STDOUT "Bail out! Can't load Win32::GUI"; ! ! ok(defined $Win32::GUI::VERSION, "Win32::GUI version check"); Index: 05_Timer_01_OEM.t =================================================================== RCS file: /cvsroot/perl-win32-gui/Win32-GUI/t/05_Timer_01_OEM.t,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** 05_Timer_01_OEM.t 13 Nov 2005 18:57:52 -0000 1.1 --- 05_Timer_01_OEM.t 21 Nov 2005 22:33:34 -0000 1.2 *************** *** 23,27 **** my @times; - my $t0 = time; my $W = new Win32::GUI::Window( --- 23,26 ---- *************** *** 30,33 **** --- 29,33 ---- isa_ok($W, "Win32::GUI::Window", "\$W"); + my $t0 = Win32::GetTickCount(); my $C = $W->AddTimer('T1', $elapse); isa_ok($C,$class, "\$W->AddTimer creats $class object"); *************** *** 48,58 **** is(scalar(@times), 3, "Timer went off 3 times"); for my $interval (@times) { ! ok(($interval <= 1) && ($interval >= 0), "Timer interval(${interval}s) appropriate"); } sub T1_Timer { ! my $t1 = time; push @times, ($t1 - $t0); $t0 = $t1; --- 48,59 ---- is(scalar(@times), 3, "Timer went off 3 times"); + my $delta = 150; #ms for my $interval (@times) { ! ok((abs($interval - $elapse) < $delta), "Timer interval(${interval}ms) appropriate"); } sub T1_Timer { ! my $t1 = Win32::GetTickCount(); push @times, ($t1 - $t0); $t0 = $t1; --- NEW FILE: 98_Pod.t --- #!perl -wT # Win32::GUI test suite. # $Id: 98_Pod.t,v 1.1 2005/11/21 22:33:34 robertemay Exp $ # Testing RichEdit::GetCharFormat() use strict; use warnings; BEGIN { $| = 1 } # Autoflush use Test::More; eval "use Test::Pod 1.14"; plan skip_all => "Test::Pod 1.14 required for testing POD" if $@; all_pod_files_ok(); Index: 05_Timer_02_NEM.t =================================================================== RCS file: /cvsroot/perl-win32-gui/Win32-GUI/t/05_Timer_02_NEM.t,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** 05_Timer_02_NEM.t 13 Nov 2005 18:57:52 -0000 1.1 --- 05_Timer_02_NEM.t 21 Nov 2005 22:33:34 -0000 1.2 *************** *** 24,28 **** my %params; - my $t0 = time; my $W = new Win32::GUI::Window( --- 24,27 ---- *************** *** 32,35 **** --- 31,35 ---- isa_ok($W, "Win32::GUI::Window", "\$W"); + my $t0 = Win32::GetTickCount(); my $C = $W->AddTimer('T1', $elapse); isa_ok($C,$class, "\$W->AddTimer creats $class object"); *************** *** 50,55 **** is(scalar(@times), 3, "Timer went off 3 times"); for my $interval (@times) { ! ok(($interval <= 1) && ($interval >= 0), "Timer interval(${interval}s) appropriate"); } @times=(); --- 50,56 ---- is(scalar(@times), 3, "Timer went off 3 times"); + my $delta = 150; #ms for my $interval (@times) { ! ok((abs($interval - $elapse) < $delta), "Timer interval(${interval}ms) appropriate"); } @times=(); *************** *** 64,68 **** $params{name} = shift; ! my $t1 = time; push @times, ($t1 - $t0); $t0 = $t1; --- 65,69 ---- $params{name} = shift; ! my $t1 = Win32::GetTickCount(); push @times, ($t1 - $t0); $t0 = $t1; Index: 05_Timer_03_Interval.t =================================================================== RCS file: /cvsroot/perl-win32-gui/Win32-GUI/t/05_Timer_03_Interval.t,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** 05_Timer_03_Interval.t 13 Nov 2005 18:57:52 -0000 1.1 --- 05_Timer_03_Interval.t 21 Nov 2005 22:33:34 -0000 1.2 *************** *** 23,32 **** my @times; - my $t0 = time; - my $W = new Win32::GUI::Window( -name => "TestWindow", -onTimer => \&_process_timer, ); my $C = $W->AddTimer('T1', $elapse); --- 23,31 ---- my @times; my $W = new Win32::GUI::Window( -name => "TestWindow", -onTimer => \&_process_timer, ); + my $t0 = Win32::GetTickCount(); my $C = $W->AddTimer('T1', $elapse); *************** *** 37,42 **** is(scalar(@times), 3, "Timer went off 3 times"); for my $interval (@times) { ! ok(($interval <= 1) && ($interval >= 0), "Timer interval(${interval}s) appropriate"); } --- 36,42 ---- is(scalar(@times), 3, "Timer went off 3 times"); + my $delta = 150; #ms for my $interval (@times) { ! ok((abs($interval - $elapse) < $delta), "Timer interval(${interval}ms) appropriate"); } *************** *** 49,58 **** is(scalar(@times), 3, "Timer went off 3 times"); for my $interval (@times) { ! ok(($interval <= 2) && ($interval >= 0), "Timer interval(${interval}s) appropriate"); } sub _process_timer { ! my $t1 = time; push @times, ($t1 - $t0); $t0 = $t1; --- 49,58 ---- is(scalar(@times), 3, "Timer went off 3 times"); for my $interval (@times) { ! ok((abs($interval-($elapse+500)) < $delta), "Timer interval(${interval}ms) appropriate"); } sub _process_timer { ! my $t1 = Win32::GetTickCount(); push @times, ($t1 - $t0); $t0 = $t1; |
From: Robert M. <rob...@us...> - 2005-11-21 22:33:41
|
Update of /cvsroot/perl-win32-gui/Win32-GUI/docs/GUI/UserGuide In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv1048/docs/GUI/UserGuide Modified Files: Readme.pod Log Message: Tests and 1.03 release candidate Index: Readme.pod =================================================================== RCS file: /cvsroot/perl-win32-gui/Win32-GUI/docs/GUI/UserGuide/Readme.pod,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** Readme.pod 13 Nov 2005 18:57:52 -0000 1.4 --- Readme.pod 21 Nov 2005 22:33:34 -0000 1.5 *************** *** 106,119 **** Build instructions: ! unpack F<perl-Win32-GUI-1.0-2-src.tar.bz2>. If you use setup to install this src package, it will be unpacked under F</usr/src> automatically. cd /usr/src ! ./perl-Win32-GUI-1.0-2.sh all This will create: ! /usr/src/perl-Win32-GUI-1.0-2.tar.bz2 ! /usr/src/perl-Win32-GUI-1.0-2-src.tar.bz2 Port Notes: --- 106,119 ---- Build instructions: ! unpack F<perl-Win32-GUI-X.XX-X-src.tar.bz2>. If you use setup to install this src package, it will be unpacked under F</usr/src> automatically. cd /usr/src ! ./perl-Win32-GUI-X.XX-X.sh all This will create: ! /usr/src/perl-Win32-GUI-X.XX-X.tar.bz2 ! /usr/src/perl-Win32-GUI-X.XX-X-src.tar.bz2 Port Notes: *************** *** 144,148 **** into your ActiveState Perl documentation tree by the install process. ! The HTML documentation can be built by issuing: nmake htmldocs; --- 144,148 ---- into your ActiveState Perl documentation tree by the install process. ! The HTML documentation can also be generated by issuing: nmake htmldocs; |
From: Robert M. <rob...@us...> - 2005-11-21 22:33:41
|
Update of /cvsroot/perl-win32-gui/Win32-GUI/docs/GUI/Reference In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv1048/docs/GUI/Reference Modified Files: Packages_package.tpl Log Message: Tests and 1.03 release candidate Index: Packages_package.tpl =================================================================== RCS file: /cvsroot/perl-win32-gui/Win32-GUI/docs/GUI/Reference/Packages_package.tpl,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** Packages_package.tpl 26 Jun 2005 16:41:00 -0000 1.1 --- Packages_package.tpl 21 Nov 2005 22:33:34 -0000 1.2 *************** *** 1,4 **** - =for comment $Id$ - =item L<__W32G_PKGNAME__|__W32G_PKGLINK__> --- 1,3 ---- =item L<__W32G_PKGNAME__|__W32G_PKGLINK__> + =for comment $Id$ |
From: Robert M. <rob...@us...> - 2005-11-13 18:58:00
|
Update of /cvsroot/perl-win32-gui/Win32-GUI In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv24631 Modified Files: CHANGELOG GUI.pm GUI.xs GUI_MessageLoops.cpp MANIFEST Makefile.PL TODO Window.xs Log Message: Bug fixes; re-work of WIn32::GUI::Timer; preparing for 1.03 release Index: GUI.xs =================================================================== RCS file: /cvsroot/perl-win32-gui/Win32-GUI/GUI.xs,v retrieving revision 1.45 retrieving revision 1.46 diff -C2 -d -r1.45 -r1.46 *** GUI.xs 5 Oct 2005 22:20:48 -0000 1.45 --- GUI.xs 13 Nov 2005 18:57:52 -0000 1.46 *************** *** 43,60 **** ########################################################################## # (@)METHOD:GetAsyncKeyState(key) ! # Retrieve the status of the specified virtual key. The status ! # specifies whether the key is up, down, or toggled (on, off-- ! # alternating each time the key is pressed). # ! # keyCode -- If a..z0..9, use the ASCII code. Otherwise, use # a virtual key code. Example: VK_SHIFT # # Return 1 if the key is depressed, 0 if it's not. - # LONG GetAsyncKeyState(key) int key CODE: ! RETVAL = GetAsyncKeyState(key) & 1; OUTPUT: RETVAL --- 43,58 ---- ########################################################################## # (@)METHOD:GetAsyncKeyState(key) ! # Retrieve the status of the specified virtual key at the time the function ! # is called. The status specifies whether the key is up or down. # ! # keyCode -- If A..Z0..9, use the ASCII code. Otherwise, use # a virtual key code. Example: VK_SHIFT # # Return 1 if the key is depressed, 0 if it's not. LONG GetAsyncKeyState(key) int key CODE: ! RETVAL = (GetAsyncKeyState(key) & 0x8000) >>16; OUTPUT: RETVAL *************** *** 1627,1630 **** --- 1625,1652 ---- XSRETURN_UNDEF; } + + ########################################################################### + # (@)INTERNAL:GetWindowObject() + # Returns the perl window object from a window handle. If the window handle + # passed is a handle to a window created by Win32::GUI, returns the perl + # object reference, else returns undef. + void + GetWindowObject(handle) + HWND handle + PREINIT: + SV* SvObject; + PPCODE: + if (IsWindow(handle)) { + SvObject = SV_SELF_FROM_WINDOW(handle); + if (SvObject != NULL && SvROK(SvObject)) { + XPUSHs(SvObject); + } + else { + XSRETURN_UNDEF; + } + } + else { + XSRETURN_UNDEF; + } ########################################################################### Index: Makefile.PL =================================================================== RCS file: /cvsroot/perl-win32-gui/Win32-GUI/Makefile.PL,v retrieving revision 1.13 retrieving revision 1.14 diff -C2 -d -r1.13 -r1.14 *** Makefile.PL 5 Oct 2005 22:20:49 -0000 1.13 --- Makefile.PL 13 Nov 2005 18:57:52 -0000 1.14 *************** *** 234,237 **** --- 234,248 ---- } + # Remove the Test-More dependency from the PPD file, as it is not + # a requirement for a binary distribution + sub ppd { + my $inherited = shift->SUPER::ppd(@_); + #perl 5.6 + $inherited =~ s/qq\{\\t\\t<DEPENDENCY NAME=.*Test-More.*?\}\.//s; + #perl 5.8 + $inherited =~ s/^.*DEPENDENCY.*Test-More.*$//m; + return $inherited; + } + # In the following here-doc fragments, ensure that command lines are indented with TAB # and not space for gnu-make compatibility (cygwin) Index: GUI.pm =================================================================== RCS file: /cvsroot/perl-win32-gui/Win32-GUI/GUI.pm,v retrieving revision 1.33 retrieving revision 1.34 diff -C2 -d -r1.33 -r1.34 *** GUI.pm 5 Oct 2005 22:20:48 -0000 1.33 --- GUI.pm 13 Nov 2005 18:57:52 -0000 1.34 *************** *** 25,29 **** # STATIC OBJECT PROPERTIES # ! $VERSION = "1.02_02"; # For MakeMaker $XS_VERSION = $VERSION; # For dynaloader $VERSION = eval $VERSION; # For Perl (see perldoc perlmodstyle) --- 25,29 ---- # STATIC OBJECT PROPERTIES # ! $VERSION = "1.02_03"; # For MakeMaker $XS_VERSION = $VERSION; # For dynaloader $VERSION = eval $VERSION; # For Perl (see perldoc perlmodstyle) *************** *** 2612,2622 **** # The triggered NEM event is defined as -onTimer => sub{} method of the parent window. package Win32::GUI::Timer; - @ISA = qw(Win32::GUI); ########################################################################### ! # (@)METHOD:new Win32::GUI::Timer(PARENT, NAME, ELAPSE) # Creates a new timer in the PARENT window named NAME that will # trigger its Timer() event after ELAPSE milliseconds. # Can also be called as PARENT->AddTimer(NAME, ELAPSE). sub new { my $class = shift; --- 2612,2632 ---- # The triggered NEM event is defined as -onTimer => sub{} method of the parent window. package Win32::GUI::Timer; ########################################################################### ! # (@)METHOD:new Win32::GUI::Timer(PARENT, [NAME, [ELAPSE]]) # Creates a new timer in the PARENT window named NAME that will # trigger its Timer() event after ELAPSE milliseconds. # Can also be called as PARENT->AddTimer(NAME, ELAPSE). + # + # If NAME is not supplied, then an internal name will be allocated. + # + # ELAPSE must by an integer greater than or equal to zero. If ELAPSE + # is 0, then the timer object is created, but the timer will be disabled. + # You can then start the timer by calling the L<Interval()|/Interval> method + # and setting ELAPSE to a non-zero number. If ELASPE is not supplied, then + # 0 will be used. + # + # Note: Different OS versions might change too low or large intervals for ELAPSE + # to more appropriate values. E.g. > 0x7fffffff or < 10 sub new { my $class = shift; *************** *** 2629,2643 **** # Get a new Id ! $id = $Win32::GUI::TimerIdCounter; ! $Win32::GUI::TimerIdCounter++; # Force a name if havent. $name = "_Timer".$id unless defined $name; ! $elapse = 10 unless defined $elapse; my $self = {}; bless($self, $class); ! # add $self->{name} $self->{-id} = $id; $self->{-name} = $name; --- 2639,2658 ---- # Get a new Id ! $id = $Win32::GUI::TimerIdCounter++; # Force a name if havent. $name = "_Timer".$id unless defined $name; ! $elapse = 0 unless defined $elapse; ! ! # check $elapse ! if($elapse != int($elapse) or $elapse < 0) { ! warn qq(ELAPSE must be an integer greater than or equal to 0, not "$elapse". Using ELAPSE=0.); ! $elapse = 0; ! } my $self = {}; bless($self, $class); ! # store object propeties $self->{-id} = $id; $self->{-name} = $name; *************** *** 2645,2658 **** $self->{-interval} = $elapse; ! # Store name in timers hash $window->{-timers}->{$id} = $name; # Add Timer into parent hash. $window->{$name} = $self; - # Only if perl is circular ref-safe - if ($] > 5.006) { - $self->{-window} = \$window; - } ! Win32::GUI::SetTimer($window, $id, $elapse); return $self; --- 2660,2669 ---- $self->{-interval} = $elapse; ! # Store name in parent's timers hash $window->{-timers}->{$id} = $name; # Add Timer into parent hash. $window->{$name} = $self; ! Win32::GUI::SetTimer($window, $id, $elapse) if $elapse > 0; return $self; *************** *** 2662,2692 **** # (@)METHOD:Interval(ELAPSE) # Get or set the periodic timer interval. Unit: ms ! # When setting a new interval, the existing timer is reseted. # ! # Note: Different OS versions might change too low or large intervals to more ! # appropriate values. E.g. > 0x7fffffff or < 10 sub Interval { my $self = shift; ! my $interval = shift; ! if(defined $interval) { ! if (!$interval) { # match Win32::GUI::Tutorial::Part4 ! $self->Kill(); ! } else { ! Win32::GUI::SetTimer($self->{-handle}, $self->{-id}, $interval); ! $self->{-interval} = $interval; ! } } else { ! return $self->{-interval}; } } ########################################################################### ! # (@)METHOD:Kill() # Remove the periodic timer event. # ! # To use system resources efficiently, applications should DESTROY or Kill # timers that are no longer necessary. sub Kill { ! Win32::GUI::Timer::DESTROY(shift); } --- 2673,2729 ---- # (@)METHOD:Interval(ELAPSE) # Get or set the periodic timer interval. Unit: ms ! # When setting a new interval, any existing timer is reset. When setting ! # returns the previous interval. # ! # Setting ELAPSE to 0 suspends the timer (i.e. it will not fire timer events). ! # The timer can be restarted later by setting ELAPSE to a positive value. ! # ! # Note: Different OS versions might change too low or large intervals for ELAPSE ! # to more appropriate values. E.g. > 0x7fffffff or < 10 sub Interval { my $self = shift; ! my $elapse = shift; ! ! #Get ! return $self->{-interval} unless defined $elapse; ! ! my $previous = $self->{-interval}; ! # check $elapse ! if($elapse != int($elapse) or $elapse < 0) { ! warn qq(ELAPSE must be an integer greater than or equal to 0, not "$elapse". Using previous value($previous ms)); ! $elapse = $previous; ! } ! $self->{-interval} = $elapse; ! if ($elapse > 0) { # match Win32::GUI::Tutorial::Part4 ! Win32::GUI::SetTimer($self->{-handle}, $self->{-id}, $elapse); } else { ! Win32::GUI::KillTimer($self->{-handle}, $self->{-id}); } + + return $previous; } ########################################################################### ! # (@)METHOD:Kill([REMOVE=0]) # Remove the periodic timer event. # ! # Kill() with no parameters, or a False parameter suspends the timer, ! # exactly as $timer->Interval(0); In this case it return the previous ! # interval. ! # ! # Kill() with a True parameter will stop and remove all traces of the timer. ! # To use system resources efficiently, applications should Kill(1) # timers that are no longer necessary. sub Kill { ! my $self = shift; ! my $remove = shift; ! ! if($remove) { ! $self->DESTROY(); ! } ! else { ! return $self->Interval(0); ! } ! return undef; } *************** *** 2695,2712 **** sub DESTROY { my $self = shift; - if ( defined $self && - defined $self->{-handle} && - defined $self->{-id} ) { - # Kill timer - Win32::GUI::KillTimer($self->{-handle}, $self->{-id}); ! if (defined $self->{-window}) { ! my $window = ${$self->{-window}}; ! # Remove id from timers hash if not yet triggered ! delete $window->{-timers}->{$self->{-id}} ! if ref($window) and defined $window->{-timers}->{$self->{-id}}; ! # Remove name from parent ! delete $window->{$self->{-name}} if defined $window; ! } } } --- 2732,2748 ---- sub DESTROY { my $self = shift; ! # Kill timer ! Win32::GUI::KillTimer($self->{-handle}, $self->{-id}); ! ! # We put this code to tidy up the parent here, rather than ! # in Timer->Kill(1), so that we still tidy up, even in the ! # unlikely event of someone doing PARENT->{Timer name} = undef; ! my $window = Win32::GUI::GetWindowObject($self->{-handle}); ! if(defined $window) { ! # Remove id from -timers hash ! delete $window->{-timers}->{$self->{-id}}; ! # Remove name from parent ! delete $window->{$self->{-name}}; } } Index: CHANGELOG =================================================================== RCS file: /cvsroot/perl-win32-gui/Win32-GUI/CHANGELOG,v retrieving revision 1.65 retrieving revision 1.66 diff -C2 -d -r1.65 -r1.66 *** CHANGELOG 16 Oct 2005 08:03:19 -0000 1.65 --- CHANGELOG 13 Nov 2005 18:57:52 -0000 1.66 *************** *** 6,9 **** --- 6,25 ---- Win32-GUI ChangeLog =================== + + [Robert May] : 13 Nov 2005 - Bug fixes and preparing for 1.03 release + - Makefile.PL added code to remove Test::More dependence from PPD + - GUI_MessageLoops.cpp, Window.xs change all mouse related handlers to + use GET_X_LPARAM and GET_Y_LPARAM rather than HIWORD and LOWORD + (Tracker: 1262098) + - GUI.xs added INTERNAL function GetWindowObject to get the perl window + object from a window handle + - GUI.pm, t\05_Timer*.t, docs\GUI\Tutorial\Part4.pod - re-wrote + Win32::GUI::Timer implementation and updated docs to make it all + consistent, and to make destruction happen correctly. Added full tests + for the package. + - GUI.xs fixed GetAsyncKeyState(), which was checking the wrong bit of + window's return value. Updated documentation. + - MANIFEST updated with new samples and new tests + - GUI.pm upped version to 1.02_03 + + [Jeremy White] : Bug fix - not enough space malloc'ed for strings - Combobox.xs: added 1 to safemalloc Index: MANIFEST =================================================================== RCS file: /cvsroot/perl-win32-gui/Win32-GUI/MANIFEST,v retrieving revision 1.9 retrieving revision 1.10 diff -C2 -d -r1.9 -r1.10 *** MANIFEST 4 Aug 2005 22:57:34 -0000 1.9 --- MANIFEST 13 Nov 2005 18:57:52 -0000 1.10 *************** *** 68,71 **** --- 68,72 ---- MANIFEST.SKIP MDI.xs + META.yml MonthCal.xs NotifyIcon.xs *************** *** 82,86 **** --- 83,89 ---- samples/EventModel.pl samples/GetOpenFileName.pl + samples/guiperl.ico samples/harrow.cur + samples/listview_drag_drop.pl samples/MDI.pl samples/MonthCal.pl *************** *** 88,91 **** --- 91,110 ---- samples/Region.pl samples/SplashScreen.pl + samples/Tutorial_Part1_hello1.pl + samples/Tutorial_Part1_hello2.pl + samples/Tutorial_Part1_hello3.pl + samples/Tutorial_Part1_hello4.pl + samples/Tutorial_Part1_hello5.pl + samples/Tutorial_Part1_hello6.pl + samples/Tutorial_Part2_framework.pl + samples/Tutorial_Part3_DialogBox.pl + samples/Tutorial_Part4_NotifyIcon.pl + samples/Tutorial_Part4_StatusBar.pl + samples/Tutorial_Part4_timer.pl + samples/Tutorial_Part5_modalWindow.pl + samples/Tutorial_Part5_popupWindow1.pl + samples/Tutorial_Part5_popupWindow2.pl + samples/Tutorial_Part5_twoWindows.pl + samples/Tutorial_Part9_noDosWindow.pl Splitter.xs StatusBar.xs *************** *** 96,100 **** t/05_AcceleratorTable.t t/05_Menu.t ! t/05_Timer.t t/06_Cursor.t t/06_Icon.t --- 115,123 ---- t/05_AcceleratorTable.t t/05_Menu.t ! t/05_Timer_01_OEM.t ! t/05_Timer_02_NEM.t ! t/05_Timer_03_Interval.t ! t/05_Timer_04_Kill.t ! t/05_Timer_05_DESTROY.t t/06_Cursor.t t/06_Icon.t Index: Window.xs =================================================================== RCS file: /cvsroot/perl-win32-gui/Win32-GUI/Window.xs,v retrieving revision 1.9 retrieving revision 1.10 diff -C2 -d -r1.9 -r1.10 *** Window.xs 3 Aug 2005 21:45:58 -0000 1.9 --- Window.xs 13 Nov 2005 18:57:52 -0000 1.10 *************** *** 396,401 **** */ PerlResult = DoEvent(NOTXSCALL perlud, PERLWIN32GUI_NEM_CONTROL1, "LButtonDown", ! PERLWIN32GUI_ARGTYPE_LONG, LOWORD(lParam), ! PERLWIN32GUI_ARGTYPE_LONG, HIWORD(lParam), PERLWIN32GUI_ARGTYPE_LONG, wParam, -1); --- 396,401 ---- */ PerlResult = DoEvent(NOTXSCALL perlud, PERLWIN32GUI_NEM_CONTROL1, "LButtonDown", ! PERLWIN32GUI_ARGTYPE_LONG, GET_X_LPARAM(lParam), ! PERLWIN32GUI_ARGTYPE_LONG, GET_Y_LPARAM(lParam), PERLWIN32GUI_ARGTYPE_LONG, wParam, -1); *************** *** 408,413 **** */ PerlResult = DoEvent(NOTXSCALL perlud, PERLWIN32GUI_NEM_CONTROL2, "LButtonUp", ! PERLWIN32GUI_ARGTYPE_LONG, LOWORD(lParam), ! PERLWIN32GUI_ARGTYPE_LONG, HIWORD(lParam), PERLWIN32GUI_ARGTYPE_LONG, wParam, -1); --- 408,413 ---- */ PerlResult = DoEvent(NOTXSCALL perlud, PERLWIN32GUI_NEM_CONTROL2, "LButtonUp", ! PERLWIN32GUI_ARGTYPE_LONG, GET_X_LPARAM(lParam), ! PERLWIN32GUI_ARGTYPE_LONG, GET_Y_LPARAM(lParam), PERLWIN32GUI_ARGTYPE_LONG, wParam, -1); *************** *** 420,425 **** */ PerlResult = DoEvent(NOTXSCALL perlud, PERLWIN32GUI_NEM_CONTROL3, "RButtonDown", ! PERLWIN32GUI_ARGTYPE_LONG, LOWORD(lParam), ! PERLWIN32GUI_ARGTYPE_LONG, HIWORD(lParam), PERLWIN32GUI_ARGTYPE_LONG, wParam, -1); --- 420,425 ---- */ PerlResult = DoEvent(NOTXSCALL perlud, PERLWIN32GUI_NEM_CONTROL3, "RButtonDown", ! PERLWIN32GUI_ARGTYPE_LONG, GET_X_LPARAM(lParam), ! PERLWIN32GUI_ARGTYPE_LONG, GET_Y_LPARAM(lParam), PERLWIN32GUI_ARGTYPE_LONG, wParam, -1); *************** *** 432,437 **** */ PerlResult = DoEvent(NOTXSCALL perlud, PERLWIN32GUI_NEM_CONTROL4, "RButtonUp", ! PERLWIN32GUI_ARGTYPE_LONG, LOWORD(lParam), ! PERLWIN32GUI_ARGTYPE_LONG, HIWORD(lParam), PERLWIN32GUI_ARGTYPE_LONG, wParam, -1); --- 432,437 ---- */ PerlResult = DoEvent(NOTXSCALL perlud, PERLWIN32GUI_NEM_CONTROL4, "RButtonUp", ! PERLWIN32GUI_ARGTYPE_LONG, GET_X_LPARAM(lParam), ! PERLWIN32GUI_ARGTYPE_LONG, GET_Y_LPARAM(lParam), PERLWIN32GUI_ARGTYPE_LONG, wParam, -1); Index: TODO =================================================================== RCS file: /cvsroot/perl-win32-gui/Win32-GUI/TODO,v retrieving revision 1.12 retrieving revision 1.13 diff -C2 -d -r1.12 -r1.13 *** TODO 1 Oct 2005 23:02:39 -0000 1.12 --- TODO 13 Nov 2005 18:57:52 -0000 1.13 *************** *** 11,15 **** - Documentation: - - review and update the tutorial - revise and correct FAQ - any TBD sections --- 11,14 ---- *************** *** 41,46 **** to turn off Win32::GUI warnings. (see -DW32G_NEWWARN) - - Tutorial docs: code all the examples, and make sure they work before each release. - - Makefile.PL. Add code to fail at Makefile.PL stage if the chosen compiler is not available, and we autodetected from $Config{cc}. This will prevent us getting --- 40,43 ---- Index: GUI_MessageLoops.cpp =================================================================== RCS file: /cvsroot/perl-win32-gui/Win32-GUI/GUI_MessageLoops.cpp,v retrieving revision 1.14 retrieving revision 1.15 diff -C2 -d -r1.14 -r1.15 *** GUI_MessageLoops.cpp 1 Oct 2005 18:00:39 -0000 1.14 --- GUI_MessageLoops.cpp 13 Nov 2005 18:57:52 -0000 1.15 *************** *** 332,336 **** case WM_MOUSEMOVE: /* ! * (@)EVENT:MouseMouve() * (@)APPLIES_TO:* */ --- 332,336 ---- case WM_MOUSEMOVE: /* ! * (@)EVENT:MouseMove() * (@)APPLIES_TO:* */ *************** *** 347,352 **** */ PerlResult = DoEvent(NOTXSCALL perlud, PERLWIN32GUI_NEM_LMOUSEDOWN, "MouseDown", ! PERLWIN32GUI_ARGTYPE_LONG, LOWORD(lParam), ! PERLWIN32GUI_ARGTYPE_LONG, HIWORD(lParam), PERLWIN32GUI_ARGTYPE_LONG, wParam, -1); --- 347,352 ---- */ PerlResult = DoEvent(NOTXSCALL perlud, PERLWIN32GUI_NEM_LMOUSEDOWN, "MouseDown", ! PERLWIN32GUI_ARGTYPE_LONG, GET_X_LPARAM(lParam), ! PERLWIN32GUI_ARGTYPE_LONG, GET_Y_LPARAM(lParam), PERLWIN32GUI_ARGTYPE_LONG, wParam, -1); *************** *** 358,363 **** */ PerlResult = DoEvent(NOTXSCALL perlud, PERLWIN32GUI_NEM_LMOUSEUP, "MouseUp", ! PERLWIN32GUI_ARGTYPE_LONG, LOWORD(lParam), ! PERLWIN32GUI_ARGTYPE_LONG, HIWORD(lParam), PERLWIN32GUI_ARGTYPE_LONG, wParam, -1); --- 358,363 ---- */ PerlResult = DoEvent(NOTXSCALL perlud, PERLWIN32GUI_NEM_LMOUSEUP, "MouseUp", ! PERLWIN32GUI_ARGTYPE_LONG, GET_X_LPARAM(lParam), ! PERLWIN32GUI_ARGTYPE_LONG, GET_Y_LPARAM(lParam), PERLWIN32GUI_ARGTYPE_LONG, wParam, -1); *************** *** 369,374 **** */ PerlResult = DoEvent(NOTXSCALL perlud, PERLWIN32GUI_NEM_LMOUSEDBLCLK, "MouseDblClick", ! PERLWIN32GUI_ARGTYPE_LONG, LOWORD(lParam), ! PERLWIN32GUI_ARGTYPE_LONG, HIWORD(lParam), PERLWIN32GUI_ARGTYPE_LONG, wParam, -1); --- 369,374 ---- */ PerlResult = DoEvent(NOTXSCALL perlud, PERLWIN32GUI_NEM_LMOUSEDBLCLK, "MouseDblClick", ! PERLWIN32GUI_ARGTYPE_LONG, GET_X_LPARAM(lParam), ! PERLWIN32GUI_ARGTYPE_LONG, GET_Y_LPARAM(lParam), PERLWIN32GUI_ARGTYPE_LONG, wParam, -1); *************** *** 380,385 **** */ PerlResult = DoEvent(NOTXSCALL perlud, PERLWIN32GUI_NEM_RMOUSEDOWN, "MouseRightDown", ! PERLWIN32GUI_ARGTYPE_LONG, LOWORD(lParam), ! PERLWIN32GUI_ARGTYPE_LONG, HIWORD(lParam), PERLWIN32GUI_ARGTYPE_LONG, wParam, -1); --- 380,385 ---- */ PerlResult = DoEvent(NOTXSCALL perlud, PERLWIN32GUI_NEM_RMOUSEDOWN, "MouseRightDown", ! PERLWIN32GUI_ARGTYPE_LONG, GET_X_LPARAM(lParam), ! PERLWIN32GUI_ARGTYPE_LONG, GET_Y_LPARAM(lParam), PERLWIN32GUI_ARGTYPE_LONG, wParam, -1); *************** *** 391,396 **** */ PerlResult = DoEvent(NOTXSCALL perlud, PERLWIN32GUI_NEM_RMOUSEUP, "MouseRightUp", ! PERLWIN32GUI_ARGTYPE_LONG, LOWORD(lParam), ! PERLWIN32GUI_ARGTYPE_LONG, HIWORD(lParam), PERLWIN32GUI_ARGTYPE_LONG, wParam, -1); --- 391,396 ---- */ PerlResult = DoEvent(NOTXSCALL perlud, PERLWIN32GUI_NEM_RMOUSEUP, "MouseRightUp", ! PERLWIN32GUI_ARGTYPE_LONG, GET_X_LPARAM(lParam), ! PERLWIN32GUI_ARGTYPE_LONG, GET_Y_LPARAM(lParam), PERLWIN32GUI_ARGTYPE_LONG, wParam, -1); *************** *** 402,407 **** */ PerlResult = DoEvent(NOTXSCALL perlud, PERLWIN32GUI_NEM_RMOUSEDBLCLK, "MouseRightDblClick", ! PERLWIN32GUI_ARGTYPE_LONG, LOWORD(lParam), ! PERLWIN32GUI_ARGTYPE_LONG, HIWORD(lParam), PERLWIN32GUI_ARGTYPE_LONG, wParam, -1); --- 402,407 ---- */ PerlResult = DoEvent(NOTXSCALL perlud, PERLWIN32GUI_NEM_RMOUSEDBLCLK, "MouseRightDblClick", ! PERLWIN32GUI_ARGTYPE_LONG, GET_X_LPARAM(lParam), ! PERLWIN32GUI_ARGTYPE_LONG, GET_Y_LPARAM(lParam), PERLWIN32GUI_ARGTYPE_LONG, wParam, -1); *************** *** 413,418 **** */ PerlResult = DoEvent(NOTXSCALL perlud, PERLWIN32GUI_NEM_MMOUSEDOWN, "MouseMiddleDown", ! PERLWIN32GUI_ARGTYPE_LONG, LOWORD(lParam), ! PERLWIN32GUI_ARGTYPE_LONG, HIWORD(lParam), PERLWIN32GUI_ARGTYPE_LONG, wParam, -1); --- 413,418 ---- */ PerlResult = DoEvent(NOTXSCALL perlud, PERLWIN32GUI_NEM_MMOUSEDOWN, "MouseMiddleDown", ! PERLWIN32GUI_ARGTYPE_LONG, GET_X_LPARAM(lParam), ! PERLWIN32GUI_ARGTYPE_LONG, GET_Y_LPARAM(lParam), PERLWIN32GUI_ARGTYPE_LONG, wParam, -1); *************** *** 424,429 **** */ PerlResult = DoEvent(NOTXSCALL perlud, PERLWIN32GUI_NEM_MMOUSEUP, "MouseMiddleUp", ! PERLWIN32GUI_ARGTYPE_LONG, LOWORD(lParam), ! PERLWIN32GUI_ARGTYPE_LONG, HIWORD(lParam), PERLWIN32GUI_ARGTYPE_LONG, wParam, -1); --- 424,429 ---- */ PerlResult = DoEvent(NOTXSCALL perlud, PERLWIN32GUI_NEM_MMOUSEUP, "MouseMiddleUp", ! PERLWIN32GUI_ARGTYPE_LONG, GET_X_LPARAM(lParam), ! PERLWIN32GUI_ARGTYPE_LONG, GET_Y_LPARAM(lParam), PERLWIN32GUI_ARGTYPE_LONG, wParam, -1); *************** *** 435,440 **** */ PerlResult = DoEvent(NOTXSCALL perlud, PERLWIN32GUI_NEM_MMOUSEDBLCLK, "MouseMiddleDblClick", ! PERLWIN32GUI_ARGTYPE_LONG, LOWORD(lParam), ! PERLWIN32GUI_ARGTYPE_LONG, HIWORD(lParam), PERLWIN32GUI_ARGTYPE_LONG, wParam, -1); --- 435,440 ---- */ PerlResult = DoEvent(NOTXSCALL perlud, PERLWIN32GUI_NEM_MMOUSEDBLCLK, "MouseMiddleDblClick", ! PERLWIN32GUI_ARGTYPE_LONG, GET_X_LPARAM(lParam), ! PERLWIN32GUI_ARGTYPE_LONG, GET_Y_LPARAM(lParam), PERLWIN32GUI_ARGTYPE_LONG, wParam, -1); *************** *** 525,528 **** --- 525,534 ---- /* * (@)EVENT:Timer() + * Sent when a Win32::GUI::Timer object reaches its ELAPSEd time. + * For OEM the event is names $name_Timer. + * For NEM the subroutine called is set with the parent window's + * -onTimer option. There are 2 arguments passed to the NEM event handler: + * the first is the parent window object, and the second is the timer's + * name. * (@)APPLIES_TO:* */ *************** *** 830,835 **** case WM_LBUTTONDOWN: PerlResult = DoEvent(NOTXSCALL perlud, PERLWIN32GUI_NEM_LMOUSEDOWN, "MouseDown", ! PERLWIN32GUI_ARGTYPE_LONG, LOWORD(lParam), ! PERLWIN32GUI_ARGTYPE_LONG, HIWORD(lParam), PERLWIN32GUI_ARGTYPE_LONG, wParam, -1); --- 836,841 ---- case WM_LBUTTONDOWN: PerlResult = DoEvent(NOTXSCALL perlud, PERLWIN32GUI_NEM_LMOUSEDOWN, "MouseDown", ! PERLWIN32GUI_ARGTYPE_LONG, GET_X_LPARAM(lParam), ! PERLWIN32GUI_ARGTYPE_LONG, GET_Y_LPARAM(lParam), PERLWIN32GUI_ARGTYPE_LONG, wParam, -1); *************** *** 837,842 **** case WM_LBUTTONUP: PerlResult = DoEvent(NOTXSCALL perlud, PERLWIN32GUI_NEM_LMOUSEUP, "MouseUp", ! PERLWIN32GUI_ARGTYPE_LONG, LOWORD(lParam), ! PERLWIN32GUI_ARGTYPE_LONG, HIWORD(lParam), PERLWIN32GUI_ARGTYPE_LONG, wParam, -1); --- 843,848 ---- case WM_LBUTTONUP: PerlResult = DoEvent(NOTXSCALL perlud, PERLWIN32GUI_NEM_LMOUSEUP, "MouseUp", ! PERLWIN32GUI_ARGTYPE_LONG, GET_X_LPARAM(lParam), ! PERLWIN32GUI_ARGTYPE_LONG, GET_Y_LPARAM(lParam), PERLWIN32GUI_ARGTYPE_LONG, wParam, -1); *************** *** 844,849 **** case WM_LBUTTONDBLCLK: PerlResult = DoEvent(NOTXSCALL perlud, PERLWIN32GUI_NEM_LMOUSEDBLCLK, "MouseDblClick", ! PERLWIN32GUI_ARGTYPE_LONG, LOWORD(lParam), ! PERLWIN32GUI_ARGTYPE_LONG, HIWORD(lParam), PERLWIN32GUI_ARGTYPE_LONG, wParam, -1); --- 850,855 ---- case WM_LBUTTONDBLCLK: PerlResult = DoEvent(NOTXSCALL perlud, PERLWIN32GUI_NEM_LMOUSEDBLCLK, "MouseDblClick", ! PERLWIN32GUI_ARGTYPE_LONG, GET_X_LPARAM(lParam), ! PERLWIN32GUI_ARGTYPE_LONG, GET_Y_LPARAM(lParam), PERLWIN32GUI_ARGTYPE_LONG, wParam, -1); *************** *** 851,856 **** case WM_RBUTTONDOWN: PerlResult = DoEvent(NOTXSCALL perlud, PERLWIN32GUI_NEM_RMOUSEDOWN, "MouseRightDown", ! PERLWIN32GUI_ARGTYPE_LONG, LOWORD(lParam), ! PERLWIN32GUI_ARGTYPE_LONG, HIWORD(lParam), PERLWIN32GUI_ARGTYPE_LONG, wParam, -1); --- 857,862 ---- case WM_RBUTTONDOWN: PerlResult = DoEvent(NOTXSCALL perlud, PERLWIN32GUI_NEM_RMOUSEDOWN, "MouseRightDown", ! PERLWIN32GUI_ARGTYPE_LONG, GET_X_LPARAM(lParam), ! PERLWIN32GUI_ARGTYPE_LONG, GET_Y_LPARAM(lParam), PERLWIN32GUI_ARGTYPE_LONG, wParam, -1); *************** *** 858,863 **** case WM_RBUTTONUP: PerlResult = DoEvent(NOTXSCALL perlud, PERLWIN32GUI_NEM_RMOUSEUP, "MouseRightUp", ! PERLWIN32GUI_ARGTYPE_LONG, LOWORD(lParam), ! PERLWIN32GUI_ARGTYPE_LONG, HIWORD(lParam), PERLWIN32GUI_ARGTYPE_LONG, wParam, -1); --- 864,869 ---- case WM_RBUTTONUP: PerlResult = DoEvent(NOTXSCALL perlud, PERLWIN32GUI_NEM_RMOUSEUP, "MouseRightUp", ! PERLWIN32GUI_ARGTYPE_LONG, GET_X_LPARAM(lParam), ! PERLWIN32GUI_ARGTYPE_LONG, GET_Y_LPARAM(lParam), PERLWIN32GUI_ARGTYPE_LONG, wParam, -1); *************** *** 865,870 **** case WM_RBUTTONDBLCLK: PerlResult = DoEvent(NOTXSCALL perlud, PERLWIN32GUI_NEM_RMOUSEDBLCLK, "MouseRightDblClick", ! PERLWIN32GUI_ARGTYPE_LONG, LOWORD(lParam), ! PERLWIN32GUI_ARGTYPE_LONG, HIWORD(lParam), PERLWIN32GUI_ARGTYPE_LONG, wParam, -1); --- 871,876 ---- case WM_RBUTTONDBLCLK: PerlResult = DoEvent(NOTXSCALL perlud, PERLWIN32GUI_NEM_RMOUSEDBLCLK, "MouseRightDblClick", ! PERLWIN32GUI_ARGTYPE_LONG, GET_X_LPARAM(lParam), ! PERLWIN32GUI_ARGTYPE_LONG, GET_Y_LPARAM(lParam), PERLWIN32GUI_ARGTYPE_LONG, wParam, -1); *************** *** 872,877 **** case WM_MBUTTONDOWN: PerlResult = DoEvent(NOTXSCALL perlud, PERLWIN32GUI_NEM_MMOUSEDOWN, "MouseMiddleDown", ! PERLWIN32GUI_ARGTYPE_LONG, LOWORD(lParam), ! PERLWIN32GUI_ARGTYPE_LONG, HIWORD(lParam), PERLWIN32GUI_ARGTYPE_LONG, wParam, -1); --- 878,883 ---- case WM_MBUTTONDOWN: PerlResult = DoEvent(NOTXSCALL perlud, PERLWIN32GUI_NEM_MMOUSEDOWN, "MouseMiddleDown", ! PERLWIN32GUI_ARGTYPE_LONG, GET_X_LPARAM(lParam), ! PERLWIN32GUI_ARGTYPE_LONG, GET_Y_LPARAM(lParam), PERLWIN32GUI_ARGTYPE_LONG, wParam, -1); *************** *** 879,884 **** case WM_MBUTTONUP: PerlResult = DoEvent(NOTXSCALL perlud, PERLWIN32GUI_NEM_MMOUSEUP, "MouseMiddleUp", ! PERLWIN32GUI_ARGTYPE_LONG, LOWORD(lParam), ! PERLWIN32GUI_ARGTYPE_LONG, HIWORD(lParam), PERLWIN32GUI_ARGTYPE_LONG, wParam, -1); --- 885,890 ---- case WM_MBUTTONUP: PerlResult = DoEvent(NOTXSCALL perlud, PERLWIN32GUI_NEM_MMOUSEUP, "MouseMiddleUp", ! PERLWIN32GUI_ARGTYPE_LONG, GET_X_LPARAM(lParam), ! PERLWIN32GUI_ARGTYPE_LONG, GET_Y_LPARAM(lParam), PERLWIN32GUI_ARGTYPE_LONG, wParam, -1); *************** *** 886,891 **** case WM_MBUTTONDBLCLK: PerlResult = DoEvent(NOTXSCALL perlud, PERLWIN32GUI_NEM_MMOUSEDBLCLK, "MouseMiddleDblClick", ! PERLWIN32GUI_ARGTYPE_LONG, LOWORD(lParam), ! PERLWIN32GUI_ARGTYPE_LONG, HIWORD(lParam), PERLWIN32GUI_ARGTYPE_LONG, wParam, -1); --- 892,897 ---- case WM_MBUTTONDBLCLK: PerlResult = DoEvent(NOTXSCALL perlud, PERLWIN32GUI_NEM_MMOUSEDBLCLK, "MouseMiddleDblClick", ! PERLWIN32GUI_ARGTYPE_LONG, GET_X_LPARAM(lParam), ! PERLWIN32GUI_ARGTYPE_LONG, GET_Y_LPARAM(lParam), PERLWIN32GUI_ARGTYPE_LONG, wParam, -1); |
From: Robert M. <rob...@us...> - 2005-11-13 18:58:00
|
Update of /cvsroot/perl-win32-gui/Win32-GUI/t In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv24631/t Added Files: 05_Timer_01_OEM.t 05_Timer_02_NEM.t 05_Timer_03_Interval.t 05_Timer_04_Kill.t 05_Timer_05_DESTROY.t Removed Files: 05_Timer.t Log Message: Bug fixes; re-work of WIn32::GUI::Timer; preparing for 1.03 release --- NEW FILE: 05_Timer_04_Kill.t --- #!perl -wT # Win32::GUI test suite. # $Id: 05_Timer_04_Kill.t,v 1.1 2005/11/13 18:57:52 robertemay Exp $ # # test coverage of Timers use strict; use warnings; BEGIN { $| = 1 } # Autoflush use Test::More tests => 19; use Win32::GUI; my $ctrl = "Timer"; my $class = "Test::$ctrl"; my $elapse = 500; # ms # Test the Kill method my $W = new Win32::GUI::Window( -name => "TestWindow", ); my $C = Test::Timer->new($W, 'T1', $elapse); isa_ok($C,$class, "new creates $class object"); isa_ok($C,"Win32::GUI::Timer", "$class is a subclass of Win32::GUI::Timer"); isa_ok($W->T1, $class, "\$W->T1 contains a $class object"); isa_ok($W->T1,"Win32::GUI::Timer", "\$W->T1 contains a subclass of Win32::GUI::Timer"); is($C, $W->T1, "Parent references $ctrl"); my $id = $C->{-id}; ok(($id > 0), "timer's -id > 0"); ok(defined $W->{-timers}->{$id}, "Timer's id is stored in parent"); is($W->{-timers}->{$id}, 'T1', "Timer's name is stored in parent"); is($C->{-name}, 'T1', "Timer's name is stored in timer object"); is($C->{-handle}, $W->{-handle}, "Parent's handle is stored in timer object"); is($C->{-interval}, $elapse, "Timer interval is stored in timer object"); # Kill tests is($C->Kill(), $elapse, "Kill() returns timer interval"); is($C->Interval(), 0, "Kill() sets inteval to zero"); is($Test::Timer::x, 0, "DESTROY not called yet"); ok(!defined($C->Kill(1)), "Kill(1) returns undef"); is($Test::Timer::x, 1, "Kill(1) calls DESTROY"); ok(!defined $W->{-timers}->{$id}, "Kill(1) tidies parent"); ok(!defined $W->{T1}, "Kill(1) tidies parent"); undef $C; #should remove last reference is($Test::Timer::x, 2, "DESTROY called for object destruction"); package Test::Timer; our (@ISA, $x); BEGIN { @ISA = qw(Win32::GUI::Timer); $x = 0; } sub DESTROY { my $self = shift; ++$x; $self->SUPER::DESTROY(@_); } --- 05_Timer.t DELETED --- --- NEW FILE: 05_Timer_01_OEM.t --- #!perl -wT # Win32::GUI test suite. # $Id: 05_Timer_01_OEM.t,v 1.1 2005/11/13 18:57:52 robertemay Exp $ # # test coverage of Timers use strict; use warnings; BEGIN { $| = 1 } # Autoflush use Test::More tests => 14; use Win32::GUI; my $ctrl = "Timer"; my $class = "Win32::GUI::$ctrl"; my $elapse = 500; # ms # Test the basic construction, and timing: my @times; my $t0 = time; my $W = new Win32::GUI::Window( -name => "TestWindow", ); isa_ok($W, "Win32::GUI::Window", "\$W"); my $C = $W->AddTimer('T1', $elapse); isa_ok($C,$class, "\$W->AddTimer creats $class object"); isa_ok($W->T1, $class, "\$W->T1 contains a $class object"); is($C, $W->T1, "Parent references $ctrl"); my $id = $C->{-id}; ok(($id > 0), "timer's -id > 0"); ok(defined $W->{-timers}->{$id}, "Timer's id is stored in parent"); is($W->{-timers}->{$id}, 'T1', "Timer's name is stored in parent"); is($C->{-name}, 'T1', "Timer's name is stored in timer object"); is($C->{-handle}, $W->{-handle}, "Parent's handle is stored in timer object"); is($C->{-interval}, $elapse, "Timer interval is stored in timer object"); Win32::GUI::Dialog(); is(scalar(@times), 3, "Timer went off 3 times"); for my $interval (@times) { ok(($interval <= 1) && ($interval >= 0), "Timer interval(${interval}s) appropriate"); } sub T1_Timer { my $t1 = time; push @times, ($t1 - $t0); $t0 = $t1; return scalar(@times) == 3 ? -1 : 0; } --- NEW FILE: 05_Timer_02_NEM.t --- #!perl -wT # Win32::GUI test suite. # $Id: 05_Timer_02_NEM.t,v 1.1 2005/11/13 18:57:52 robertemay Exp $ # # test coverage of Timers use strict; use warnings; BEGIN { $| = 1 } # Autoflush use Test::More tests => 16; use Win32::GUI; my $ctrl = "Timer"; my $class = "Win32::GUI::$ctrl"; my $elapse = 500; # ms # Test the basic construction, and timing: my @times; my %params; my $t0 = time; my $W = new Win32::GUI::Window( -name => "TestWindow", -onTimer => \&_process_timer, ); isa_ok($W, "Win32::GUI::Window", "\$W"); my $C = $W->AddTimer('T1', $elapse); isa_ok($C,$class, "\$W->AddTimer creats $class object"); isa_ok($W->T1, $class, "\$W->T1 contains a $class object"); is($C, $W->T1, "Parent references $ctrl"); my $id = $C->{-id}; ok(($id > 0), "timer's -id > 0"); ok(defined $W->{-timers}->{$id}, "Timer's id is stored in parent"); is($W->{-timers}->{$id}, 'T1', "Timer's name is stored in parent"); is($C->{-name}, 'T1', "Timer's name is stored in timer object"); is($C->{-handle}, $W->{-handle}, "Parent's handle is stored in timer object"); is($C->{-interval}, $elapse, "Timer interval is stored in timer object"); Win32::GUI::Dialog(); is(scalar(@times), 3, "Timer went off 3 times"); for my $interval (@times) { ok(($interval <= 1) && ($interval >= 0), "Timer interval(${interval}s) appropriate"); } @times=(); is($params{window}, $W, "Parent widow passed to NEM event handler"); is($params{name}, $C->{-name}, "timer name passed to NEM handler"); %params=(); sub _process_timer { $params{window} = shift; $params{name} = shift; my $t1 = time; push @times, ($t1 - $t0); $t0 = $t1; return scalar(@times) == 3 ? -1 : 0; } --- NEW FILE: 05_Timer_05_DESTROY.t --- #!perl -wT # Win32::GUI test suite. # $Id: 05_Timer_05_DESTROY.t,v 1.1 2005/11/13 18:57:52 robertemay Exp $ # # test coverage of Timers use strict; use warnings; BEGIN { $| = 1 } # Autoflush use Test::More tests => 11; use Win32::GUI; my $ctrl = "Timer"; my $class = "Test::$ctrl"; my $elapse = 500; # ms # Test DESTRUCTION { my $W = new Win32::GUI::Window( -name => "TestWindow", ); my $C = Test::Timer->new($W, 'T1', $elapse); # DESTROY tests is($Test::Timer::x, 0, "DESTROY not called yet"); undef $C; # should still be a reference from the parent object is($Test::Timer::x, 0, "DESTROY not called yet"); undef $W; # should reduce ref count to parent to zero, and in turn Timer is($Test::Timer::x, 1, "DESTROY called when parent destroyed"); } { my $W = new Win32::GUI::Window( -name => "TestWindow", ); my $C = Test::Timer->new($W, 'T1', $elapse); my $id = $C->{-id}; ok(defined $W->{-timers}->{$id}, "Timer's id is stored in parent"); is($C, $W->T1, "Reference sotered in Parent"); # DESTROY tests $Test::Timer::x = 0; is($Test::Timer::x, 0, "DESTROY not called yet"); undef $C; # should still be a reference from the parent object is($Test::Timer::x, 0, "DESTROY not called yet"); $W->{T1} = undef; # naughty way to remove timer is($Test::Timer::x, 1, "DESTROY called when parent reference removed"); ok(!defined $W->{-timers}->{$id}, "DESTROY() tidies parent"); ok(!defined $W->{T1}, "DESTROY() tidies parent"); undef $W; is($Test::Timer::x, 1, "DESTROY not called when parent destroyed"); } package Test::Timer; our (@ISA, $x); BEGIN { @ISA = qw(Win32::GUI::Timer); $x = 0; } sub DESTROY { ++$x; shift->SUPER::DESTROY(); } --- NEW FILE: 05_Timer_03_Interval.t --- #!perl -wT # Win32::GUI test suite. # $Id: 05_Timer_03_Interval.t,v 1.1 2005/11/13 18:57:52 robertemay Exp $ # # test coverage of Timers use strict; use warnings; BEGIN { $| = 1 } # Autoflush use Test::More tests => 11; use Win32::GUI; my $ctrl = "Timer"; my $class = "Win32::GUI::$ctrl"; my $elapse = 500; # ms # Test the basic construction, and timing: my @times; my $t0 = time; my $W = new Win32::GUI::Window( -name => "TestWindow", -onTimer => \&_process_timer, ); my $C = $W->AddTimer('T1', $elapse); is($C->Interval(), $elapse, "Interval() returns timer interval"); @times=(); Win32::GUI::Dialog(); is(scalar(@times), 3, "Timer went off 3 times"); for my $interval (@times) { ok(($interval <= 1) && ($interval >= 0), "Timer interval(${interval}s) appropriate"); } is($C->Interval($elapse+500), $elapse, "Interval(SET) returns prior timer interval"); is($C->Interval(), $elapse+500, "Interval() returns new timer interval"); @times=(); Win32::GUI::Dialog(); is(scalar(@times), 3, "Timer went off 3 times"); for my $interval (@times) { ok(($interval <= 2) && ($interval >= 0), "Timer interval(${interval}s) appropriate"); } sub _process_timer { my $t1 = time; push @times, ($t1 - $t0); $t0 = $t1; return scalar(@times) == 3 ? -1 : 0; } |
From: Robert M. <rob...@us...> - 2005-11-13 18:58:00
|
Update of /cvsroot/perl-win32-gui/Win32-GUI/docs/GUI/UserGuide In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv24631/docs/GUI/UserGuide Modified Files: Readme.pod Log Message: Bug fixes; re-work of WIn32::GUI::Timer; preparing for 1.03 release Index: Readme.pod =================================================================== RCS file: /cvsroot/perl-win32-gui/Win32-GUI/docs/GUI/UserGuide/Readme.pod,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** Readme.pod 3 Aug 2005 21:45:59 -0000 1.3 --- Readme.pod 13 Nov 2005 18:57:52 -0000 1.4 *************** *** 152,155 **** --- 152,156 ---- You will need B<tar>, B<gzip> and B<zip> utilities on your path. Issue the following commands. + perl Makefile.PL (adjust as necessary for your build environment) nmake |
From: Robert M. <rob...@us...> - 2005-11-13 18:58:00
|
Update of /cvsroot/perl-win32-gui/Win32-GUI/docs/GUI/Tutorial In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv24631/docs/GUI/Tutorial Modified Files: Part4.pod Log Message: Bug fixes; re-work of WIn32::GUI::Timer; preparing for 1.03 release Index: Part4.pod =================================================================== RCS file: /cvsroot/perl-win32-gui/Win32-GUI/docs/GUI/Tutorial/Part4.pod,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** Part4.pod 5 Oct 2005 22:20:49 -0000 1.2 --- Part4.pod 13 Nov 2005 18:57:52 -0000 1.3 *************** *** 56,65 **** =item * ! The timer keeps firing repeatedly. To disable a timer, use $timer->Kill(). =item * ! To change the interval of a timer (or to re-enable it after a Kill), use ! $timer->Interval(n). Setting an interval of zero disables the timer, just like Kill. --- 56,67 ---- =item * ! The timer keeps firing repeatedly. To disable a timer, use C<< $timer->Interval(0) >> ! or C<< $timer->Kill() >>. =item * ! To change the interval of a timer (or to re-enable it after C<< $timer->Interval(0) >> ! or C<< $timer->Kill() >>), use ! C<< $timer->Interval(n) >>. Setting an interval of zero disables the timer, just like Kill. |
Update of /cvsroot/perl-win32-gui/Win32-GUI-DIBitmap In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv32157 Added Files: Changes DIBitmap.html DIBitmap.pm DIBitmap.xs MANIFEST Makefile.PL Readme TYPEMAP Log Message: Added to repository --- NEW FILE: Makefile.PL --- use ExtUtils::MakeMaker; # See lib/ExtUtils/MakeMaker.pm for details of how to influence # the contents of the Makefile that is written. WriteMakefile( 'NAME' => 'Win32::GUI::DIBitmap', 'VERSION_FROM' => 'DIBitmap.pm', 'XS' => { 'DIBitmap.xs' => 'DIBitmap.cpp' }, 'LIBS' => ['Msvcprt.lib'], # e.g., '-lm' 'DEFINE' => '', # e.g., '-DHAVE_SOMETHING' 'INC' => '', # e.g., '-I/usr/include/other' 'MYEXTLIB' => 'extlib/FreeImage.lib', ($] ge '5.005') ? ( 'AUTHOR' => 'ROCHER Laurent (lr...@cp...)', 'ABSTRACT' => 'Add new load/save image format and some image manipulation', ) : (), ); sub MY::xs_c { ' .xs.c: $(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) $(XSUBPP) $(XSPROTOARG) $(XSUBPPARGS) $*.xs > $*.c .xs.cpp: $(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) $(XSUBPP) $(XSPROTOARG) $(XSUBPPARGS) $*.xs > $*.cpp '; } --- NEW FILE: DIBitmap.html --- <HTML> <HEAD> <TITLE>DIBitmap.pm</TITLE> <LINK REV="made" HREF="mailto:"> </HEAD> <BODY> <A NAME="__index__"></A> <!-- INDEX BEGIN --> <UL> <LI><A HREF="#name">NAME</A></LI> <LI><A HREF="#synopsis">SYNOPSIS</A></LI> <LI><A HREF="#description">DESCRIPTION</A></LI> <LI><A HREF="#package functions">PACKAGE FUNCTIONS</A></LI> <UL> <LI><A HREF="#freeimage library info functions">FreeImage Library Info functions</A></LI> <LI><A HREF="#fif functions">FIF functions</A></LI> <LI><A HREF="#fif info functions">FIF info functions</A></LI> <LI><A HREF="#colors functions">Colors functions</A></LI> </UL> <LI><A HREF="#dibitmap object">DIBITMAP OBJECT</A></LI> <UL> <LI><A HREF="#dibitmap new methods">DIBitmap New methods</A></LI> <LI><A HREF="#dibitmap save methods">DIBitmap Save methods</A></LI> <LI><A HREF="#dibitmap information methods">DIBitmap information methods</A></LI> <LI><A HREF="#dibitmap and gd">DIBitmap and GD</A></LI> <LI><A HREF="#dibitmap pixels and background methods">DIBitmap Pixels and Background methods</A></LI> <LI><A HREF="#dibitmap convertion methods">DIBitmap Convertion methods</A></LI> <LI><A HREF="#dibitmap rotating and flipping">DIBitmap Rotating and flipping</A></LI> <LI><A HREF="#dibitmap upsampling / downsampling">DIBitmap UpSampling / DownSampling</A></LI> <LI><A HREF="#dibitmap color manipulation">DIBitmap Color manipulation</A></LI> <LI><A HREF="#dibitmap channel methods">DIBitmap Channel methods</A></LI> <LI><A HREF="#dibitmap copy/paste methods">DIBitmap Copy/Paste methods</A></LI> <LI><A HREF="#dibitmap devise context methods">DIBitmap Devise Context methods</A></LI> </UL> <LI><A HREF="#mdibitmap object">MDIBITMAP OBJECT</A></LI> <UL> <LI><A HREF="#mdibitmap new methods">MDIBitmap New methods</A></LI> <LI><A HREF="#mdibitmap get methods">MDIBitmap Get methods</A></LI> <LI><A HREF="#mdibitmap lock methods">MDIBitmap Lock methods</A></LI> <LI><A HREF="#mdibitmap edit methods">MDIBitmap Edit methods</A></LI> </UL> <LI><A HREF="#author">AUTHOR</A></LI> <LI><A HREF="#see also">SEE ALSO</A></LI> </UL> <!-- INDEX END --> <HR> <P> <H1><A NAME="name">NAME</A></H1> <P>Win32::GUI::DIBitmap add new reading/writing bitmap formats to Win32::GUI and some image manipulation.</P> <P> <HR> <H1><A NAME="synopsis">SYNOPSIS</A></H1> <PRE> use Win32::GUI; use Win32::GUI::DIBitmap;</PRE> <PRE> $W = new Win32::GUI::Window ( -title => "Win32::GUI::DIBitmap test", -pos => [100, 100], -size => [400, 400], -name => "Window", );</PRE> <PRE> $dib = newFromFile Win32::GUI::DIBitmap ('image.jpg'); $hbitmap = $dib->ConvertToBitmap(); undef $dib;</PRE> <PRE> $W->AddButton ( -pos => [100, 100], -size => [200, 200], -bitmap => $hbitmap, -name => "Button", -visible => 1, );</PRE> <PRE> $W->Show(); Win32::GUI::Dialog(); sub Window_Terminate { -1 }</PRE> <P> <HR> <H1><A NAME="description">DESCRIPTION</A></H1> <P>Win32::GUI::DIBitmap add new reading/writing bitmap formats to Win32::GUI and some image manipulation.</P> <P>This package use FreeImage 3.5.1, an open source image library supporting all common bitmap formats (visit : <A HREF="http://freeimage.sourceforge.net/">http://freeimage.sourceforge.net/</A> ).</P> <P>Supports many formats, such as:</P> <PRE> Format Reading Writing Description BMP Y Y Windows or OS/2 Bitmap [Export = 1 4 8 16 24 32] ICO Y Y Windows Icon [Export = 1 4 8 16 24 32] JPEG Y Y JPEG - JFIF Compliant [Export = 8 24] JNG Y N JPEG Network Graphics KOALA Y N C64 Koala Graphics IFF Y N IFF Interleaved Bitmap MNG Y N Multiple Network Graphics PBM Y Y Portable Bitmap (ASCII) [Export = 1 8 24] PBMRAW Y Y Portable Bitmap (RAW) [Export = 1 8 24] PCD Y N Kodak PhotoCD PCX Y N Zsoft Paintbrush PGM Y Y Portable Greymap (ASCII) [Export = 1 8 24] PGMRAW Y Y Portable Greymap (RAW) [Export = 1 8 24] PNG Y Y Portable Network Graphics [Export = 1 4 8 24 32] PPM Y Y Portable Pixelmap (ASCII) [Export = 1 8 24] PPMRAW Y Y Portable Pixelmap (RAW) [Export = 1 8 24] RAS Y N Sun Raster Image TARGA Y Y Truevision Targa [Export = 8 16 24 32] TIFF Y Y Tagged Image File Format [Export = 1 4 8 24 32] WBMP Y Y Wireless Bitmap [Export = 1] PSD Y N Adobe Photoshop CUT Y N Dr. Halo XBM Y N X11 Bitmap Format XPM Y Y X11 Pixmap Format [Export = 8 24] DDS Y N DirectX Surface GIF Y Y Graphics Interchange Format [Export = 8]</PRE> <P>FreeImage can handle multi-page file (TIFF and ICO support only).</P> <P> <HR> <H1><A NAME="package functions">PACKAGE FUNCTIONS</A></H1> <P> <H2><A NAME="freeimage library info functions">FreeImage Library Info functions</A></H2> <DL> <DT><STRONG><A NAME="item_GetVersion"><CODE>GetVersion</CODE> ()</A></STRONG><BR> <DD> <PRE> Return the FreeImage version string.</PRE> <DT><STRONG><A NAME="item_GetCopyright"><CODE>GetCopyright</CODE> ()</A></STRONG><BR> <DD> <PRE> Return the FreeImage copyright string.</PRE> </DL> <P> <H2><A NAME="fif functions">FIF functions</A></H2> <DL> <DT><STRONG><A NAME="item_Constante"><CODE>Constante</CODE></A></STRONG><BR> <DD> <PRE> FIF = Format Identifier File.</PRE> <PRE> FIF_UNKNOWN = -1 FIF_BMP FIF_ICO FIF_JPEG FIF_JNG FIF_KOALA FIF_LBM FIF_MNG FIF_PBM FIF_PBMRAW FIF_PCD FIF_PCX FIF_PGM FIF_PGMRAW FIF_PNG FIF_PPM FIF_PPMRAW FIF_RAS FIF_TARGA FIF_TIFF FIF_WBMP FIF_PSD FIF_IFF FIF_LBM FIF_CUT FIF_XBM FIF_XPM FIF_DDS FIF_GIF</PRE> <DT><STRONG><A NAME="item_GetFIFCount"><CODE>GetFIFCount</CODE> ()</A></STRONG><BR> <DD> <PRE> Return the max FIF value.</PRE> <DT><STRONG><A NAME="item_GetFormatFromFIF"><CODE>GetFormatFromFIF</CODE> (fif)</A></STRONG><BR> <DD> <PRE> Return the string format from FIF value.</PRE> <DT><STRONG><A NAME="item_GetFIFFromFormat"><CODE>GetFIFFromFormat</CODE> (format)</A></STRONG><BR> <DD> <PRE> Return FIF value from the string format.</PRE> <DT><STRONG><A NAME="item_GetFIFFromMime"><CODE>GetFIFFromMime</CODE> (mime)</A></STRONG><BR> <DD> <PRE> Return FIF value from the Mime string.</PRE> <DT><STRONG><A NAME="item_GetFIFFromFilename"><CODE>GetFIFFromFilename</CODE> (filename)</A></STRONG><BR> <DD> <PRE> Return FIF value from the filename string.</PRE> <DT><STRONG><A NAME="item_GetFIFFromFile"><CODE>GetFIFFromFile</CODE> (filename)</A></STRONG><BR> <DD> <PRE> Return FIF value from file data.</PRE> <DT><STRONG><A NAME="item_GetFIFFromData"><CODE>GetFIFFromData</CODE> (data)</A></STRONG><BR> <DD> <PRE> Return FIF value from memory data.</PRE> </DL> <P> <H2><A NAME="fif info functions">FIF info functions</A></H2> <DL> <DT><STRONG><A NAME="item_FIFExtensionList"><CODE>FIFExtensionList</CODE> (fif)</A></STRONG><BR> <DD> <PRE> Return a coma separated string of extension filenname.</PRE> <DT><STRONG><A NAME="item_FIFDescription"><CODE>FIFDescription</CODE> (fif)</A></STRONG><BR> <DD> <PRE> Return a description string of the format.</PRE> <DT><STRONG><A NAME="item_FIFRegExpr"><CODE>FIFRegExpr</CODE> (fif)</A></STRONG><BR> <DD> <PRE> Return a regexp string for identify format.</PRE> <DT><STRONG><A NAME="item_FIFMimeType"><CODE>FIFMimeType</CODE> (fif)</A></STRONG><BR> <DD> <PRE> Return a mime-type string of the format.</PRE> <DT><STRONG><A NAME="item_FIFSupportsReading"><CODE>FIFSupportsReading</CODE> (fif)</A></STRONG><BR> <DD> <PRE> This format can be read ?</PRE> <DT><STRONG><A NAME="item_FIFSupportsWriting"><CODE>FIFSupportsWriting</CODE> (fif)</A></STRONG><BR> <DD> <PRE> This format can be write ?</PRE> <DT><STRONG><A NAME="item_FIFSupportsExportBPP"><CODE>FIFSupportsExportBPP</CODE> (fif, bpp)</A></STRONG><BR> <DD> <PRE> This format can be write bpp image ?</PRE> <DT><STRONG><A NAME="item_FIFSupportsExportType"><CODE>FIFSupportsExportType</CODE> (fif, type)</A></STRONG><BR> <DD> <PRE> This format can export as image format type ?</PRE> <DT><STRONG><A NAME="item_FIFSupportsICCProfiles"><CODE>FIFSupportsICCProfiles</CODE> (fif)</A></STRONG><BR> <DD> <PRE> This format support ICC profile ?</PRE> </DL> <P> <H2><A NAME="colors functions">Colors functions</A></H2> <DL> <DT><STRONG><A NAME="item_LookupX11Color"><CODE>LookupX11Color</CODE> (string_color)</A></STRONG><BR> <DD> <PRE> Return Color of string color or undef if error. This color value can be an integer value or a [B,G,R,A] array.</PRE> <DT><STRONG><A NAME="item_LookupSVGColor"><CODE>LookupSVGColor</CODE> (string_color)</A></STRONG><BR> <DD> <PRE> Return Color of string color or undef if error. This color value can be an integer value or a [B,G,R,A] array.</PRE> </DL> <P> <HR> <H1><A NAME="dibitmap object">DIBITMAP OBJECT</A></H1> <P> <H2><A NAME="dibitmap new methods">DIBitmap New methods</A></H2> <DL> <DT><STRONG><A NAME="item_new"><CODE>new</CODE> ([width=100, height=100, bpp=24, redmask=0, bluemask=0, greemask=0, type=FIT_BITMAP])</A></STRONG><BR> <DD> <PRE> Allocate a Win32::GUI::DIBitmap object.</PRE> <PRE> Image storage type availlable.</PRE> <PRE> FIT_UNKNOWN = 0 : unknown type FIT_BITMAP = 1 : standard image : 1-, 4-, 8-, 16-, 24-, 32-bit FIT_UINT16 = 2 : array of unsigned short : unsigned 16-bit FIT_INT16 = 3 : array of short : signed 16-bit FIT_UINT32 = 4 : array of unsigned long : unsigned 32-bit FIT_INT32 = 5 : array of long : signed 32-bit FIT_FLOAT = 6 : array of float : 32-bit IEEE floating point FIT_DOUBLE = 7 : array of double : 64-bit IEEE floating point FIT_COMPLEX = 8 : array of FICOMPLEX : 2 x 64-bit IEEE floating point</PRE> <DT><STRONG><A NAME="item_newFromFile"><CODE>newFromFile</CODE> (filename, [flag])</A></STRONG><BR> <DD> <PRE> Create a Win32::GUI::DIBBitmap from a image file.</PRE> <PRE> Some format have special load flag :</PRE> <PRE> Type | Flag | Description -------+-------------------+-------------------------------------------------- ICO | ICO_MAKEALPHA | Convert to 32bpp and create an alpha channel from the AND-mask when loading JPEG | JPEG_FAST | Load file as fast as possible (sacrifing quality) | JPEG_ACCURATE | Load file with the best quality (sacrifing speed) PCD | PCD_BASE | Load picture sized 768 * 512. PCD | PCD_BASEDIV4 | Load picture sized 384 * 256. PCD | PCD_BASEDIV16 | Load picture sized 192 * 128. PNG | PNG_IGNOREGAMMA | Avoid gamma correction TARGA | TARGA_LOAD_RGB888 | Convert RGB555 and ARGB8888 to RGB888 TIFF | TIFF_CMYK | Load CMYK bitmap as 32 bit separated CMYK.</PRE> <DT><STRONG><A NAME="item_newFromData"><CODE>newFromData</CODE> (data, [flag])</A></STRONG><BR> <DD> <PRE> Create a Win32::GUI::DIBitmap from memory data.</PRE> <DT><STRONG><A NAME="item_newFromBitmap"><CODE>newFromBitmap</CODE> (hbitmap)</A></STRONG><BR> <DD> <PRE> Create a Win32::GUI::DIBitmap from a Win32::GUI::Bitmap.</PRE> <DT><STRONG><A NAME="item_newFromDC"><CODE>newFromDC</CODE> (hdc, [x, y, w, h] )</A></STRONG><BR> <DD> <PRE> Create a Win32::GUI::DIBitmap from a Win32::GUI::DC.</PRE> <PRE> You can capture only a portion of the HDC with x,y,w,h option.</PRE> <DT><STRONG><A NAME="item_newFromWindow"><CODE>newFromWindow</CODE> (hwnd, [flag = 0])</A></STRONG><BR> <DD> <PRE> Create a Win32::GUI::DIBitmap from a Win32::GUI::Window.</PRE> <PRE> flag = 0 : All the window is capture (with border) flag = 1 : Only the Client window is capture</PRE> </DL> <P> <H2><A NAME="dibitmap save methods">DIBitmap Save methods</A></H2> <DL> <DT><STRONG><A NAME="item_SaveToFile"><CODE>SaveToFile</CODE> (filename, [fif, flag])</A></STRONG><BR> <DD> <PRE> Save a Win32::GUI::DIBitmap in a file.</PRE> <PRE> Some format have special save format :</PRE> <PRE> Type | Flag | Description ------+---------------------+-------------------------------------------------- BMP | BMP_SAVE_RLE | Compress bitmap using RLE JPEG | JPEG_DEFAULT | Save with good quality (75:1) | JPEG_QUALITYSUPERB | Save with superb quality (100:1) | JPEG_QUALITYGOOD | Save with good quality (75:1) | JPEG_QUALITYNORMAL | Save with normal quality (50:1) | JPEG_QUALITYAVERAGE | Save with average quality (25:1) | JPEG_QUALITYBAD | Save with bad quality (10:1) PxM | PNM_DEFAULT | Save bitmap as a binary file | PNM_SAVE_RAW | Save bitmap as a binary file | PNM_SAVE_ASCII | Save bitmap as a ascii file TIFF | TIFF_DEFAULT | Save using CCITFAX4 compression for 1bit and PACKBITS for other | TIFF_CMYK | Store tags for separated CMYK (conbine with compresion flag) | TIFF_PACKBITS | Save using PACKBITS compression | TIFF_DEFLATE | Save using DEFLATE compression | TIFF_ADOBE_DEFLATE | Save using Adobe DEFLATE compression | TIFF_NONE | Save without compression | TIFF_CCITTFAX3 | Save using CCITT Group 3 fax encoding | TIFF_CCITTFAX4 | Save using CCITT Group 4 fax encoding | TIFF_LZW | Save using LZW compression</PRE> <PRE> A tempory convertion is done for 16-32bit JPEG and 16bit PNG before saving.</PRE> <DT><STRONG><A NAME="item_SaveToData"><CODE>SaveToData</CODE> (fif, [flag])</A></STRONG><BR> <DD> <PRE> Save a Win32::GUI::DIBitmap in memory.</PRE> </DL> <P> <H2><A NAME="dibitmap information methods">DIBitmap information methods</A></H2> <DL> <DT><STRONG><A NAME="item_GetWidth"><CODE>GetWidth</CODE> () or <CODE>Width</CODE></A></STRONG><BR> <DD> <PRE> Return the Width of the image.</PRE> <DT><STRONG><A NAME="item_GetHeight"><CODE>GetHeight</CODE> () or <CODE>Height</CODE></A></STRONG><BR> <DD> <PRE> Return the Height of the image.</PRE> <DT><STRONG><A NAME="item_GetColorsUsed"><CODE>GetColorsUsed</CODE> ()</A></STRONG><BR> <DD> <PRE> Return the number of color use in the image.</PRE> <DT><STRONG><A NAME="item_GetBpp"><CODE>GetBpp</CODE> ()</A></STRONG><BR> <DD> <PRE> Return the bit per pixel use in the image.</PRE> <DT><STRONG><A NAME="item_GetRedMask"><CODE>GetRedMask</CODE> ()</A></STRONG><BR> <DD> <PRE> Return a bit pattern describing the red color copmponent of a pixel.</PRE> <DT><STRONG><A NAME="item_GetGreenMask"><CODE>GetGreenMask</CODE> ()</A></STRONG><BR> <DD> <PRE> Return a bit pattern describing the green color copmponent of a pixel.</PRE> <DT><STRONG><A NAME="item_GetBlueMask"><CODE>GetBlueMask</CODE> ()</A></STRONG><BR> <DD> <PRE> Return a bit pattern describing the blue color copmponent of a pixel.</PRE> <DT><STRONG><A NAME="item_GetColorType"><CODE>GetColorType</CODE> ()</A></STRONG><BR> <DD> <PRE> Return the color type of the image.</PRE> <PRE> Values : FIC_MINISWHITE = 0 : Monochrome bitmap, with first palette entry is white FIC_MINISBLACK = 1 : Monochrome bitmap, with first palette entry is black Palletised bitmap, with greyscale palette FIC_RGB = 2 : RGB color model FIC_PALETTE = 3 : Color map indexed FIC_RGBALPHA = 4 : RGB color model with alpha channel FIC_CMYK = 5 : CMYK color model</PRE> <DT><STRONG><A NAME="item_GetPitch"><CODE>GetPitch</CODE> ()</A></STRONG><BR> <DD> <PRE> Return pitch of data image. Pitch it's the width of the bitmap in bytes, rounded to the next 32 bit boundary.</PRE> <DT><STRONG><A NAME="item_GetDotsPerMeterX"><CODE>GetDotsPerMeterX</CODE> ()</A></STRONG><BR> <DD> <PRE> Return dots per meter on X.</PRE> <DT><STRONG><A NAME="item_GetDotsPerMeterY"><CODE>GetDotsPerMeterY</CODE> ()</A></STRONG><BR> <DD> <PRE> Return dots per meter on Y.</PRE> <DT><STRONG><A NAME="item_GetInfoHeader"><CODE>GetInfoHeader</CODE> ()</A></STRONG><BR> <DD> <PRE> Return a windows BITMAPINFOHEADER struct.</PRE> <DT><STRONG><A NAME="item_GetInfo"><CODE>GetInfo</CODE> ()</A></STRONG><BR> <DD> <PRE> Return a window BITMAPINFO struct.</PRE> <DT><STRONG><A NAME="item_GetSize"><CODE>GetSize</CODE> ()</A></STRONG><BR> <DD> <PRE> Return memory size of data for the image</PRE> <DT><STRONG><A NAME="item_GetBits"><CODE>GetBits</CODE> ()</A></STRONG><BR> <DD> <PRE> Return data of the image</PRE> <DT><STRONG><A NAME="item_IsTransparent"><CODE>IsTransparent</CODE> ()</A></STRONG><BR> <DD> <PRE> Image is transparent.</PRE> <DT><STRONG><A NAME="item_GetImageType"><CODE>GetImageType</CODE> ()</A></STRONG><BR> <DD> <PRE> Return image type.</PRE> </DL> <P> <H2><A NAME="dibitmap and gd">DIBitmap and GD</A></H2> <DL> <DT><STRONG><A NAME="item_newFromGD"><CODE>newFromGD</CODE> (gd, newGD=0)</A></STRONG><BR> <DD> <PRE> Create a Win32::GUI::DIBitmap from a GD image New object have same size and format, gd image copy into.</PRE> <PRE> Flag newGD is for new GD version (> 2.0) with trueColor bitmap. Default value force 8 bit bitmap.</PRE> <DT><STRONG><A NAME="item_CopyFromGD"><CODE>CopyFromGD</CODE> (gd, newGD=0)</A></STRONG><BR> <DD> <PRE> Copy GD image into Win32::GUI::DIBitmap. GD and Win32::GUI::DIBitmap must have same size and format.</PRE> <DT><STRONG><A NAME="item_CopyToGD"><CODE>CopyToGD</CODE> (gd, newGD=0)</A></STRONG><BR> <DD> <PRE> Copy Win32::GUI::DIBitmap into GD image. GD and Win32::GUI::DIBitmap must have same size and format.</PRE> </DL> <P> <H2><A NAME="dibitmap pixels and background methods">DIBitmap Pixels and Background methods</A></H2> <DL> <DT><STRONG><A NAME="item_GetPixel"><CODE>GetPixel</CODE> (x, y)</A></STRONG><BR> <DD> <PRE> Return pixel value color at x, y or undef if error. For image with BPP <= 8 return palette index color. For image with BPP > 8 return color value. This color value can be an integer value or a [B,G,R,A] array.</PRE> <DT><STRONG><A NAME="item_SetPixel"><CODE>SetPixel</CODE> (x, y, color | Blue, Green, Red, [Alpha])</A></STRONG><BR> <DD> <PRE> Set pixel value color at x, y. Return boolean value. For image with BPP <= 8, it's palette color index. For image with BPP > 8, arguments can an integer color value or B,G,R,[A] values.</PRE> <DT><STRONG><A NAME="item_HasBackgroundColor"><CODE>HasBackgroundColor</CODE> ()</A></STRONG><BR> <DD> <PRE> Indicate if image have Background Color.</PRE> <DT><STRONG><A NAME="item_GetBackgroundColor"><CODE>GetBackgroundColor</CODE> ()</A></STRONG><BR> <DD> <PRE> Return Background Color or undef if error. This color value can be an integer value or a [B,G,R,A] array.</PRE> <DT><STRONG><A NAME="item_SetBackgroundColor"><CODE>SetBackgroundColor</CODE> (color | Blue, Green, Red, [Alpha])</A></STRONG><BR> <DD> <PRE> Set Background Color. Return boolean value.</PRE> </DL> <P> <H2><A NAME="dibitmap convertion methods">DIBitmap Convertion methods</A></H2> <DL> <DT><STRONG><A NAME="item_ConvertToBitmap"><CODE>ConvertToBitmap</CODE> ()</A></STRONG><BR> <DD> <PRE> Convert a Win32::GUI::DIBitmap to a new Win32::GUI::Bitmap.</PRE> <DT><STRONG><A NAME="item_ConvertTo4its"><CODE>ConvertTo4its</CODE> ()</A></STRONG><BR> <DD> <PRE> Convert a Win32::GUI::DIBitmap to a new 4 bits Win32::GUI::DIBitmap.</PRE> <DT><STRONG><A NAME="item_ConvertTo8Bits"><CODE>ConvertTo8Bits</CODE> ()</A></STRONG><BR> <DD> <PRE> Convert a Win32::GUI::DIBitmap to a new 8 bits (grayscale) Win32::GUI::DIBitmap. See ColorQuantize for convert to 8 bits colors.</PRE> <DT><STRONG><A NAME="item_ConvertTo16Bits555"><CODE>ConvertTo16Bits555</CODE> ()</A></STRONG><BR> <DD> <PRE> Convert a Win32::GUI::DIBitmap to a new 16 bits Win32::GUI::DIBitmap (555 format).</PRE> <DT><STRONG><A NAME="item_ConvertTo16Bits565"><CODE>ConvertTo16Bits565</CODE> ()</A></STRONG><BR> <DD> <PRE> Convert a Win32::GUI::DIBitmap to a new 16 bits Win32::GUI::DIBitmap (565 format).</PRE> <DT><STRONG><A NAME="item_ConvertTo24Bits"><CODE>ConvertTo24Bits</CODE> ()</A></STRONG><BR> <DD> <PRE> Convert a Win32::GUI::DIBitmap to a new 24 bits Win32::GUI::DIBitmap.</PRE> <DT><STRONG><A NAME="item_ConvertTo32Bits"><CODE>ConvertTo32Bits</CODE> ()</A></STRONG><BR> <DD> <PRE> Convert a Win32::GUI::DIBitmap to a new 32 bits Win32::GUI::DIBitmap.</PRE> <DT><STRONG><A NAME="item_ColorQuantize"><CODE>ColorQuantize</CODE> ([flag = FIQ_WUQUANT])</A></STRONG><BR> <DD> <PRE> Convert a Win32::GUI::DIBitmap to a new 8 bits (colorscale) Win32::GUI::DIBitmap. None 24 bits image are converted to 24bits before.</PRE> <PRE> Flag possible value : FIQ_WUQUANT = Xiaolin Wu color quantization algorithm FIQ_NNQUANT = NeuQuant neural-net quantization algorithm by Anthony Dekker</PRE> <DT><STRONG><A NAME="item_Threshold"><CODE>Threshold</CODE> (T)</A></STRONG><BR> <DD> <PRE> Convert a Win32::GUI::DIBitmap to a new 1 bit Win32::GUI::DIBitmap using a Threshold between 0..255.</PRE> <DT><STRONG><A NAME="item_Dither"><CODE>Dither</CODE> ([flag = FID_FS])</A></STRONG><BR> <DD> <PRE> Convert a Win32::GUI::DIBitmap to a new 1 bit Win32::GUI::DIBitmap.</PRE> <PRE> Flag possible value : FID_FS = Floyd and Steinberg error diffusion algorithm. FID_BAYER4x4 = Bayer ordered dispersed dot dithering (order 2 - 4*4 matrix) FID_BAYER8x8 = Bayer ordered dispersed dot dithering (order 3 - 8*8 matrix) FID_CLUSTER6x6 = Ordered clustered dot dithering (order 3 - 6*6 matrix) FID_CLUSTER8x8 = Ordered clustered dot dithering (order 4 - 8*8 matrix) FID_CLUSTER16x16 = Ordered clustered dot dithering (order 8 - 16*16 matrix)</PRE> <DT><STRONG><A NAME="item_ConvertToStandardType"><CODE>ConvertToStandardType</CODE> ([scale_linear=TRUE])</A></STRONG><BR> <DD> <DT><STRONG><A NAME="item_ConvertToType"><CODE>ConvertToType</CODE> (type, [scale_linear=TRUE])</A></STRONG><BR> <DD> <PRE> For type see new method.</PRE> </DL> <P> <H2><A NAME="dibitmap rotating and flipping">DIBitmap Rotating and flipping</A></H2> <DL> <DT><STRONG><A NAME="item_Rotate"><CODE>Rotate</CODE> (angle)</A></STRONG><BR> <DD> <PRE> Create a new rotated Win32::GUI::DIBitmap (8,24,32 bits only)</PRE> <PRE> This function rotates an 8-bit greyscale, 24- or 32-bit image by means of 3 shears. The angle of rotation is specified by the angle parameter in degrees. Rotation occurs around the center of the image area. Rotated image retains size and aspect ratio of source image (destination image size is usually bigger), so that this function should be used when rotating an image by 90°, 180° or 270°.</PRE> <DT><STRONG><A NAME="item_RotateEx"><CODE>RotateEx</CODE> (angle, x_shift, y_shift, x_origin, y_origin, use_mask)</A></STRONG><BR> <DD> <PRE> Create a new rotated/translated Win32::GUI::DIBitmap (8,24,32 bits only)</PRE> <PRE> This function performs a rotation and / or translation of an 8-bit greyscale, 24- or 32-bit image, using a 3rd order (cubic) B-Spline. The rotated image will have the same width and height as the source image, so that this function is better suited for computer vision and robotics. The angle of rotation is specified by the angle parameter in degrees. Horizontal and vertical image translations (in pixel units) are specified by the x_shift and y_shift parameters. Rotation occurs around the center specified by x_origin and y_origin, also given in pixel units. When use_mask is set to TRUE, the irrelevant part of the image is set to a black color, otherwise, a mirroring technique is used to fill irrelevant pixels.</PRE> <DT><STRONG><A NAME="item_FlipHorizontal"><CODE>FlipHorizontal</CODE> ()</A></STRONG><BR> <DD> <PRE> Flip DIBitmap dib horizontally along the vertical axis.</PRE> <DT><STRONG><A NAME="item_FlipVertical"><CODE>FlipVertical</CODE> ()</A></STRONG><BR> <DD> <PRE> Flip DIBitmap vertically along the horizontal axis.</PRE> </DL> <P> <H2><A NAME="dibitmap upsampling / downsampling">DIBitmap UpSampling / DownSampling</A></H2> <DL> <DT><STRONG><A NAME="item_Rescale"><CODE>Rescale</CODE> (new_width, new_heigth, filter=FILTER_BOX)</A></STRONG><BR> <DD> <PRE> Create a new size Win32::GUI::DIBitmap (32 bits only)</PRE> <PRE> This function performs resampling (or scaling, zooming) of a 32-bit image to the desired destination width and height. Resampling refers to changing the pixel dimensions (and therefore display size) of an image. When you downsample (or decrease the number of pixels), information is deleted from the image. When you upsample (or increase the number of pixels), new pixels are added based on color values of existing pixels. You specify an interpolation filter to determine how pixels are added or deleted.</PRE> <PRE> The following filters can be used as resampling filters: FILTER_BOX = Box, pulse, Fourier window, 1st order (constant) B-Spline FILTER_BILINEAR = Bilinear filter FILTER_BSPLINE = 4th order (cubic) B-Spline FILTER_BICUBIC = Mitchell and Netravali's two-param cubic filter FILTER_CATMULLROM = Catmull-Rom spline, Overhauser spline FILTER_LANCZOS3 = Lanczos-windowed sinc filter</PRE> </DL> <P> <H2><A NAME="dibitmap color manipulation">DIBitmap Color manipulation</A></H2> <DL> <DT><STRONG><A NAME="item_AdjustGamma"><CODE>AdjustGamma</CODE> (gamma)</A></STRONG><BR> <DD> <PRE> Adjust Gamma of Win32::GUI::DIBitmap (8,24,32 bits only)</PRE> <PRE> The gamma parameter represents the gamma value to use (gamma > 0). A value of 1.0 leaves the image alone, less than one darkens it, and greater than one lightens it.</PRE> <DT><STRONG><A NAME="item_AdjustBrightness"><CODE>AdjustBrightness</CODE> (percentage)</A></STRONG><BR> <DD> <PRE> Adjust Brightness of Win32::GUI::DIBitmap (8,24,32 bits only)</PRE> <PRE> Adjusts the brightness of a 8-, 24- or 32-bit image by a certain amount. This amount is given by the percentage parameter, where percentage is a value between [-100..100]. A value 0 means no change, less than 0 will make the image darker and greater than 0 will make the image brighter.</PRE> <DT><STRONG><A NAME="item_AdjustContrast"><CODE>AdjustContrast</CODE> (percentage)</A></STRONG><BR> <DD> <PRE> Adjust ContrastCreate of Win32::GUI::DIBitmap (8,24,32 bits only)</PRE> <PRE> Adjusts the contrast of a 8-, 24- or 32-bit image by a certain amount. This amount is given by the percentage parameter, where percentage is a value between [-100..100]. A value 0 means no change, less than 0 will decrease the contrast and greater than 0 will increase the contrast of the image.</PRE> <DT><STRONG><A NAME="item_Invert"><CODE>Invert</CODE> ()</A></STRONG><BR> <DD> <PRE> Inverts each pixel data.</PRE> <DT><STRONG><A NAME="item_GetHistogram"><CODE>GetHistogram</CODE> (channel)</A></STRONG><BR> <DD> <PRE> Return a histogram array[0..255] of a Win32::GUI::DIBitmap (8,24,32 bits only)</PRE> <PRE> Computes the image histogram. For 24-bit and 32-bit images, histogram can be computed from red, green, blue and black channels. For 8-bit images, histogram is computed from the black channel.</PRE> </DL> <P> <H2><A NAME="dibitmap channel methods">DIBitmap Channel methods</A></H2> <DL> <DT><STRONG><A NAME="item_Channel_Constante"><CODE>Channel Constante</CODE></A></STRONG><BR> <DD> <PRE> FICC_RGB = 0 : Use red, green and blue channels FICC_RED = 1 : Use red channel FICC_GREEN = 2 : Use green channel FICC_BLUE = 3 : Use blue channel FICC_ALPHA = 4 : Use alpha channel FICC_BLACK = 5 : Use black channel FICC_REAL = 6 : Complex images: use real part FICC_IMAG = 7 : Complex images: use imaginary part FICC_MAG = 8 : Complex images: use magnitude FICC_PHASE = 9 : Complex images: use phase</PRE> <DT><STRONG><A NAME="item_GetChannel"><CODE>GetChannel</CODE> (channel)</A></STRONG><BR> <DD> <PRE> Return a 8bits channel Win32::GUI::DIBitmap.</PRE> <PRE> Retrieves the red, green, blue or alpha channel of a 24 or 32-bit BGR[A] image. Channel is the color channel to extract.</PRE> <PRE> 24,32 only</PRE> <DT><STRONG><A NAME="item_SetChannel"><CODE>SetChannel</CODE> (channel, 8bit_image)</A></STRONG><BR> <DD> <PRE> Set the red, green, blue or alpha channel of a 24 or 32-bit BGR[A] image. Channel is the color channel to set.</PRE> <PRE> 24,32 only</PRE> <DT><STRONG><A NAME="item_GetComplexChannel"><CODE>GetComplexChannel</CODE> (channel)</A></STRONG><BR> <DD> <PRE> Return a complex channel Win32::GUI::DIBitmap.</PRE> <PRE> Retrieves the red, green, blue or alpha channel of a 24 or 32-bit BGR[A] image. Channel is the color channel to extract.</PRE> <PRE> 24,32 only</PRE> <DT><STRONG><A NAME="item_SetComplexChannel"><CODE>SetComplexChannel</CODE> (channel, 8bit_image)</A></STRONG><BR> <DD> <PRE> Set the red, green, blue or alpha channel of a 24 or 32-bit BGR[A] image. Channel is the complex channel to set.</PRE> <PRE> 24,32 only</PRE> </DL> <P> <H2><A NAME="dibitmap copy/paste methods">DIBitmap Copy/Paste methods</A></H2> <DL> <DT><STRONG><A NAME="item_Clone"><CODE>Clone</CODE> ()</A></STRONG><BR> <DD> <PRE> Clone a Win32::GUI::DIBitmap to a new Win32::GUI::Bitmap.</PRE> <DT><STRONG><A NAME="item_Copy"><CODE>Copy</CODE> (left, top, right, botton)</A></STRONG><BR> <DD> <PRE> Return a new Win32::GUI::Bitmap with a sub part Win32::GUI::DIBitmap (8, 16, 24 or 32 only).</PRE> <PRE> Left specifies the left position of the cropped rectangle. Top specifies the top position of the cropped rectangle. Right specifies the right position of the cropped rectangle. Bottom specifies the bottom position of the cropped rectangle.</PRE> <DT><STRONG><A NAME="item_Paste"><CODE>Paste</CODE> (source_image, left, top, alpha)</A></STRONG><BR> <DD> <PRE> Returns TRUE if successful, FALSE otherwise ( 8, 16, 24 or 32 only).</PRE> <PRE> Alpha blend or combine a sub part image with the current dib image. The bit depth must be greater than or equal to the bit depth of source image.</PRE> <PRE> Alpha is alpha blend factor. The source and destination images are alpha blended if alpha=0..255. If alpha > 255, then the source image is combined to the destination image.</PRE> <DT><STRONG><A NAME="item_Composite"><CODE>Composite</CODE> ([useFileBkg=FALSE, imageBkg=undef appBkColor=undef)</A></STRONG><BR> <DD> </DL> <P> <H2><A NAME="dibitmap devise context methods">DIBitmap Devise Context methods</A></H2> <DL> <DT><STRONG><A NAME="item_CopyToDC"><CODE>CopyToDC</CODE> (hdc, [xd=0, yd=0, w=0, h=0, xs=0, ys=0])</A></STRONG><BR> <DD> <PRE> Copy Win32::GUI::DIBitmap to a Win32::GUI::DC.</PRE> <PRE> Specify the destination rectangle with xd,yd,w,h option. Specify the begining of the image with xs,ys option. The image copy keep the same size.</PRE> <DT><STRONG><A NAME="item_AlphaCopyToDC"><CODE>AlphaCopyToDC</CODE> (hdc, [xd=0, yd=0, w=0, h=0, xs=0, ys=0])</A></STRONG><BR> <DD> <PRE> Copy Win32::GUI::DIBitmap to a Win32::GUI::DC with transparency / alpha channel support.</PRE> <PRE> Specify the destination rectangle with xd,yd,w,h option. Specify the begining of the image with xs,ys option. The image copy keep the same size.</PRE> <DT><STRONG><A NAME="item_StretchToDC"><CODE>StretchToDC</CODE> (hdc, [xd=0, yd=0, wd=0, hd=0, xs=0, ys=0, ws=0, hs=0, flag=SRCCOPY])</A></STRONG><BR> <DD> <PRE> Copy Win32::GUI::DIBitmap to a Win32::GUI::DC.</PRE> <PRE> Specify the destination rectangle with xd,yd,wd,hd option. Specify the image source rectangle ith xs,ys,ws,hs option. The image copy is resize if necessary.</PRE> <PRE> For flag option, see StretchDIBits win32 function.</PRE> <DT><STRONG><A NAME="item_AlphaStretchToDC"><CODE>AlphaStretchToDC</CODE> (hdc, [xd=0, yd=0, wd=0, hd=0, xs=0, ys=0, ws=0, hs=0)</A></STRONG><BR> <DD> <PRE> Copy Win32::GUI::DIBitmap to a Win32::GUI::DC with transparency / alpha channel support.</PRE> <PRE> Specify the destination rectangle with xd,yd,wd,hd option. Specify the image source rectangle ith xs,ys,ws,hs option. The image copy is resize if necessary.</PRE> </DL> <P> <HR> <H1><A NAME="mdibitmap object">MDIBITMAP OBJECT</A></H1> <P> <H2><A NAME="mdibitmap new methods">MDIBitmap New methods</A></H2> <DL> <DT><STRONG><CODE>new</CODE> (filename, fif=-1, keep_cache_in_memory=0)</STRONG><BR> <DD> <PRE> Create a new Win32::GUI::MDIBBitmap in edit mode.</PRE> <DT><STRONG><CODE>newFromFile</CODE> (filename, read_only=1, keep_cache_in_memory=0)</STRONG><BR> <DD> <PRE> Create a Win32::GUI::MDIBBitmap from a image file.</PRE> </DL> <P> <H2><A NAME="mdibitmap get methods">MDIBitmap Get methods</A></H2> <DL> <DT><STRONG><A NAME="item_GetPageCount"><CODE>GetPageCount</CODE></A></STRONG><BR> <DD> <PRE> Return page count.</PRE> <DT><STRONG><A NAME="item_GetLockedPageNumbers"><CODE>GetLockedPageNumbers</CODE></A></STRONG><BR> <DD> <PRE> Return a list of locked page index.</PRE> </DL> <P> <H2><A NAME="mdibitmap lock methods">MDIBitmap Lock methods</A></H2> <DL> <DT><STRONG><A NAME="item_LockPage"><CODE>LockPage</CODE> ([index = 0])</A></STRONG><BR> <DD> <PRE> Lock and return a page (Win32::GUI::DIBitmap object).</PRE> <DT><STRONG><A NAME="item_UnlockPage"><CODE>UnlockPage</CODE> (Win32::GUI::DIBitmap, [update = 0])</A></STRONG><BR> <DD> <PRE> Unlock a locked page (Win32::GUI::DIBitmap object). Update indicate if the page must be updated.</PRE> </DL> <P> <H2><A NAME="mdibitmap edit methods">MDIBitmap Edit methods</A></H2> <DL> <DT><STRONG><A NAME="item_AppendPage"><CODE>AppendPage</CODE> (Win32::GUI::DIBitmap)</A></STRONG><BR> <DD> <PRE> Append a Win32::GUI::DIBitmap to a Win32::GUI::MDIBBitmap.</PRE> <DT><STRONG><A NAME="item_InsertPage"><CODE>InsertPage</CODE> (Win32::GUI::DIBitmap, [index = 0])</A></STRONG><BR> <DD> <PRE> Insert a Win32::GUI::DIBitmap in a Win32::GUI::MDIBBitmap.</PRE> <DT><STRONG><A NAME="item_DeletePage"><CODE>DeletePage</CODE> ([index = 0])</A></STRONG><BR> <DD> <PRE> Delete a page from a Win32::GUI::MDIBBitmap.</PRE> <DT><STRONG><A NAME="item_MovePage"><CODE>MovePage</CODE> (to_index, [from_index = 0])</A></STRONG><BR> <DD> <PRE> Move a page in a Win32::GUI::MDIBBitmap.</PRE> </DL> <P> <HR> <H1><A NAME="author">AUTHOR</A></H1> <PRE> Laurent Rocher (lr...@cp...) HomePage : <A HREF="http://perso.club-internet.fr/rocherl/Win32GUI.html">http://perso.club-internet.fr/rocherl/Win32GUI.html</A></PRE> <P> <HR> <H1><A NAME="see also">SEE ALSO</A></H1> <P>Win32::GUI</P> </BODY> </HTML> --- NEW FILE: MANIFEST --- Readme Changes DIBitmap.pm DIBitmap.xs TYPEMAP Makefile.PL MANIFEST --- NEW FILE: Changes --- Revision history for Perl extension FreeImage. 0.15 28 / 11 / 2004 - Use FreeImage 3.5.1 (GIF support and LZW compression, improvements, bug fix, ...) - New Win32::GUI::DIBitmap method -> GetFIFMimeType -> ConvertTo4Bits 0.14 21 / 02 / 2004 - Use FreeImage 3.2.0 - New Win32::GUI::DIBitmap method -> Image internal format -> Pixel and and Background methods + SetPixel + GetPixel + HasBackgroundColor + GetBackgroundColor + SetBackgroundColor -> Conversion with new internal type -> Chanel processing + GetComplexChannel + SetComplexChannel 0.13 08 / 12 / 2003 - Correct memory leak in NewFromWindow, newFromDC [Thank to Steve Pick] 0.12 17 / 11 / 2003 - Use FreeImage 3.0.4 0.11 11 / 11 / 2003 - Use FreeImage 3.0.3 0.10 28 / 10 / 2003 - Use FreeImage 3.0.2 0.09 24 / 10 / 2003 - Use FreeImage 3.0.1 0.08 28 / 09 / 2003 - Use FreeImage 3.0.0 - New format : XBM, XPM - New Win32::GUI::DIBitmap method -> Conversion + Threshold : Convert to 1 bit + Dither : Convert to 1 bit -> Color manipulation + AdjustGamma + AdjustBrightness + AdjustContrast + Invert : Invert effect + GetHistogram : Get Color histogram -> Chanel processing + GetChannel + SetChannel -> Copy/Paste + Copy + Paste -> Rotation / flipping + Rotate : Create a rotated Bitmap (>= 8 bits only) + RotateEx : Create a rotated/translated Bitmap (>= 8 bits only) + FlipVerticaly : Flip Verticaly effect + FlipHorizontaly : Flip Horizontaly effect -> UpSampling / DownSampling + Rescale : Create a rescaled Bitmap (32 bits only) - New TIFF save format option. - New sample : read image from zipfile. 0.07 24 / 04 / 2003 - New Win32::GUI::DIBitmap method + newFromGD + CopyFromGD, CopyToGD : Must have Same Size and BPP. - UPDATE 1 : Add switch for old GD version - UPDATE 2 : Correct upside down bitmap bug 0.06 28 / 05 / 2002 - Use FreeImage 2.5.3 - Add FreeImage Multipaging interface 0.05 14 / 01 / 2002 - Use FreeImage 2.5.0 - Add FreeImage Multipaging interface (experimental in this release) - New Win32::GUI::DIBitmap method + Clone + AlphaCopyToDC + AlphaStrechToDC 0.04 29 / 10 / 2001 - Use FreeImage 2.4.2 - Fix bug in jpeg plug-in 0.03 18 / 08 / 2001 - Correct Bug when capture screen if display isn't in 32 bits - Add new function GetColorType - ColorQuantize work if image isn't in 24 bits - Add more Documentation 0.02 15 / 08 / 2001 - Use FreeImage 2.4.1 - Some little change 0.01 21 / 03 / 2001 - original version; created by h2xs 1.19 - First build Win32::GUI::DIBitmap --- NEW FILE: Readme --- Win32::GUI::DIBitmap 0.14 ========================= Win32::GUI::DIBitmap add new reading/writing bitmap formats to Win32::GUI and some image manipulation. INSTALLATION Download FreeImage source code at http://freeimage.sourceforge.net/ Build the FreeImage static lib with MSVC project. Copy the FreeImage.lib and FreeImage.h in the extlib directory. To install this module type the following: perl Makefile.PL make make install DEPENDENCIES This module requires these other modules and libraries: Win32::GUI FreeImage lirary (http://freeimage.sourceforge.net/) WEB PAGE AND PPM REPOSITORY See: http://perso.club-internet.fr/rocherl/Win32GUI.html COPYRIGHT AND LICENCE Copyright 2003 by Laurent Rocher (lr...@cp...). This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. See <http://www.perl.com/perl/misc/Artistic.html>. --- NEW FILE: DIBitmap.xs --- /**********************************************************************/ /* D I B i t m a p . x s */ /**********************************************************************/ #include "EXTERN.h" #include "perl.h" #include "XSUB.h" #define FREEIMAGE_LIB #include ".\extlib\FreeImage.h" /*--------------------------------------------------------------------*/ // #define IO_HANDLER_DEBUG #define BREAK_POINT __asm { int 3 }; /*--------------------------------------------------------------------*/ [...2810 lines suppressed...] ################################################################## ################################################################## # # Free routine # # # DESTROY # void DESTROY(mdib) Win32::GUI::MDIBitmap mdib CODE: FreeImage_CloseMultiBitmap(mdib); # # ################################################################## --- NEW FILE: DIBitmap.pm --- package Win32::GUI::DIBitmap; use strict; use vars qw($VERSION @ISA @EXPORT @EXPORT_OK $AUTOLOAD); use Carp 'croak','carp'; require Exporter; require DynaLoader; require AutoLoader; @ISA = qw(Exporter DynaLoader); # Items to export into callers namespace by default. Note: do not export # names by default without a very good reason. Use EXPORT_OK instead. # Do not simply export all your public functions/methods/constants. @EXPORT = qw ( FIF_UNKNOWN FIF_BMP FIF_CUT [...1022 lines suppressed...] Insert a Win32::GUI::DIBitmap in a Win32::GUI::MDIBBitmap. =item C<DeletePage> ([index = 0]) Delete a page from a Win32::GUI::MDIBBitmap. =item C<MovePage> (to_index, [from_index = 0]) Move a page in a Win32::GUI::MDIBBitmap. =head1 AUTHOR Laurent Rocher (lr...@cp...) HomePage : http://perso.club-internet.fr/rocherl/Win32GUI.html =head1 SEE ALSO Win32::GUI =cut --- NEW FILE: TYPEMAP --- TYPEMAP LPCTSTR T_PV LPCSTR T_PV LPTSTR T_PV DWORD T_IV UINT T_IV BOOL T_IV FREE_IMAGE_FORMAT T_IV FREE_IMAGE_QUANTIZE T_IV FREE_IMAGE_COLOR_TYPE T_IV FREE_IMAGE_DITHER T_IV FREE_IMAGE_FILTER T_IV FREE_IMAGE_COLOR_CHANNEL T_IV FREE_IMAGE_TYPE T_IV Win32::GUI::DIBitmap T_PTROBJ Win32::GUI::DIBitmap::Ext T_PTROBJ Win32::GUI::MDIBitmap T_PTROBJ HBITMAP T_HANDLE HDC T_HANDLE HWND T_HANDLE GD::Image T_PTROBJ ################################################################################ INPUT T_HANDLE if(SvROK($arg)) { if(hv_fetch((HV*)SvRV($arg), \"-handle\", 7, 0) != NULL) $var = ($type) SvIV(*(hv_fetch((HV*)SvRV($arg), \"-handle\", 7, 0))); else $var = NULL; } else $var = ($type) SvIV($arg); ################################################################################ OUTPUT T_HANDLE sv_setiv($arg, (IV) $var); |
Update of /cvsroot/perl-win32-gui/Win32-GUI-DIBitmap/samples In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv32157/samples Added Files: INFO2.PL Zapotec.zip demo.pl demo2.pl info.pl piv.pl test1.pl test10.pl test11.pl test12.pl test13.pl test14.pl test15.pl test2.pl test3.pl test4.pl test5.pl test6.pl test7.pl test8.pl test9.pl zipimage.PL Log Message: Added to repository --- NEW FILE: test11.pl --- #perl -w # # Test with Win32::GUI # # Functions Test : # - newFromBitmap # - CopyToDC # - AlphaCopyToDC # - AlphaStretchToDC use Win32::GUI; use Win32::GUI::DIBitmap; $W = new Win32::GUI::Window ( -title => "Win32::GUI::DIBitmap test", -left => 100, -top => 100, -width => 400, -height => 400, -name => "Window", ) or die "new Window"; $dib = newFromFile Win32::GUI::DIBitmap ('bmp/zapotec.bmp') or die "newFromFile"; $dibalpha = newFromFile Win32::GUI::DIBitmap ('bmp/small.tga') or die "newFromFile"; print "transparent : ", $dibalpha->IsTransaparent(), "\n"; print "BPP : ", $dibalpha->GetBPP(), "\n"; $W->Show(); Win32::GUI::Dialog(); sub Window_Resize { Paint(); } sub Window_Activate { Paint(); } sub Window_Terminate { $W->PostQuitMessage(0); } sub Paint { ($width, $height) = ($W->GetClientRect)[2..3]; $dc = new Win32::GUI::DC ($W); $dib->StretchToDC($dc, 10, 10, $width - 20, $height - 20); $dibalpha->CopyToDC($dc); $dibalpha->AlphaCopyToDC($dc, 200); $dibalpha->AlphaStretchToDC($dc, 0, 200, 260, 200 ); } --- NEW FILE: info.pl --- #perl -w use Win32::GUI::DIBitmap; print Win32::GUI::DIBitmap::GetVersion(), "\n"; print Win32::GUI::DIBitmap::GetCopyright(), "\n"; $count = Win32::GUI::DIBitmap::GetFIFCount(); print "Format\tReading\tWriting\tDescription\n"; for ($fif = 0; $fif < $count; $fif++) { $format = Win32::GUI::DIBitmap::GetFormatFromFIF($fif); $desc = Win32::GUI::DIBitmap::FIFDescription($fif); $read = "N"; $read = "Y" if (Win32::GUI::DIBitmap::FIFSupportsReading($fif)); $write = "N"; $write = "Y" if (Win32::GUI::DIBitmap::FIFSupportsWriting($fif)); $export = ""; $export .= " 1" if (Win32::GUI::DIBitmap::FIFSupportsExportBPP($fif, 1)); $export .= " 4" if (Win32::GUI::DIBitmap::FIFSupportsExportBPP($fif, 4)); $export .= " 8" if (Win32::GUI::DIBitmap::FIFSupportsExportBPP($fif, 8)); $export .= " 16" if (Win32::GUI::DIBitmap::FIFSupportsExportBPP($fif, 16)); $export .= " 24" if (Win32::GUI::DIBitmap::FIFSupportsExportBPP($fif, 24)); $export .= " 32" if (Win32::GUI::DIBitmap::FIFSupportsExportBPP($fif, 32)); $export = " [Export =$export]" unless ($export eq ""); print "$format\t$read\t$write\t$desc$export\n"; } --- NEW FILE: test4.pl --- #perl -w # # Test with Win32::GUI # # Functions Test : # - newFromFile # - ConvertToBitmap use Win32::GUI; use Win32::GUI::DIBitmap; $W = new Win32::GUI::Window ( -title => "Win32::GUI::DIBitmap test", -left => 100, -top => 100, -width => 400, -height => 400, -name => "Window", ) or die "new Window"; ($width, $height) = ($W->GetClientRect)[2..3]; $dib = newFromFile Win32::GUI::DIBitmap ("bmp/zapotec.jpg") or die "Load zapotec.jpg"; $hbitmap = $dib->ConvertToBitmap(); undef $dib; # $hbitmap = new Win32::GUI::Bitmap('bmp/zapotec.bmp') or die ("new Bitmap"); $BITMAP = $W->AddLabel ( -pos => [0 , 0], -size => [$width, $height], -bitmap => $hbitmap, -name => "Bitmap", -visible => 1, ); $BITMAP->SetImage ($hbitmap); $W->Show(); Win32::GUI::Dialog(); sub Window_Resize { $W->Bitmap->Resize($W->ScaleWidth, $W->ScaleHeight); } sub Window_Terminate { $W->PostQuitMessage(0); } --- NEW FILE: test1.pl --- #perl -w # # Test standalone : # # Functions Test : # - GetVersion # - GetCopyright # - GetFIFCount # - GetFormatFromFIF # - GetFIFFromFormat # - FIFExtensionList # - FIFDescription # - FIFRegExpr # - FIFSupportsWriting # - FIFSupportsReading # - new # - SaveToFile use Win32::GUI::DIBitmap; print Win32::GUI::DIBitmap::GetVersion(), "\n"; print Win32::GUI::DIBitmap::GetCopyright(), "\n"; $count = Win32::GUI::DIBitmap::GetFIFCount(); print "count = $count\n"; for ($i = 0; $i < $count; $i++) { $format = Win32::GUI::DIBitmap::GetFormatFromFIF($i); $fif = Win32::GUI::DIBitmap::GetFIFFromFormat($format); $ext = Win32::GUI::DIBitmap::FIFExtensionList($fif); $desc = Win32::GUI::DIBitmap::FIFDescription($fif); $reg = Win32::GUI::DIBitmap::FIFRegExpr($fif); $read = Win32::GUI::DIBitmap::FIFSupportsReading($fif); $write = Win32::GUI::DIBitmap::FIFSupportsWriting($fif); print "$i : Format = $format FIF = $fif Extention = $ext Description = $desc RegExp = $reg Reading = $read Writing = $write\n"; } $dib = new Win32::GUI::DIBitmap (100,100,24,255,255,255); for ($i = 0; $i < $count; $i++) { ($ext, $misc) = split /,/, Win32::GUI::DIBitmap::FIFExtensionList($i), 2; $f = "res$i.$ext"; $res = $dib->SaveToFile($f, $i); print "save $f = $res\n"; unlink $f; } --- NEW FILE: test13.pl --- #perl -w # # Test with Win32::GUI and GD # # Functions Test : # - newFromGD # - CopyFromGD # - StretchToDC use GD; use Win32::GUI; use Win32::GUI::DIBitmap; # create a new image $im = new GD::Image(100,100); # allocate some colors $white = $im->colorAllocate(255,255,255); $black = $im->colorAllocate(0,0,0); $red = $im->colorAllocate(255,0,0); $blue = $im->colorAllocate(0,0,255); $green = $im->colorAllocate(0,255,0); # make the background transparent and interlaced $im->transparent($white); $im->interlaced('true'); # Put a black frame around the picture $im->rectangle(0,0,99,99,$black); # Draw a blue oval $im->arc(50,50,95,75,0,360,$blue); $im->string(gdSmallFont,2,10,"Top",$black); # And fill it with red $im->fill(50,50,$red); $color = 0; # Allocate a DIBitmap and copy GD image (no inflate/deflate) $dib = newFromGD Win32::GUI::DIBitmap ($im) or die "newFromData"; $W = new Win32::GUI::Window ( -title => "Win32::GUI::DIBitmap test", -pos => [100, 100], -size => [200, 230], -name => "Window", ) or die "new Window"; $W->AddButton ( -name => "BtnColor", -pos => [0, 0], -size => [200, 20], -text => "Change Color !!!" ) or die "new AddButton"; $W->Show(); Win32::GUI::Dialog(); sub Window_Resize { ($width, $height) = ($W->GetClientRect)[2..3]; $W->BtnColor->Resize($width, 20); Paint(); } sub Window_Activate { Paint(); } sub Window_Terminate { $W->PostQuitMessage(0); } sub Paint { ($width, $height) = ($W->GetClientRect)[2..3]; $dc = new Win32::GUI::DC ($W); $dib->StretchToDC($dc, 0, 30, $width, $height - 30); } sub BtnColor_Click { # Change color if ($color) { $im->fill(50,50,$red); print "Color change to red \n"; } else { $im->fill(50,50,$green); print "Color change to green\n"; } # Copy GD data only (no allocation, no inflate/deflate) $dib->CopyFromGD($im); $color = 1 - $color; Paint(); } --- NEW FILE: Zapotec.zip --- (This appears to be a binary file; contents omitted.) --- NEW FILE: test2.pl --- #perl -w # # Test standalone : Load and save in different format # # Functions Test : # - GetVersion # - GetCopyright # - newFromFile # - SaveToFile # use Cwd; use Win32::GUI::DIBitmap; print Win32::GUI::DIBitmap::GetVersion(), "\n"; print Win32::GUI::DIBitmap::GetCopyright(), "\n"; $dir_in = cwd(); $dir_in .= "/bmp/"; $dir_in =~ tr/\//\\/; $dir_out = cwd(); $dir_out .= "/"; $dir_out =~ tr/\//\\/; chdir $dir_in; opendir (REP, $dir_in) or die "error opendir"; @Fichier = grep { -f $_ } readdir (REP); closedir (REP); $i = 0; foreach $fichier (@Fichier) { $i ++; print $dir_in.$fichier, "\n"; $dib = Win32::GUI::DIBitmap->newFromFile ($dir_in.$fichier); if (defined $dib) { $f = $dir_out.$i.".bmp"; $dib->SaveToFile($f); undef $dib; } } --- NEW FILE: test7.pl --- #perl -w # # Test with Win32::GUI # # Functions Test : # - newFromBitmap # - StretchToDC use Win32::GUI; use Win32::GUI::DIBitmap; $W = new Win32::GUI::Window ( -title => "Win32::GUI::DIBitmap test", -left => 100, -top => 100, -width => 400, -height => 400, -name => "Window", ) or die "new Window"; $dib = newFromFile Win32::GUI::DIBitmap ('bmp/zapotec.bmp') or die "newFromFile"; $W->Show(); Win32::GUI::Dialog(); sub Window_Resize { Paint(); } sub Window_Activate { Paint(); } sub Window_Terminate { $W->PostQuitMessage(0); } sub Paint { ($width, $height) = ($W->GetClientRect)[2..3]; $dc = new Win32::GUI::DC ($W); $dib->StretchToDC($dc, 10, 10, $width - 20, $height - 20); $dib->StretchToDC($dc); $dib->StretchToDC($dc, 0, ($height / 2) - 30, 50, 50); $dib->StretchToDC($dc, 0, $height - 50 , 50, 50, 20, 20, 20, 20); } --- NEW FILE: demo2.pl --- #perl -w ####################################################################### # # Perl Image Viewer # ####################################################################### use strict; use Cwd; use Win32::GUI; use Win32::GUI::DIBitmap; my @PIVReadFilter; my $PIVDirectory; my $PIVDib; PIVInit (); my $Menu = Win32::GUI::MakeMenu( "&File" => "File", " > &Open..." => "FileOpen", " > -" => 0, " > &Directory..." => "FileDirectory", " > -" => 0, " > E&xit" => "FileExit", ); my $Window = new Win32::GUI::Window ( -name => "Window", -title => "Perl Image Viewer Demo", -pos => [100, 100], -size => [400, 400], -menu => $Menu, ); # $Window->AddGraphic ( Win32::GUI::Graphic->new ($Window, -name => "Graphic", -pos => [0, 0], -size => [$Window->ScaleWidth,$Window->ScaleHeight], ); $Window->Show(); Win32::GUI::Dialog(); ####################################################################### # # PIV Functions # ####################################################################### sub PIVInit { # # Init PIVLoadFilter and PIVSaveFilter # my %ReadFilter; my $count = Win32::GUI::DIBitmap::GetFIFCount(); my $liste = ""; for (my $fif = 0; $fif < $count; $fif++) { my $ext = Win32::GUI::DIBitmap::FIFExtensionList($fif); my $desc = Win32::GUI::DIBitmap::FIFDescription($fif); my $read = Win32::GUI::DIBitmap::FIFSupportsReading($fif); my $write = Win32::GUI::DIBitmap::FIFSupportsWriting($fif); $desc .= " (*." . join (',*.', split ( ',', $ext)) . ")"; $ext = "*." . join (';*.', split ( ',', $ext)); if (Win32::GUI::DIBitmap::FIFSupportsReading($fif)) { $ReadFilter {"$desc"} = $ext; $liste .= ";$ext"; } } $ReadFilter {"All PIV Files"} = $liste; foreach my $i (sort keys %ReadFilter) { push @PIVReadFilter, $i, $ReadFilter{$i}; } # # init PIVDirectory # $PIVDirectory = cwd(); $PIVDirectory =~ tr/\//\\/; } sub PIVAdjustDisplay { if (defined $PIVDib) { my $w = $Window->Width - $Window->ScaleWidth; my $h = $Window->Height - $Window->ScaleHeight; $Window->Resize ($PIVDib->Width + $w, $PIVDib->Height + $h); } } sub PIVFinish { undef $PIVDib; return -1; } ####################################################################### # # Window Event # ####################################################################### sub Window_Terminate { return PIVFinish(); } sub Window_Resize { $Window->Graphic->Resize ($Window->ScaleWidth, $Window->ScaleHeight); } ####################################################################### # # Graphic Event # ####################################################################### sub Graphic_Paint { my $DC = $Window->Graphic->GetDC(); if (defined $PIVDib) { $PIVDib->CopyToDC($DC); } $DC->Validate(); } ####################################################################### # # File Menu # ####################################################################### sub FileOpen_Click { my $ret = Win32::GUI::GetOpenFileName( -title => "Open Image File", -filter => \@PIVReadFilter, -directory => $PIVDirectory, ); if ($ret) { undef $PIVDib; $PIVDib = newFromFile Win32::GUI::DIBitmap ($ret); PIVAdjustDisplay (); } elsif (Win32::GUI::CommDlgExtendedError()) { Win32::GUI::MessageBox (0, "ERROR : ".Win32::GUI::CommDlgExtendedError(), "GetOpenFileName Error"); } } sub FileDirectory_Click { my $ret = Win32::GUI::BrowseForFolder ( -title => "Select default directory", -directory => $PIVDirectory, -folderonly => 1, ); $PIVDirectory = $ret if ($ret); } sub FileExit_Click { return PIVFinish(); } --- NEW FILE: test8.pl --- #perl -w # # Test with Win32::GUI and GD # # Functions Test : # - newFromData # - StretchToDC use GD; use Win32::GUI; use Win32::GUI::DIBitmap; # create a new image $im = new GD::Image(100,100); # allocate some colors $white = $im->colorAllocate(255,255,255); $black = $im->colorAllocate(0,0,0); $red = $im->colorAllocate(255,0,0); $blue = $im->colorAllocate(0,0,255); # make the background transparent and interlaced $im->transparent($white); $im->interlaced('true'); # Put a black frame around the picture $im->rectangle(0,0,99,99,$black); # Draw a blue oval $im->arc(50,50,95,75,0,360,$blue); # And fill it with red $im->fill(50,50,$red); $dib = newFromData Win32::GUI::DIBitmap ($im->png) or die "newFromData"; undef $im; $W = new Win32::GUI::Window ( -title => "Win32::GUI::DIBitmap test", -pos => [100, 100], -size => [200, 200], -name => "Window", ) or die "new Window"; $W->Show(); Win32::GUI::Dialog(); sub Window_Resize { Paint(); } sub Window_Activate { Paint(); } sub Window_Terminate { $W->PostQuitMessage(0); } sub Paint { ($width, $height) = ($W->GetClientRect)[2..3]; $dc = new Win32::GUI::DC ($W); $dib->StretchToDC($dc, 0, 0, $width, $height); } --- NEW FILE: zipimage.PL --- #perl -v # # Load image from a zip file. # use Win32::GUI; use Win32::GUI::DIBitmap; use Archive::Zip; $W = new Win32::GUI::Window ( -title => "Win32::GUI::DIBitmap load from a zipfile", -left => 100, -top => 100, -width => 400, -height => 400, -name => "Window", ) or die "new Window"; ($width, $height) = ($W->GetClientRect)[2..3]; # Open Zipfile $zip = Archive::Zip->new( 'zapotec.zip' ) or die "ZipFile"; # Open image file in zipfile $member = $zip->memberNamed( 'Zapotec.JPG' ) or die "member ZipFile"; # Load data image in memory $data = $member->contents(); # Load data immage in a dibbitmap $dib = newFromData Win32::GUI::DIBitmap ($data) or die "Load zapotec.jpg"; $hbitmap = $dib->ConvertToBitmap(); undef $member; undef $zip; undef $data; undef $dib; $BITMAP = $W->AddLabel ( -pos => [0 , 0], -size => [$width, $height], -bitmap => $hbitmap, -name => "Bitmap", -visible => 1, ); $BITMAP->SetImage ($hbitmap); $W->Show(); Win32::GUI::Dialog(); sub Window_Resize { $W->Bitmap->Resize($W->ScaleWidth, $W->ScaleHeight); } sub Window_Terminate { $W->PostQuitMessage(0); } --- NEW FILE: test10.pl --- #perl -w # # Test with Win32::GUI # # Functions Test : # - newFromWindow # - SaveToFile use Win32::GUI; use Win32::GUI::DIBitmap; $W = new Win32::GUI::Window ( -title => "Win32::GUI::DIBitmap test : newFromWindow", -pos => [100, 100], -size => [200, 200], -name => "Window", ) or die "new Window"; $button = $W->AddButton ( -name => "Capture1", -text => "Click here for capture this button", -pos => [20, 40], ); $W->AddButton ( -name => "Capture2", -text => "Click here for capture this window", -pos => [20, 80], ); $W->AddButton ( -name => "Capture3", -text => "Click here for capture the screen", -pos => [20, 120], ); $W->Show(); Win32::GUI::Dialog(); sub Window_Terminate { -1 } sub Capture1_Click { my $dib = newFromWindow Win32::GUI::DIBitmap ($button) or die "newFromWindow"; $dib->SaveToFile ('button0.bmp'); } sub Capture2_Click { my $dib = newFromWindow Win32::GUI::DIBitmap ($W) or die "newFromWindow"; $dib->SaveToFile ('window0.bmp'); $dib = newFromWindow Win32::GUI::DIBitmap ($W, 1) or die "newFromWindow"; $dib->SaveToFile ('window1.bmp'); } sub Capture3_Click { my $hwnd = Win32::GUI::GetDesktopWindow(); my $dib = newFromWindow Win32::GUI::DIBitmap ($hwnd) or die "newFromWindow"; $dib->SaveToFile ('screen.bmp'); $dib->SaveToFile ('screen.png'); $dib->SaveToFile ('screen.jpg'); $dib->SaveToFile ('screen.tif'); } --- NEW FILE: test5.pl --- #perl -w # # Test with Win32::GUI # # Functions Test : # - newFromBitmap # - ConvertToBitmap # - ConvertTo24Bits # - SaveToFile with fif and flag use Win32::GUI; use Win32::GUI::DIBitmap; $W = new Win32::GUI::Window ( -title => "Win32::GUI::DIBitmap test", -left => 100, -top => 100, -width => 400, -height => 400, -name => "Window", ) or die "new Window"; ($width, $height) = ($W->GetClientRect)[2..3]; $hbitmap = new Win32::GUI::Bitmap('bmp/zapotec.bmp') or die ("new Bitmap"); $dib = newFromBitmap Win32::GUI::DIBitmap ($hbitmap) or die "newFromBitmap"; undef $hbitmap; $hbitmap = $dib->ConvertToBitmap() or die "ConvertToBitmap"; $dib->SaveToFile ("test5_1.jpg", FIF_JPEG, JPEG_QUALITYSUPERB ) or die "SaveToFile"; $dib->SaveToFile ("test5_2.jpg", FIF_JPEG, JPEG_QUALITYGOOD ) or die "SaveToFile"; $dib->SaveToFile ("test5_3.jpg", FIF_JPEG, JPEG_QUALITYNORMAL ) or die "SaveToFile"; $dib->SaveToFile ("test5_4.jpg", FIF_JPEG, JPEG_QUALITYAVERAGE) or die "SaveToFile"; $dib->SaveToFile ("test5_5.jpg", FIF_JPEG, JPEG_QUALITYBAD ) or die "SaveToFile"; undef $dib; $BITMAP = $W->AddLabel ( -pos => [0 , 0], -size => [$width, $height], -bitmap => $hbitmap, -name => "Bitmap", -visible => 1, ); $BITMAP->SetImage ($hbitmap); $W->Show(); Win32::GUI::Dialog(); sub Window_Resize { $W->Bitmap->Resize($W->ScaleWidth, $W->ScaleHeight); } sub Window_Terminate { $W->PostQuitMessage(0); } --- NEW FILE: test12.pl --- #perl -w # # Test with Win32::GUI and Multi-Page system # # Functions Test : # - newFromFile # - AppendPage # - GetPageCount # - LockPage # - UnlockPage # - GetLockedPageNumbers use Win32::GUI; use Win32::GUI::DIBitmap; $W = new Win32::GUI::Window ( -title => "Win32::GUI::DIBitmap test", -left => 100, -top => 100, -width => 400, -height => 400, -name => "Window", ) or die "new Window"; ($width, $height) = ($W->GetClientRect)[2..3]; # Create a MDIB bitmap $mdib = new Win32::GUI::MDIBitmap ("mdib.tiff", FIF_TIFF,) or die "new"; for $i (1..5) { my $dib = newFromFile Win32::GUI::DIBitmap ("bmp/$i.bmp"); $mdib->AppendPage ($dib); } undef $mdib; # Load a MDIB bitmap $mdib = newFromFile Win32::GUI::MDIBitmap ("mdib.tiff") or die "newFromFile"; print "Nb page :", $mdib->GetPageCount(), "\n"; my $i = 0; $Button = $W->AddButton ( -name => "Button", -text => "Next", -visible => 1, -pos => [0 , 0], ); $W->Show(); Win32::GUI::Dialog(); sub Window_Resize { Paint(); } sub Window_Terminate { $W->PostQuitMessage(0); } sub Button_Click { $i = $i + 1; $i = 0 if ($i >= $mdib->GetPageCount()); print "Current page :", $i, "\n"; Paint(); } sub Paint { ($width, $height) = ($W->GetClientRect)[2..3]; $dc = new Win32::GUI::DC ($W); my $dib = $mdib->LockPage($i); print $mdib->GetLockedPageNumbers(), "\n"; $dib->AlphaCopyToDC($dc, 50, 50); $dib->SaveToFile ("test.bmp"); $mdib->UnlockPage($dib); } --- NEW FILE: INFO2.PL --- # perl -v # # Chech save bit support. # 16-32 bits JPEG automaticly converted in SaveToFile # 16 bits PNG automaticly converted in SaveToFile use Win32::GUI::DIBitmap; print "FreeImage ", Win32::GUI::DIBitmap::GetVersion(), "\n"; $count = Win32::GUI::DIBitmap::GetFIFCount(); print "Format\tWriting info\n"; $dib1 = new Win32::GUI::DIBitmap (100,100,1); $dib4 = new Win32::GUI::DIBitmap (100,100,4); $dib8 = new Win32::GUI::DIBitmap (100,100,8); $dib16 = new Win32::GUI::DIBitmap (100,100,16); $dib24 = new Win32::GUI::DIBitmap (100,100,24); $dib32 = new Win32::GUI::DIBitmap (100,100,32); $f = "tmp"; for ($fif = 0; $fif < $count; $fif++) { $format = Win32::GUI::DIBitmap::GetFormatFromFIF($fif); $desc = Win32::GUI::DIBitmap::FIFDescription($fif); if (Win32::GUI::DIBitmap::FIFSupportsWriting($fif)) { $write = ''; $write .= "1 " if ( $dib1->SaveToFile($f, $fif) ); unlink $f; $write .= "4 " if ( $dib4->SaveToFile($f, $fif) ); unlink $f; $write .= "8 " if ( $dib8->SaveToFile($f, $fif) ); unlink $f; $write .= "16 " if ( $dib16->SaveToFile($f, $fif) ); unlink $f; $write .= "24 " if ( $dib24->SaveToFile($f, $fif) ); unlink $f; $write .= "32 " if ( $dib32->SaveToFile($f, $fif) ); unlink $f; print "$format\t$write\n"; } } --- NEW FILE: test14.pl --- #perl -w # # Test some effects # use strict; use Win32::GUI; use Win32::GUI::DIBitmap; my $Menu = Win32::GUI::MakeMenu( "&Effect" => "Effect", " > &Restore" => "EffectRestore", " > -" => 0, " > Dither" => "EffectDither", " > Threshold (50)" => "EffectThreshold", " > -" => 0, " > AdjustGamma (0.5)" => "EffectAdjustGamma1", " > AdjustGamma (1.5)" => "EffectAdjustGamma2", " > AdjustBrightness (-50)" => "EffectAdjustBrightness1", " > AdjustBrightness (50)" => "EffectAdjustBrightness2", " > AdjustContrast (-50)" => "EffectAdjustContrast1", " > AdjustContrast (50)" => "EffectAdjustContrast2", " > Invert" => "EffectInvert", " > -" => 0, " > Copy" => "EffectCopy", " > Paste" => "EffectPaste", " > -" => 0, " > Rotate(45)" => "EffectRotate", " > RotateEx(45, 10, 10, 10, 10, 1)" => "EffectRotateEx", " > FlipHorizontal" => "EffectFlipHorizontal", " > FlipVertical" => "EffectFlipVertical", " > -" => 0, " > Rescale (W+10, H+10)" => "EffectRescaleUp", " > Rescale (W-10, H-10)" => "EffectRescaleDown", " > -" => 0, " > E&xit" => "EffectExit", ); my $W = new Win32::GUI::Window ( -title => "Win32::GUI::DIBitmap test", -left => 100, -top => 100, -width => 400, -height => 400, -name => "Window", -menu => $Menu, ) or die "new Window"; my $G = Win32::GUI::Graphic->new ($W, -name => "Graphic", -pos => [0, 0], -size => [$W->ScaleWidth,$W->ScaleHeight], ); my $dib; EffectRestore_Click(); $W->Show(); Win32::GUI::Dialog(); sub Window_Terminate { return -1; } sub Window_Resize { $G->Resize ($W->ScaleWidth, $W->ScaleHeight); } sub Graphic_Paint { my $dc = $G->GetDC(); my ($width, $height) = ($G->GetClientRect)[2..3]; $dib->StretchToDC($dc, 0, 0, $width, $height) if defined $dib; $dc->Validate(); } sub EffectExit_Click { return -1; } sub EffectRestore_Click { $dib = newFromFile Win32::GUI::DIBitmap ('bmp/zapotec.bmp') or die "newFromFile"; $dib = $dib->ConvertTo32Bits(); $G->InvalidateRect(1); } sub EffectDither_Click { $dib = $dib->Dither() if defined $dib; $G->InvalidateRect(1); } sub EffectThreshold_Click { $dib = $dib->Threshold(50) if defined $dib; $G->InvalidateRect(1); } sub EffectAdjustGamma1_Click { $dib->AdjustGamma(0.5) if defined $dib; $G->InvalidateRect(1); } sub EffectAdjustGamma2_Click { $dib->AdjustGamma(1.5) if defined $dib; $G->InvalidateRect(1); } sub EffectAdjustBrightness1_Click { $dib->AdjustBrightness(-50) if defined $dib; $G->InvalidateRect(1); } sub EffectAdjustBrightness2_Click { $dib->AdjustBrightness(50) if defined $dib; $G->InvalidateRect(1); } sub EffectAdjustContrast1_Click { $dib->AdjustContrast(-50) if defined $dib; $G->InvalidateRect(1); } sub EffectAdjustContrast2_Click { $dib->AdjustContrast(50) if defined $dib; $G->InvalidateRect(1); } sub EffectInvert_Click { $dib->Invert() if defined $dib; $G->InvalidateRect(1); } sub EffectCopy_Click { if (defined $dib and $dib->Width > 20 and $dib->Height > 20) { $dib = $dib->Copy(10,10,$dib->Width-10,$dib->Height-10) or die "Copy"; } $G->InvalidateRect(1); } sub EffectPaste_Click { if (defined $dib and $dib->Width > 20 and $dib->Height > 20) { my $dib2 = newFromFile Win32::GUI::DIBitmap ('bmp/zapotec.bmp') or die "newFromFile"; $dib2 = $dib2->Copy(10,10,30,30); $dib->Paste($dib2, 10, 10, 500); } $G->InvalidateRect(1); } sub EffectFlipHorizontal_Click { $dib->FlipHorizontal() if defined $dib; $G->InvalidateRect(1); } sub EffectFlipVertical_Click { $dib->FlipVertical() if defined $dib; $G->InvalidateRect(1); } sub EffectRotate_Click { $dib = $dib->Rotate(45) or die "Rotate" if defined $dib; $G->InvalidateRect(1); } sub EffectRotateEx_Click { $dib = $dib->RotateEx(45,10,10,10,10,1) or die "RotateEx" if defined $dib; $G->InvalidateRect(1); } sub EffectRescaleUp_Click { $dib = $dib->Rescale($dib->Width+10,$dib->Height+10) or die "Rescale" if defined $dib; $G->InvalidateRect(1); } sub EffectRescaleDown_Click { if (defined $dib and $dib->Width > 20 and $dib->Height > 20) { $dib = $dib->Rescale($dib->Width-10,$dib->Height-10) or die "Rescale"; } $G->InvalidateRect(1); } --- NEW FILE: test9.pl --- #perl -w # # Test with Win32::GUI # # Functions Test : # - newFromDC # - SaveToFile use Win32::GUI; use Win32::GUI::DIBitmap; $W = new Win32::GUI::Window ( -title => "Win32::GUI::DIBitmap test: NewFromDC", -pos => [100, 100], -size => [200, 200], -name => "Window", ) or die "new Window"; $button = $W->AddButton ( -name => "Capture1", -text => "Click here for capture this button", -pos => [20, 40], ); $W->AddButton ( -name => "Capture2", -text => "Click here for capture this window", -pos => [20, 80], ); $W->AddButton ( -name => "Capture3", -text => "Click here for capture the screen", -pos => [20, 120], ); $W->Show(); Win32::GUI::Dialog(); sub Window_Terminate { -1 } sub Capture1_Click { my $dc = new Win32::GUI::DC ($W); my $dib = newFromDC Win32::GUI::DIBitmap ($dc, 20, 40, $button->Width(), $button->Height()) or die "newFromDC"; $dib->SaveToFile ('button.bmp'); } sub Capture2_Click { my $dc = new Win32::GUI::DC ($W); my $dib = newFromDC Win32::GUI::DIBitmap ($dc) or die "newFromDC"; $dib->SaveToFile ('window.bmp'); } sub Capture3_Click { my $dc = new Win32::GUI::DC ('DISPLAY'); my $dib = newFromDC Win32::GUI::DIBitmap ($dc) or die "newFromDC"; $dib->SaveToFile ('screen.jpg'); } --- NEW FILE: test3.pl --- #perl -w # # Test standalone : # # Functions Test : # - newFromFile # - GetFIFCount # - FIFSupportsWriting # - FIFSupportsReading # - SaveToData # - newFromData # - SaveToFile use Win32::GUI::DIBitmap; $dib = Win32::GUI::DIBitmap->newFromFile ("bmp/zapotec.jpg") or die "Load zapotec.jpg"; $dib = $dib->ConvertTo24Bits(); for ($i = 0; $i < Win32::GUI::DIBitmap::GetFIFCount(); $i++) { if (Win32::GUI::DIBitmap::FIFSupportsWriting($i) && Win32::GUI::DIBitmap::FIFSupportsReading($i) && Win32::GUI::DIBitmap::FIFSupportsExportBPP($i, 24) && $i != 7 && $i != 8 && $i != 11 && $i != 12 && $i != 14 && $i != 15 && $i != 17) { $format = Win32::GUI::DIBitmap::GetFormatFromFIF($i); print "Test format = $format\n"; $data = $dib->SaveToData($i) or die " SaveToData $i $format"; $dib2 = Win32::GUI::DIBitmap->newFromData($data) or die " newFromData $i $format"; $dib2->SaveToFile($i.'.bmp') or die "SaveToFile dib2 $i $format"; undef $dib2; undef $data; } } --- NEW FILE: demo.pl --- #perl -w use Win32::GUI; use Win32::GUI::DIBitmap; $W = new Win32::GUI::Window ( -title => "Win32::GUI::DIBitmap test", -pos => [100, 100], -size => [400, 400], -name => "Window", ); $dib = newFromFile Win32::GUI::DIBitmap ('bmp\Zapotec.jpg'); $hbitmap = $dib->ConvertToBitmap(); undef $dib; $W->AddButton ( -pos => [100, 100], -size => [200, 200], -bitmap => $hbitmap, -name => "Button", -visible => 1, ); $W->Show(); Win32::GUI::Dialog(); sub Window_Terminate { -1 } --- NEW FILE: test15.pl --- #perl -w # # Test with Win32::GUI # use Win32::GUI; use Win32::GUI::DIBitmap; $W = new Win32::GUI::Window ( -title => "Win32::GUI::DIBitmap test", -left => 100, -top => 100, -width => 400, -height => 400, -name => "Window", ) or die "new Window"; $dib = newFromFile Win32::GUI::DIBitmap ('bmp/zapotec.bmp') or die "newFromFile"; $bcolor = $dib->HasBackgroundColor(); print "hascolor = $bcolor\n"; $color = $dib->GetPixel(10,10); $color = $dib->GetPixel(10,10); print "Color = $color\n"; $dib->SetPixel(10, 10, 255); $color = $dib->GetPixel(10,10); print "Color = $color\n"; $dib = $dib->ConvertTo24Bits(); print "hascolor = $bcolor\n"; @color = $dib->GetPixel(11,10); print "Color = @color\n"; $dib->SetPixel(11, 10, 255, 0, 0); @color = (0, 255, 0); $dib->SetPixel(12, 10, @color); @color = (0, 0, 255); $dib->SetPixel(13, 10, \@color); $W->Show(); Win32::GUI::Dialog(); sub Window_Resize { Paint(); } sub Window_Activate { Paint(); } sub Window_Terminate { $W->PostQuitMessage(0); } sub Paint { ($width, $height) = ($W->GetClientRect)[2..3]; $dc = new Win32::GUI::DC ($W); $dib->StretchToDC($dc, 0, 0, $width, $height); } --- NEW FILE: piv.pl --- #perl -v ####################################################################### # # Perl Image Viewer # ####################################################################### use strict; use Cwd; use Win32::GUI; use Win32::GUI::DIBitmap; my @PIVReadFilter; my @PIVSaveFilter; my $PIVDirectory; my $PIVDib; my $PIVFile = ""; PIVInit (); my $Menu = Win32::GUI::MakeMenu( "&File" => "File", " > &Open..." => "FileOpen", " > -" => 0, " > &Save" => "FileSave", " > &Save As..." => "FileSaveAs", " > -" => 0, " > &Directory..." => "FileDirectory", " > -" => 0, " > E&xit" => "FileExit", "&Image" => "Image", " > &Properties..." => "ImageProperties", " > -" => 0, " > &Convert" => "ImageConvert", " >> &8bits" => "ImageConvert8bits", " >> &16bits" => "ImageConvert16bits", " >> &24bits" => "ImageConvert24bits", " >> &32bits" => "ImageConvert32bits", " > -" => 0, " > Color &Quantize" => "ImageColor", " >> Methode WUQUANT" => "ImageColor1", " >> Methode NNQUANT" => "ImageColor2", "&Help" => "Help", " > &About PIV" => "HelpAbout", ); my $Window = new Win32::GUI::Window ( -name => "Window", -title => "Perl Image Viewer", -pos => [100, 100], -size => [400, 400], -menu => $Menu, ); # $Window->AddGraphic ( Win32::GUI::Graphic->new ($Window, -name => "Graphic", -pos => [0, 0], -size => [$Window->ScaleWidth,$Window->ScaleHeight], ); my $WProp = new Win32::GUI::DialogBox( -title => "Image Properties", -left => 110, -top => 110, -width => 400, -height => 200, -name => "WProp", ); $WProp->AddLabel ( -name => "pFile", -text => "File :", -pos => [10, 25], -size => [280, 20] ); $WProp->AddLabel ( -name => "pWidth", -text => "Width :", -pos => [10, 50], -size => [200, 20] ); $WProp->AddLabel ( -name => "pHeight", -text => "Height :", -pos => [10, 75], -size => [200, 20] ); $WProp->AddLabel ( -name => "pBPP", -text => "BPP :", -pos => [10, 100], -size => [200, 20] ); $WProp->AddButton ( -name => "WPropClose", -text => "Close", -pos => [125, 125], ); PIVMenu(); $Window->Show(); Win32::GUI::Dialog(); ####################################################################### # # PIV Functions # ####################################################################### sub PIVInit { # # Init PIVLoadFilter and PIVSaveFilter # my %ReadFilter; my %SaveFilter; my $count = Win32::GUI::DIBitmap::GetFIFCount(); my $liste = ""; for (my $fif = 0; $fif < $count; $fif++) { my $ext = Win32::GUI::DIBitmap::FIFExtensionList($fif); my $desc = Win32::GUI::DIBitmap::FIFDescription($fif); my $read = Win32::GUI::DIBitmap::FIFSupportsReading($fif); my $write = Win32::GUI::DIBitmap::FIFSupportsWriting($fif); $desc .= " (*." . join (',*.', split ( ',', $ext)) . ")"; $ext = "*." . join (';*.', split ( ',', $ext)); if (Win32::GUI::DIBitmap::FIFSupportsReading($fif)) { $ReadFilter {"$desc"} = $ext; $liste .= ";$ext"; } if (Win32::GUI::DIBitmap::FIFSupportsWriting($fif)) { $SaveFilter {"$desc"} = $ext; } } # $ReadFilter {"All PIV Files"} = $liste; push @PIVReadFilter, "All PIV Files", $liste; foreach my $i (sort keys %ReadFilter) { push @PIVReadFilter, $i, $ReadFilter{$i}; } foreach my $i (sort keys %SaveFilter) { push @PIVSaveFilter, $i, $SaveFilter{$i}; } # # init PIVDirectory # $PIVDirectory = cwd(); $PIVDirectory =~ tr/\//\\/; } sub PIVMenu { if (defined $PIVDib) { $Menu->{ImageProperties}->Enabled(1); $Menu->{ImageConvert}->Enabled(1); my $bpp = $PIVDib->GetBPP(); $Menu->{ImageColor}->Enabled($bpp == 24); $Menu->{ImageConvert8bits}->Enabled($bpp != 8); $Menu->{ImageConvert16bits}->Enabled($bpp != 16); $Menu->{ImageConvert24bits}->Enabled($bpp != 24); $Menu->{ImageConvert32bits}->Enabled($bpp != 32); $Menu->{FileSave}->Enabled(1); $Menu->{FileSaveAs}->Enabled(1); } else { $Menu->{ImageProperties}->Enabled(0); $Menu->{ImageConvert}->Enabled(0); $Menu->{ImageColor}->Enabled(0); $Menu->{FileSave}->Enabled(0); $Menu->{FileSaveAs}->Enabled(0); } } sub PIVAdjustDisplay { if (defined $PIVDib) { my $w = $Window->Width - $Window->ScaleWidth; my $h = $Window->Height - $Window->ScaleHeight; $Window->Resize ($PIVDib->Width + $w, $PIVDib->Height + $h); } } sub PIVFinish { undef $PIVDib; return -1; } ####################################################################### # # Window Event # ####################################################################### sub Window_Terminate { return PIVFinish(); } sub Window_Resize { $Window->Graphic->Resize($Window->ScaleWidth, $Window->ScaleHeight); } ####################################################################### # # Graphic Event # ####################################################################### sub Graphic_Paint { my $DC = $Window->Graphic->GetDC(); if (defined $PIVDib) { # $PIVDib->CopyToDC($DC); $PIVDib->AlphaCopyToDC($DC); } $DC->Validate(); } ####################################################################### # # File Menu # ####################################################################### sub FileOpen_Click { my $ret = Win32::GUI::GetOpenFileName( -title => "Open Image File", -filter => \@PIVReadFilter, -directory => $PIVDirectory, ); if ($ret) { undef $PIVDib; $PIVDib = newFromFile Win32::GUI::DIBitmap ($ret); $PIVFile = $ret; PIVAdjustDisplay (); PIVAdjustDisplay (); PIVMenu(); } elsif (Win32::GUI::CommDlgExtendedError()) { Win32::GUI::MessageBox (0, "ERROR : ".Win32::GUI::CommDlgExtendedError(), "GetOpenFileName Error"); } } sub FileSave_Click { my $ret = Win32::GUI::MessageBox (0, "Overwrite existing file ?", "About",MB_ICONQUESTION | MB_YESNOCANCEL); if ($ret == 6) { $ret = $PIVDib->SaveToFile ($PIVFile); unless ($ret) { Win32::GUI::MessageBox (0, "ERROR : SaveToFile ", "Save Error"); } } elsif ($ret == 7) { FileSaveAs_Click(); } } sub FileSaveAs_Click { my $ret = Win32::GUI::GetSaveFileName( -title => "Save Image File As", -filter => \@PIVSaveFilter, -directory => $PIVDirectory, ); if ($ret) { $PIVFile = $ret; $ret = $PIVDib->SaveToFile ($PIVFile); unless ($ret) { Win32::GUI::MessageBox (0, "ERROR : SaveToFile ", "Save Error"); } } elsif (Win32::GUI::CommDlgExtendedError()) { Win32::GUI::MessageBox (0, "ERROR : ".Win32::GUI::CommDlgExtendedError(), "GetSaveFileName Error"); } } sub FileDirectory_Click { my $ret = Win32::GUI::BrowseForFolder ( -title => "Select default directory", -directory => $PIVDirectory, -folderonly => 1, ); $PIVDirectory = $ret if ($ret); } sub FileExit_Click { return PIVFinish(); } ####################################################################### # # Image Menu # ####################################################################### sub ImageProperties_Click { if (defined $PIVDib) { $Window->Disable(); $WProp->pFile->Text("File : ".$PIVFile); $WProp->pWidth->Text("Width : ".$PIVDib->Width()); $WProp->pHeight->Text("Height : ".$PIVDib->Height()); $WProp->pBPP->Text("BPP,Colors useds,Color type : ".$PIVDib->GetBPP(). ",".$PIVDib->GetColorsUsed(). ",".$PIVDib->GetColorType()); $WProp->Show(); } } sub ImageConvert8bits_Click { $PIVDib = $PIVDib->ConvertTo8Bits(); Graphic_Paint(); PIVMenu(); } sub ImageConvert16bits_Click { $PIVDib = $PIVDib->ConvertTo16Bits555(); Graphic_Paint(); PIVMenu(); } sub ImageConvert24bits_Click { $PIVDib = $PIVDib->ConvertTo24Bits(); Graphic_Paint(); PIVMenu(); } sub ImageConvert32bits_Click { $PIVDib = $PIVDib->ConvertTo32Bits(); Graphic_Paint(); PIVMenu(); } sub ImageColor1_Click { $PIVDib = $PIVDib->ColorQuantize(FIQ_WUQUANT); Graphic_Paint(); PIVMenu(); } sub ImageColor2_Click { $PIVDib = $PIVDib->ColorQuantize(FIQ_NNQUANT); Graphic_Paint(); PIVMenu(); } ####################################################################### # # Help Menu # ####################################################################### sub HelpAbout_Click { Win32::GUI::MessageBox (0, "Perl Image Viewer 1.0 by Laurent Rocher", "About",MB_ICONINFORMATION); } ####################################################################### # # Image Properties # ####################################################################### sub WPropClose_Click { $WProp->Hide(); $Window->Enable(); $Window->SetForegroundWindow(); } --- NEW FILE: test6.pl --- #perl -w # # Test with Win32::GUI # # Functions Test : # - newFromBitmap # - CopyToDC use Win32::GUI; use Win32::GUI::DIBitmap; $W = new Win32::GUI::Window ( -title => "Win32::GUI::DIBitmap test", -left => 100, -top => 100, -width => 400, -height => 400, -name => "Window", ) or die "new Window"; $dib = newFromFile Win32::GUI::DIBitmap ('bmp/zapotec.bmp') or die "newFromFile"; $W->Show(); Win32::GUI::Dialog(); sub Window_Resize { Paint(); } sub Window_Activate { Paint(); } sub Window_Terminate { $W->PostQuitMessage(0); } sub Paint { ($width, $height) = ($W->GetClientRect)[2..3]; $dc = new Win32::GUI::DC ($W); $dib->CopyToDC($dc); $dib->CopyToDC($dc, ($width / 2) - 30, ($height / 2) - 30 , 60, 60); $dib->CopyToDC($dc, $width - 50, $height - 50, 50, 50, 20, 10); } |
From: jw <jw...@us...> - 2005-11-02 08:41:26
|
Update of /cvsroot/perl-win32-gui/Win32-GUI-DIBitmap/extlib In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv32157/extlib Added Files: FreeImage.h FreeImage.lib Readme.txt Log Message: Added to repository --- NEW FILE: FreeImage.h --- // ========================================================== // FreeImage 3 // // Design and implementation by // - Floris van den Berg (flv...@wx...) // - Hervé Drolon (dr...@in...) // // Contributors: // - Adam Gates (ra...@xo...) // - Alex Kwak // - Alexander Dymerets (sa...@te...) // - Detlev Vendt (det...@br...) // - Jan L. Nauta (jl...@ma...) // - Jani Kajala (ja...@re...) // - Juergen Riecker (j.r...@gm...) // - Karl-Heinz Bussian (khb...@mo...) // - Laurent Rocher (ro...@cl...) // - Luca Piergentili (l.p...@te...) // - Machiel ten Brinke (br...@un...) // - Markus Loibl (mar...@ep...) // - Martin Weber (ma...@gm...) // - Matthias Wandel (mw...@ri...) // - Michal Novotny (mi...@et...) // - Petr Pytelka (py...@li...) // - Riley McNiff (rm...@ma...) // - Ryan Rubley (ry...@lo...) // - Volker Gärtner (vo...@gm...) // // This file is part of FreeImage 3 // // COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS, WITHOUT WARRANTY // OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES // THAT THE COVERED CODE IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE // OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED // CODE IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT // THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY // SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL // PART OF THIS LICENSE. NO USE OF ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER // THIS DISCLAIMER. // // Use at your own risk! // ========================================================== #ifndef FREEIMAGE_H #define FREEIMAGE_H // Version information ------------------------------------------------------ #define FREEIMAGE_MAJOR_VERSION 3 #define FREEIMAGE_MINOR_VERSION 5 #define FREEIMAGE_RELEASE_SERIAL 1 // Compiler options --------------------------------------------------------- #if defined(FREEIMAGE_LIB) || !(defined(WIN32) || defined(__WIN32__)) #define DLL_API #define DLL_CALLCONV #else #ifdef __MINGW32__ // prevents a bug in mingw32 #include <windows.h> #endif // __MINGW32__ #define DLL_CALLCONV __stdcall // The following ifdef block is the standard way of creating macros which make exporting // from a DLL simpler. All files within this DLL are compiled with the FREEIMAGE_EXPORTS // symbol defined on the command line. this symbol should not be defined on any project // that uses this DLL. This way any other project whose source files include this file see // DLL_API functions as being imported from a DLL, wheras this DLL sees symbols // defined with this macro as being exported. #ifdef FREEIMAGE_EXPORTS #define DLL_API __declspec(dllexport) #else #define DLL_API __declspec(dllimport) #endif // FREEIMAGE_EXPORTS #endif // FREEIMAGE_LIB || !WIN32 // Some versions of gcc may have BYTE_ORDER or __BYTE_ORDER defined // If your big endian system isn't being detected, add an OS specific check #if (defined(BYTE_ORDER) && BYTE_ORDER==BIG_ENDIAN) || \ (defined(__BYTE_ORDER) && __BYTE_ORDER==__BIG_ENDIAN) || \ defined(__APPLE__) #define FREEIMAGE_BIGENDIAN #endif // BYTE_ORDER // Ensure 4-byte enums if we're using Borland C++ compilers #if defined(__BORLANDC__) #pragma option push -b #endif // For C compatility -------------------------------------------------------- #ifdef __cplusplus #define FI_DEFAULT(x) = x #define FI_ENUM(x) enum x #define FI_STRUCT(x) struct x #else #define FI_DEFAULT(x) #define FI_ENUM(x) typedef int x; enum x #define FI_STRUCT(x) typedef struct x x; struct x #endif // Bitmap types ------------------------------------------------------------- FI_STRUCT (FIBITMAP) { void *data; }; FI_STRUCT (FIMULTIBITMAP) { void *data; }; // Types used in the library (directly copied from Windows) ----------------- #ifndef _WINDOWS_ #define _WINDOWS_ #ifndef FALSE #define FALSE 0 #endif #ifndef TRUE #define TRUE 1 #endif #ifndef NULL #define NULL 0 #endif #ifndef SEEK_SET #define SEEK_SET 0 #define SEEK_CUR 1 #define SEEK_END 2 #endif #ifndef __MINGW32__ // prevents a bug in mingw32 typedef long BOOL; typedef unsigned char BYTE; typedef unsigned short WORD; typedef unsigned long DWORD; typedef long LONG; #if (defined(WIN32) || defined(__WIN32__)) #pragma pack(push, 1) #else #pragma pack(1) #endif // WIN32 typedef struct tagRGBQUAD { #ifdef FREEIMAGE_BIGENDIAN BYTE rgbRed; BYTE rgbGreen; BYTE rgbBlue; #else BYTE rgbBlue; BYTE rgbGreen; BYTE rgbRed; #endif // FREEIMAGE_BIGENDIAN BYTE rgbReserved; } RGBQUAD; typedef struct tagRGBTRIPLE { #ifdef FREEIMAGE_BIGENDIAN BYTE rgbtRed; BYTE rgbtGreen; BYTE rgbtBlue; #else BYTE rgbtBlue; BYTE rgbtGreen; BYTE rgbtRed; #endif // FREEIMAGE_BIGENDIAN } RGBTRIPLE; #if (defined(WIN32) || defined(__WIN32__)) #pragma pack(pop) #else #pragma pack() #endif // WIN32 typedef struct tagBITMAPINFOHEADER{ DWORD biSize; LONG biWidth; LONG biHeight; WORD biPlanes; WORD biBitCount; DWORD biCompression; DWORD biSizeImage; LONG biXPelsPerMeter; LONG biYPelsPerMeter; DWORD biClrUsed; DWORD biClrImportant; } BITMAPINFOHEADER, *PBITMAPINFOHEADER; typedef struct tagBITMAPINFO { BITMAPINFOHEADER bmiHeader; RGBQUAD bmiColors[1]; } BITMAPINFO, *PBITMAPINFO; #endif // __MINGW32__ #endif // _WINDOWS_ // Indexes for byte arrays, masks and shifts for treating pixels as words --- // These coincide with the order of RGBQUAD and RGBTRIPLE ------------------- #ifndef FREEIMAGE_BIGENDIAN // Little Endian (x86 / MS Windows, Linux) : BGR(A) order #define FI_RGBA_RED 2 #define FI_RGBA_GREEN 1 #define FI_RGBA_BLUE 0 #define FI_RGBA_ALPHA 3 #define FI_RGBA_RED_MASK 0x00FF0000 #define FI_RGBA_GREEN_MASK 0x0000FF00 #define FI_RGBA_BLUE_MASK 0x000000FF #define FI_RGBA_ALPHA_MASK 0xFF000000 #define FI_RGBA_RED_SHIFT 16 #define FI_RGBA_GREEN_SHIFT 8 #define FI_RGBA_BLUE_SHIFT 0 #define FI_RGBA_ALPHA_SHIFT 24 #else // Big Endian (PPC / Linux, MaxOSX) : RGB(A) order #define FI_RGBA_RED 0 #define FI_RGBA_GREEN 1 #define FI_RGBA_BLUE 2 #define FI_RGBA_ALPHA 3 #define FI_RGBA_RED_MASK 0xFF000000 #define FI_RGBA_GREEN_MASK 0x00FF0000 #define FI_RGBA_BLUE_MASK 0x0000FF00 #define FI_RGBA_ALPHA_MASK 0x000000FF #define FI_RGBA_RED_SHIFT 24 #define FI_RGBA_GREEN_SHIFT 16 #define FI_RGBA_BLUE_SHIFT 8 #define FI_RGBA_ALPHA_SHIFT 0 #endif // FREEIMAGE_BIGENDIAN #define FI_RGBA_RGB_MASK (FI_RGBA_RED_MASK|FI_RGBA_GREEN_MASK|FI_RGBA_BLUE_MASK) // The 16bit macros only include masks and shifts, since each color element is not byte aligned #define FI16_555_RED_MASK 0x7C00 #define FI16_555_GREEN_MASK 0x03E0 #define FI16_555_BLUE_MASK 0x001F #define FI16_555_RED_SHIFT 10 #define FI16_555_GREEN_SHIFT 5 #define FI16_555_BLUE_SHIFT 0 #define FI16_565_RED_MASK 0xF800 #define FI16_565_GREEN_MASK 0x07E0 #define FI16_565_BLUE_MASK 0x001F #define FI16_565_RED_SHIFT 11 #define FI16_565_GREEN_SHIFT 5 #define FI16_565_BLUE_SHIFT 0 // ICC profile support ------------------------------------------------------ #define FIICC_DEFAULT 0x00 #define FIICC_COLOR_IS_CMYK 0x01 FI_STRUCT (FIICCPROFILE) { WORD flags; // info flag DWORD size; // profile's size measured in bytes void *data; // points to a block of contiguous memory containing the profile }; // Important enums ---------------------------------------------------------- /** I/O image format identifiers. */ FI_ENUM(FREE_IMAGE_FORMAT) { FIF_UNKNOWN = -1, FIF_BMP = 0, FIF_ICO = 1, FIF_JPEG = 2, FIF_JNG = 3, FIF_KOALA = 4, FIF_LBM = 5, FIF_IFF = FIF_LBM, FIF_MNG = 6, FIF_PBM = 7, FIF_PBMRAW = 8, FIF_PCD = 9, FIF_PCX = 10, FIF_PGM = 11, FIF_PGMRAW = 12, FIF_PNG = 13, FIF_PPM = 14, FIF_PPMRAW = 15, FIF_RAS = 16, FIF_TARGA = 17, FIF_TIFF = 18, FIF_WBMP = 19, FIF_PSD = 20, FIF_CUT = 21, FIF_XBM = 22, FIF_XPM = 23, FIF_DDS = 24, FIF_GIF = 25 }; /** Image type used in FreeImage. */ FI_ENUM(FREE_IMAGE_TYPE) { FIT_UNKNOWN = 0, // unknown type FIT_BITMAP = 1, // standard image : 1-, 4-, 8-, 16-, 24-, 32-bit FIT_UINT16 = 2, // array of unsigned short : unsigned 16-bit FIT_INT16 = 3, // array of short : signed 16-bit FIT_UINT32 = 4, // array of unsigned long : unsigned 32-bit FIT_INT32 = 5, // array of long : signed 32-bit FIT_FLOAT = 6, // array of float : 32-bit IEEE floating point FIT_DOUBLE = 7, // array of double : 64-bit IEEE floating point FIT_COMPLEX = 8 // array of FICOMPLEX : 2 x 64-bit IEEE floating point }; /** Data structure for COMPLEX type (complex number) */ typedef struct tagFreeImageComplex { /// real part double r; /// imaginary part double i; } FICOMPLEX; /** Image color type used in FreeImage. */ FI_ENUM(FREE_IMAGE_COLOR_TYPE) { FIC_MINISWHITE = 0, // min value is white FIC_MINISBLACK = 1, // min value is black FIC_RGB = 2, // RGB color model FIC_PALETTE = 3, // color map indexed FIC_RGBALPHA = 4, // RGB color model with alpha channel FIC_CMYK = 5 // CMYK color model }; /** Color quantization algorithms. Constants used in FreeImage_ColorQuantize. */ FI_ENUM(FREE_IMAGE_QUANTIZE) { FIQ_WUQUANT = 0, // Xiaolin Wu color quantization algorithm FIQ_NNQUANT = 1 // NeuQuant neural-net quantization algorithm by Anthony Dekker }; /** Dithering algorithms. Constants used FreeImage_Dither. */ FI_ENUM(FREE_IMAGE_DITHER) { FID_FS = 0, // Floyd & Steinberg error diffusion FID_BAYER4x4 = 1, // Bayer ordered dispersed dot dithering (order 2 dithering matrix) FID_BAYER8x8 = 2, // Bayer ordered dispersed dot dithering (order 3 dithering matrix) FID_CLUSTER6x6 = 3, // Ordered clustered dot dithering (order 3 - 6x6 matrix) FID_CLUSTER8x8 = 4, // Ordered clustered dot dithering (order 4 - 8x8 matrix) FID_CLUSTER16x16= 5 // Ordered clustered dot dithering (order 8 - 16x16 matrix) }; /** Upsampling / downsampling filters. Constants used in FreeImage_Rescale. */ FI_ENUM(FREE_IMAGE_FILTER) { FILTER_BOX = 0, // Box, pulse, Fourier window, 1st order (constant) b-spline FILTER_BICUBIC = 1, // Mitchell & Netravali's two-param cubic filter FILTER_BILINEAR = 2, // Bilinear filter FILTER_BSPLINE = 3, // 4th order (cubic) b-spline FILTER_CATMULLROM = 4, // Catmull-Rom spline, Overhauser spline FILTER_LANCZOS3 = 5 // Lanczos3 filter }; /** Color channels. Constants used in color manipulation routines. */ FI_ENUM(FREE_IMAGE_COLOR_CHANNEL) { FICC_RGB = 0, // Use red, green and blue channels FICC_RED = 1, // Use red channel FICC_GREEN = 2, // Use green channel FICC_BLUE = 3, // Use blue channel FICC_ALPHA = 4, // Use alpha channel FICC_BLACK = 5, // Use black channel FICC_REAL = 6, // Complex images: use real part FICC_IMAG = 7, // Complex images: use imaginary part FICC_MAG = 8, // Complex images: use magnitude FICC_PHASE = 9 // Complex images: use phase }; // Metadata support --------------------------------------------------------- /** Tag data type information (based on TIFF specifications) Note: RATIONALs are the ratio of two 32-bit integer values. */ FI_ENUM(FREE_IMAGE_MDTYPE) { FIDT_NOTYPE = 0, // placeholder FIDT_BYTE = 1, // 8-bit unsigned integer FIDT_ASCII = 2, // 8-bit bytes w/ last byte null FIDT_SHORT = 3, // 16-bit unsigned integer FIDT_LONG = 4, // 32-bit unsigned integer FIDT_RATIONAL = 5, // 64-bit unsigned fraction FIDT_SBYTE = 6, // 8-bit signed integer FIDT_UNDEFINED = 7, // 8-bit untyped data FIDT_SSHORT = 8, // 16-bit signed integer FIDT_SLONG = 9, // 32-bit signed integer FIDT_SRATIONAL = 10, // 64-bit signed fraction FIDT_FLOAT = 11, // 32-bit IEEE floating point FIDT_DOUBLE = 12, // 64-bit IEEE floating point FIDT_IFD = 13 // 32-bit unsigned integer (offset) }; /** Metadata models supported by FreeImage */ FI_ENUM(FREE_IMAGE_MDMODEL) { FIMD_NODATA = -1, FIMD_COMMENTS = 0, // single comment or keywords FIMD_EXIF_MAIN = 1, // Exif-TIFF metadata FIMD_EXIF_EXIF = 2, // Exif-specific metadata FIMD_EXIF_GPS = 3, // Exif GPS metadata FIMD_EXIF_MAKERNOTE = 4, // Exif maker note metadata FIMD_EXIF_INTEROP = 5, // Exif interoperability metadata FIMD_IPTC = 6, // IPTC/NAA metadata FIMD_XMP = 7, // Abobe XMP metadata FIMD_GEOTIFF = 8, // GeoTIFF metadata (to be implemented) FIMD_CUSTOM = 9 // Used to attach other metadata types to a dib }; /** Handle to a metadata model */ FI_STRUCT (FIMETADATA) { void *data; }; /** Metadata attribute */ FI_STRUCT (FITAG) { char *key; // tag field name char *description; // tag description WORD id; // tag ID WORD type; // tag data type (see FREE_IMAGE_MDTYPE) DWORD count; // number of components (in 'tag data types' units) DWORD length; // value length in bytes void *value; // tag value }; // File IO routines --------------------------------------------------------- #ifndef FREEIMAGE_IO #define FREEIMAGE_IO typedef void* fi_handle; typedef unsigned (DLL_CALLCONV *FI_ReadProc) (void *buffer, unsigned size, unsigned count, fi_handle handle); typedef unsigned (DLL_CALLCONV *FI_WriteProc) (void *buffer, unsigned size, unsigned count, fi_handle handle); typedef int (DLL_CALLCONV *FI_SeekProc) (fi_handle handle, long offset, int origin); typedef long (DLL_CALLCONV *FI_TellProc) (fi_handle handle); #if (defined(WIN32) || defined(__WIN32__)) #pragma pack(push, 1) #else #pragma pack(1) #endif // WIN32 FI_STRUCT(FreeImageIO) { FI_ReadProc read_proc; // pointer to the function used to read data FI_WriteProc write_proc; // pointer to the function used to write data FI_SeekProc seek_proc; // pointer to the function used to seek FI_TellProc tell_proc; // pointer to the function used to aquire the current position }; #if (defined(WIN32) || defined(__WIN32__)) #pragma pack(pop) #else #pragma pack() #endif // WIN32 /** Handle to a memory I/O stream */ FI_STRUCT (FIMEMORY) { void *data; }; #endif // FREEIMAGE_IO // Plugin routines ---------------------------------------------------------- #ifndef PLUGINS #define PLUGINS typedef const char *(DLL_CALLCONV *FI_FormatProc) (); typedef const char *(DLL_CALLCONV *FI_DescriptionProc) (); typedef const char *(DLL_CALLCONV *FI_ExtensionListProc) (); typedef const char *(DLL_CALLCONV *FI_RegExprProc) (); typedef void *(DLL_CALLCONV *FI_OpenProc)(FreeImageIO *io, fi_handle handle, BOOL read); typedef void (DLL_CALLCONV *FI_CloseProc)(FreeImageIO *io, fi_handle handle, void *data); typedef int (DLL_CALLCONV *FI_PageCountProc)(FreeImageIO *io, fi_handle handle, void *data); typedef int (DLL_CALLCONV *FI_PageCapabilityProc)(FreeImageIO *io, fi_handle handle, void *data); typedef FIBITMAP *(DLL_CALLCONV *FI_LoadProc)(FreeImageIO *io, fi_handle handle, int page, int flags, void *data); typedef BOOL (DLL_CALLCONV *FI_SaveProc)(FreeImageIO *io, FIBITMAP *dib, fi_handle handle, int page, int flags, void *data); typedef BOOL (DLL_CALLCONV *FI_ValidateProc)(FreeImageIO *io, fi_handle handle); typedef const char *(DLL_CALLCONV *FI_MimeProc) (); typedef BOOL (DLL_CALLCONV *FI_SupportsExportBPPProc)(int bpp); typedef BOOL (DLL_CALLCONV *FI_SupportsExportTypeProc)(FREE_IMAGE_TYPE type); typedef BOOL (DLL_CALLCONV *FI_SupportsICCProfilesProc)(); FI_STRUCT (Plugin) { FI_FormatProc format_proc; FI_DescriptionProc description_proc; FI_ExtensionListProc extension_proc; FI_RegExprProc regexpr_proc; FI_OpenProc open_proc; FI_CloseProc close_proc; FI_PageCountProc pagecount_proc; FI_PageCapabilityProc pagecapability_proc; FI_LoadProc load_proc; FI_SaveProc save_proc; FI_ValidateProc validate_proc; FI_MimeProc mime_proc; FI_SupportsExportBPPProc supports_export_bpp_proc; FI_SupportsExportTypeProc supports_export_type_proc; FI_SupportsICCProfilesProc supports_icc_profiles_proc; }; typedef void (DLL_CALLCONV *FI_InitProc)(Plugin *plugin, int format_id); #endif // PLUGINS // Load / Save flag constants ----------------------------------------------- #define BMP_DEFAULT 0 #define BMP_SAVE_RLE 1 #define CUT_DEFAULT 0 #define DDS_DEFAULT 0 #define GIF_DEFAULT 0 #define ICO_DEFAULT 0 #define ICO_MAKEALPHA 1 // convert to 32bpp and create an alpha channel from the AND-mask when loading #define IFF_DEFAULT 0 #define JPEG_DEFAULT 0 #define JPEG_FAST 1 #define JPEG_ACCURATE 2 #define JPEG_QUALITYSUPERB 0x80 #define JPEG_QUALITYGOOD 0x100 #define JPEG_QUALITYNORMAL 0x200 #define JPEG_QUALITYAVERAGE 0x400 #define JPEG_QUALITYBAD 0x800 #define KOALA_DEFAULT 0 #define LBM_DEFAULT 0 #define MNG_DEFAULT 0 #define PCD_DEFAULT 0 #define PCD_BASE 1 // load the bitmap sized 768 x 512 #define PCD_BASEDIV4 2 // load the bitmap sized 384 x 256 #define PCD_BASEDIV16 3 // load the bitmap sized 192 x 128 #define PCX_DEFAULT 0 #define PNG_DEFAULT 0 #define PNG_IGNOREGAMMA 1 // avoid gamma correction #define PNM_DEFAULT 0 #define PNM_SAVE_RAW 0 // If set the writer saves in RAW format (i.e. P4, P5 or P6) #define PNM_SAVE_ASCII 1 // If set the writer saves in ASCII format (i.e. P1, P2 or P3) #define PSD_DEFAULT 0 #define RAS_DEFAULT 0 #define TARGA_DEFAULT 0 #define TARGA_LOAD_RGB888 1 // If set the loader converts RGB555 and ARGB8888 -> RGB888. #define TIFF_DEFAULT 0 #define TIFF_CMYK 0x0001 // reads/stores tags for separated CMYK (use | to combine with compression flags) #define TIFF_PACKBITS 0x0100 // save using PACKBITS compression #define TIFF_DEFLATE 0x0200 // save using DEFLATE compression (a.k.a. ZLIB compression) #define TIFF_ADOBE_DEFLATE 0x0400 // save using ADOBE DEFLATE compression #define TIFF_NONE 0x0800 // save without any compression #define TIFF_CCITTFAX3 0x1000 // save using CCITT Group 3 fax encoding #define TIFF_CCITTFAX4 0x2000 // save using CCITT Group 4 fax encoding #define TIFF_LZW 0x4000 // save using LZW compression #define WBMP_DEFAULT 0 #define XBM_DEFAULT 0 #define XPM_DEFAULT 0 #ifdef __cplusplus extern "C" { #endif // Init / Error routines ---------------------------------------------------- DLL_API void DLL_CALLCONV FreeImage_Initialise(BOOL load_local_plugins_only FI_DEFAULT(FALSE)); DLL_API void DLL_CALLCONV FreeImage_DeInitialise(void); // Version routines --------------------------------------------------------- DLL_API const char *DLL_CALLCONV FreeImage_GetVersion(void); DLL_API const char *DLL_CALLCONV FreeImage_GetCopyrightMessage(void); // Message output functions ------------------------------------------------- DLL_API void DLL_CALLCONV FreeImage_OutputMessageProc(int fif, const char *fmt, ...); typedef void (*FreeImage_OutputMessageFunction)(FREE_IMAGE_FORMAT fif, const char *msg); DLL_API void DLL_CALLCONV FreeImage_SetOutputMessage(FreeImage_OutputMessageFunction omf); // Allocate / Clone / Unload routines --------------------------------------- DLL_API FIBITMAP *DLL_CALLCONV FreeImage_Allocate(int width, int height, int bpp, unsigned red_mask FI_DEFAULT(0), unsigned green_mask FI_DEFAULT(0), unsigned blue_mask FI_DEFAULT(0)); DLL_API FIBITMAP *DLL_CALLCONV FreeImage_AllocateT(FREE_IMAGE_TYPE type, int width, int height, int bpp FI_DEFAULT(8), unsigned red_mask FI_DEFAULT(0), unsigned green_mask FI_DEFAULT(0), unsigned blue_mask FI_DEFAULT(0)); DLL_API FIBITMAP * DLL_CALLCONV FreeImage_Clone(FIBITMAP *dib); DLL_API void DLL_CALLCONV FreeImage_Unload(FIBITMAP *dib); // Load / Save routines ----------------------------------------------------- DLL_API FIBITMAP *DLL_CALLCONV FreeImage_Load(FREE_IMAGE_FORMAT fif, const char *filename, int flags FI_DEFAULT(0)); DLL_API FIBITMAP *DLL_CALLCONV FreeImage_LoadFromHandle(FREE_IMAGE_FORMAT fif, FreeImageIO *io, fi_handle handle, int flags FI_DEFAULT(0)); DLL_API BOOL DLL_CALLCONV FreeImage_Save(FREE_IMAGE_FORMAT fif, FIBITMAP *dib, const char *filename, int flags FI_DEFAULT(0)); DLL_API BOOL DLL_CALLCONV FreeImage_SaveToHandle(FREE_IMAGE_FORMAT fif, FIBITMAP *dib, FreeImageIO *io, fi_handle handle, int flags FI_DEFAULT(0)); // Memory I/O stream routines ----------------------------------------------- DLL_API FIMEMORY *DLL_CALLCONV FreeImage_OpenMemory(BYTE *data FI_DEFAULT(0), DWORD size_in_bytes FI_DEFAULT(0)); DLL_API void DLL_CALLCONV FreeImage_CloseMemory(FIMEMORY *stream); DLL_API FIBITMAP *DLL_CALLCONV FreeImage_LoadFromMemory(FREE_IMAGE_FORMAT fif, FIMEMORY *stream, int flags FI_DEFAULT(0)); DLL_API BOOL DLL_CALLCONV FreeImage_SaveToMemory(FREE_IMAGE_FORMAT fif, FIBITMAP *dib, FIMEMORY *stream, int flags FI_DEFAULT(0)); DLL_API long DLL_CALLCONV FreeImage_TellMemory(FIMEMORY *stream); DLL_API BOOL DLL_CALLCONV FreeImage_SeekMemory(FIMEMORY *stream, long offset, int origin); DLL_API BOOL DLL_CALLCONV FreeImage_AcquireMemory(FIMEMORY *stream, BYTE **data, DWORD *size_in_bytes); // Plugin Interface --------------------------------------------------------- DLL_API FREE_IMAGE_FORMAT DLL_CALLCONV FreeImage_RegisterLocalPlugin(FI_InitProc proc_address, const char *format FI_DEFAULT(0), const char *description FI_DEFAULT(0), const char *extension FI_DEFAULT(0), const char *regexpr FI_DEFAULT(0)); DLL_API FREE_IMAGE_FORMAT DLL_CALLCONV FreeImage_RegisterExternalPlugin(const char *path, const char *format FI_DEFAULT(0), const char *description FI_DEFAULT(0), const char *extension FI_DEFAULT(0), const char *regexpr FI_DEFAULT(0)); DLL_API int DLL_CALLCONV FreeImage_GetFIFCount(void); DLL_API int DLL_CALLCONV FreeImage_SetPluginEnabled(FREE_IMAGE_FORMAT fif, BOOL enable); DLL_API int DLL_CALLCONV FreeImage_IsPluginEnabled(FREE_IMAGE_FORMAT fif); DLL_API FREE_IMAGE_FORMAT DLL_CALLCONV FreeImage_GetFIFFromFormat(const char *format); DLL_API FREE_IMAGE_FORMAT DLL_CALLCONV FreeImage_GetFIFFromMime(const char *mime); DLL_API const char *DLL_CALLCONV FreeImage_GetFormatFromFIF(FREE_IMAGE_FORMAT fif); DLL_API const char *DLL_CALLCONV FreeImage_GetFIFExtensionList(FREE_IMAGE_FORMAT fif); DLL_API const char *DLL_CALLCONV FreeImage_GetFIFDescription(FREE_IMAGE_FORMAT fif); DLL_API const char *DLL_CALLCONV FreeImage_GetFIFRegExpr(FREE_IMAGE_FORMAT fif); DLL_API const char *DLL_CALLCONV FreeImage_GetFIFMimeType(FREE_IMAGE_FORMAT fif); DLL_API FREE_IMAGE_FORMAT DLL_CALLCONV FreeImage_GetFIFFromFilename(const char *filename); DLL_API BOOL DLL_CALLCONV FreeImage_FIFSupportsReading(FREE_IMAGE_FORMAT fif); DLL_API BOOL DLL_CALLCONV FreeImage_FIFSupportsWriting(FREE_IMAGE_FORMAT fif); DLL_API BOOL DLL_CALLCONV FreeImage_FIFSupportsExportBPP(FREE_IMAGE_FORMAT fif, int bpp); DLL_API BOOL DLL_CALLCONV FreeImage_FIFSupportsExportType(FREE_IMAGE_FORMAT fif, FREE_IMAGE_TYPE type); DLL_API BOOL DLL_CALLCONV FreeImage_FIFSupportsICCProfiles(FREE_IMAGE_FORMAT fif); // Multipaging interface ---------------------------------------------------- DLL_API FIMULTIBITMAP * DLL_CALLCONV FreeImage_OpenMultiBitmap(FREE_IMAGE_FORMAT fif, const char *filename, BOOL create_new, BOOL read_only, BOOL keep_cache_in_memory FI_DEFAULT(FALSE)); DLL_API BOOL DLL_CALLCONV FreeImage_CloseMultiBitmap(FIMULTIBITMAP *bitmap, int flags FI_DEFAULT(0)); DLL_API int DLL_CALLCONV FreeImage_GetPageCount(FIMULTIBITMAP *bitmap); DLL_API void DLL_CALLCONV FreeImage_AppendPage(FIMULTIBITMAP *bitmap, FIBITMAP *data); DLL_API void DLL_CALLCONV FreeImage_InsertPage(FIMULTIBITMAP *bitmap, int page, FIBITMAP *data); DLL_API void DLL_CALLCONV FreeImage_DeletePage(FIMULTIBITMAP *bitmap, int page); DLL_API FIBITMAP * DLL_CALLCONV FreeImage_LockPage(FIMULTIBITMAP *bitmap, int page); DLL_API void DLL_CALLCONV FreeImage_UnlockPage(FIMULTIBITMAP *bitmap, FIBITMAP *page, BOOL changed); DLL_API BOOL DLL_CALLCONV FreeImage_MovePage(FIMULTIBITMAP *bitmap, int target, int source); DLL_API BOOL DLL_CALLCONV FreeImage_GetLockedPageNumbers(FIMULTIBITMAP *bitmap, int *pages, int *count); // Filetype request routines ------------------------------------------------ DLL_API FREE_IMAGE_FORMAT DLL_CALLCONV FreeImage_GetFileType(const char *filename, int size FI_DEFAULT(0)); DLL_API FREE_IMAGE_FORMAT DLL_CALLCONV FreeImage_GetFileTypeFromHandle(FreeImageIO *io, fi_handle handle, int size FI_DEFAULT(0)); DLL_API FREE_IMAGE_FORMAT DLL_CALLCONV FreeImage_GetFileTypeFromMemory(FIMEMORY *stream, int size FI_DEFAULT(0)); // Image type request routine ----------------------------------------------- DLL_API FREE_IMAGE_TYPE DLL_CALLCONV FreeImage_GetImageType(FIBITMAP *dib); // FreeImage helper routines ------------------------------------------------ DLL_API BOOL DLL_CALLCONV FreeImage_IsLittleEndian(void); DLL_API BOOL DLL_CALLCONV FreeImage_LookupX11Color(const char *szColor, BYTE *nRed, BYTE *nGreen, BYTE *nBlue); DLL_API BOOL DLL_CALLCONV FreeImage_LookupSVGColor(const char *szColor, BYTE *nRed, BYTE *nGreen, BYTE *nBlue); // Pixel access routines ---------------------------------------------------- DLL_API BYTE *DLL_CALLCONV FreeImage_GetBits(FIBITMAP *dib); DLL_API BYTE *DLL_CALLCONV FreeImage_GetScanLine(FIBITMAP *dib, int scanline); DLL_API BOOL DLL_CALLCONV FreeImage_GetPixelIndex(FIBITMAP *dib, unsigned x, unsigned y, BYTE *value); DLL_API BOOL DLL_CALLCONV FreeImage_GetPixelColor(FIBITMAP *dib, unsigned x, unsigned y, RGBQUAD *value); DLL_API BOOL DLL_CALLCONV FreeImage_SetPixelIndex(FIBITMAP *dib, unsigned x, unsigned y, BYTE *value); DLL_API BOOL DLL_CALLCONV FreeImage_SetPixelColor(FIBITMAP *dib, unsigned x, unsigned y, RGBQUAD *value); // DIB info routines -------------------------------------------------------- DLL_API unsigned DLL_CALLCONV FreeImage_GetColorsUsed(FIBITMAP *dib); DLL_API unsigned DLL_CALLCONV FreeImage_GetBPP(FIBITMAP *dib); DLL_API unsigned DLL_CALLCONV FreeImage_GetWidth(FIBITMAP *dib); DLL_API unsigned DLL_CALLCONV FreeImage_GetHeight(FIBITMAP *dib); DLL_API unsigned DLL_CALLCONV FreeImage_GetLine(FIBITMAP *dib); DLL_API unsigned DLL_CALLCONV FreeImage_GetPitch(FIBITMAP *dib); DLL_API unsigned DLL_CALLCONV FreeImage_GetDIBSize(FIBITMAP *dib); DLL_API RGBQUAD *DLL_CALLCONV FreeImage_GetPalette(FIBITMAP *dib); DLL_API unsigned DLL_CALLCONV FreeImage_GetDotsPerMeterX(FIBITMAP *dib); DLL_API unsigned DLL_CALLCONV FreeImage_GetDotsPerMeterY(FIBITMAP *dib); DLL_API BITMAPINFOHEADER *DLL_CALLCONV FreeImage_GetInfoHeader(FIBITMAP *dib); DLL_API BITMAPINFO *DLL_CALLCONV FreeImage_GetInfo(FIBITMAP *dib); DLL_API FREE_IMAGE_COLOR_TYPE DLL_CALLCONV FreeImage_GetColorType(FIBITMAP *dib); DLL_API unsigned DLL_CALLCONV FreeImage_GetRedMask(FIBITMAP *dib); DLL_API unsigned DLL_CALLCONV FreeImage_GetGreenMask(FIBITMAP *dib); DLL_API unsigned DLL_CALLCONV FreeImage_GetBlueMask(FIBITMAP *dib); DLL_API unsigned DLL_CALLCONV FreeImage_GetTransparencyCount(FIBITMAP *dib); DLL_API BYTE * DLL_CALLCONV FreeImage_GetTransparencyTable(FIBITMAP *dib); DLL_API void DLL_CALLCONV FreeImage_SetTransparent(FIBITMAP *dib, BOOL enabled); DLL_API void DLL_CALLCONV FreeImage_SetTransparencyTable(FIBITMAP *dib, BYTE *table, int count); DLL_API BOOL DLL_CALLCONV FreeImage_IsTransparent(FIBITMAP *dib); DLL_API BOOL DLL_CALLCONV FreeImage_HasBackgroundColor(FIBITMAP *dib); DLL_API BOOL DLL_CALLCONV FreeImage_GetBackgroundColor(FIBITMAP *dib, RGBQUAD *bkcolor); DLL_API BOOL DLL_CALLCONV FreeImage_SetBackgroundColor(FIBITMAP *dib, RGBQUAD *bkcolor); // ICC profile routines ----------------------------------------------------- DLL_API FIICCPROFILE *DLL_CALLCONV FreeImage_GetICCProfile(FIBITMAP *dib); DLL_API FIICCPROFILE *DLL_CALLCONV FreeImage_CreateICCProfile(FIBITMAP *dib, void *data, long size); DLL_API void DLL_CALLCONV FreeImage_DestroyICCProfile(FIBITMAP *dib); // Line conversion routines ------------------------------------------------- DLL_API void DLL_CALLCONV FreeImage_ConvertLine1To4(BYTE *target, BYTE *source, int width_in_pixels); DLL_API void DLL_CALLCONV FreeImage_ConvertLine8To4(BYTE *target, BYTE *source, int width_in_pixels, RGBQUAD palette); DLL_API void DLL_CALLCONV FreeImage_ConvertLine16To4_555(BYTE *target, BYTE *source, int width_in_pixels); DLL_API void DLL_CALLCONV FreeImage_ConvertLine16To4_565(BYTE *target, BYTE *source, int width_in_pixels); DLL_API void DLL_CALLCONV FreeImage_ConvertLine24To4(BYTE *target, BYTE *source, int width_in_pixels); DLL_API void DLL_CALLCONV FreeImage_ConvertLine32To4(BYTE *target, BYTE *source, int width_in_pixels); DLL_API void DLL_CALLCONV FreeImage_ConvertLine1To8(BYTE *target, BYTE *source, int width_in_pixels); DLL_API void DLL_CALLCONV FreeImage_ConvertLine4To8(BYTE *target, BYTE *source, int width_in_pixels); DLL_API void DLL_CALLCONV FreeImage_ConvertLine16To8_555(BYTE *target, BYTE *source, int width_in_pixels); DLL_API void DLL_CALLCONV FreeImage_ConvertLine16To8_565(BYTE *target, BYTE *source, int width_in_pixels); DLL_API void DLL_CALLCONV FreeImage_ConvertLine24To8(BYTE *target, BYTE *source, int width_in_pixels); DLL_API void DLL_CALLCONV FreeImage_ConvertLine32To8(BYTE *target, BYTE *source, int width_in_pixels); DLL_API void DLL_CALLCONV FreeImage_ConvertLine1To16_555(BYTE *target, BYTE *source, int width_in_pixels, RGBQUAD *palette); DLL_API void DLL_CALLCONV FreeImage_ConvertLine4To16_555(BYTE *target, BYTE *source, int width_in_pixels, RGBQUAD *palette); DLL_API void DLL_CALLCONV FreeImage_ConvertLine8To16_555(BYTE *target, BYTE *source, int width_in_pixels, RGBQUAD *palette); DLL_API void DLL_CALLCONV FreeImage_ConvertLine16_565_To16_555(BYTE *target, BYTE *source, int width_in_pixels); DLL_API void DLL_CALLCONV FreeImage_ConvertLine24To16_555(BYTE *target, BYTE *source, int width_in_pixels); DLL_API void DLL_CALLCONV FreeImage_ConvertLine32To16_555(BYTE *target, BYTE *source, int width_in_pixels); DLL_API void DLL_CALLCONV FreeImage_ConvertLine1To16_565(BYTE *target, BYTE *source, int width_in_pixels, RGBQUAD *palette); DLL_API void DLL_CALLCONV FreeImage_ConvertLine4To16_565(BYTE *target, BYTE *source, int width_in_pixels, RGBQUAD *palette); DLL_API void DLL_CALLCONV FreeImage_ConvertLine8To16_565(BYTE *target, BYTE *source, int width_in_pixels, RGBQUAD *palette); DLL_API void DLL_CALLCONV FreeImage_ConvertLine16_555_To16_565(BYTE *target, BYTE *source, int width_in_pixels); DLL_API void DLL_CALLCONV FreeImage_ConvertLine24To16_565(BYTE *target, BYTE *source, int width_in_pixels); DLL_API void DLL_CALLCONV FreeImage_ConvertLine32To16_565(BYTE *target, BYTE *source, int width_in_pixels); DLL_API void DLL_CALLCONV FreeImage_ConvertLine1To24(BYTE *target, BYTE *source, int width_in_pixels, RGBQUAD *palette); DLL_API void DLL_CALLCONV FreeImage_ConvertLine4To24(BYTE *target, BYTE *source, int width_in_pixels, RGBQUAD *palette); DLL_API void DLL_CALLCONV FreeImage_ConvertLine8To24(BYTE *target, BYTE *source, int width_in_pixels, RGBQUAD *palette); DLL_API void DLL_CALLCONV FreeImage_ConvertLine16To24_555(BYTE *target, BYTE *source, int width_in_pixels); DLL_API void DLL_CALLCONV FreeImage_ConvertLine16To24_565(BYTE *target, BYTE *source, int width_in_pixels); DLL_API void DLL_CALLCONV FreeImage_ConvertLine32To24(BYTE *target, BYTE *source, int width_in_pixels); DLL_API void DLL_CALLCONV FreeImage_ConvertLine1To32(BYTE *target, BYTE *source, int width_in_pixels, RGBQUAD *palette); DLL_API void DLL_CALLCONV FreeImage_ConvertLine4To32(BYTE *target, BYTE *source, int width_in_pixels, RGBQUAD *palette); DLL_API void DLL_CALLCONV FreeImage_ConvertLine8To32(BYTE *target, BYTE *source, int width_in_pixels, RGBQUAD *palette); DLL_API void DLL_CALLCONV FreeImage_ConvertLine16To32_555(BYTE *target, BYTE *source, int width_in_pixels); DLL_API void DLL_CALLCONV FreeImage_ConvertLine16To32_565(BYTE *target, BYTE *source, int width_in_pixels); DLL_API void DLL_CALLCONV FreeImage_ConvertLine24To32(BYTE *target, BYTE *source, int width_in_pixels); // Smart conversion routines ------------------------------------------------ DLL_API FIBITMAP *DLL_CALLCONV FreeImage_ConvertTo4Bits(FIBITMAP *dib); DLL_API FIBITMAP *DLL_CALLCONV FreeImage_ConvertTo8Bits(FIBITMAP *dib); DLL_API FIBITMAP *DLL_CALLCONV FreeImage_ConvertTo16Bits555(FIBITMAP *dib); DLL_API FIBITMAP *DLL_CALLCONV FreeImage_ConvertTo16Bits565(FIBITMAP *dib); DLL_API FIBITMAP *DLL_CALLCONV FreeImage_ConvertTo24Bits(FIBITMAP *dib); DLL_API FIBITMAP *DLL_CALLCONV FreeImage_ConvertTo32Bits(FIBITMAP *dib); DLL_API FIBITMAP *DLL_CALLCONV FreeImage_ColorQuantize(FIBITMAP *dib, FREE_IMAGE_QUANTIZE quantize); DLL_API FIBITMAP *DLL_CALLCONV FreeImage_Threshold(FIBITMAP *dib, BYTE T); DLL_API FIBITMAP *DLL_CALLCONV FreeImage_Dither(FIBITMAP *dib, FREE_IMAGE_DITHER algorithm); DLL_API FIBITMAP *DLL_CALLCONV FreeImage_ConvertFromRawBits(BYTE *bits, int width, int height, int pitch, unsigned bpp, unsigned red_mask, unsigned green_mask, unsigned blue_mask, BOOL topdown FI_DEFAULT(FALSE)); DLL_API void DLL_CALLCONV FreeImage_ConvertToRawBits(BYTE *bits, FIBITMAP *dib, int pitch, unsigned bpp, unsigned red_mask, unsigned green_mask, unsigned blue_mask, BOOL topdown FI_DEFAULT(FALSE)); DLL_API FIBITMAP *DLL_CALLCONV FreeImage_ConvertToStandardType(FIBITMAP *src, BOOL scale_linear FI_DEFAULT(TRUE)); DLL_API FIBITMAP *DLL_CALLCONV FreeImage_ConvertToType(FIBITMAP *src, FREE_IMAGE_TYPE dst_type, BOOL scale_linear FI_DEFAULT(TRUE)); // ZLib interface ----------------------------------------------------------- DLL_API DWORD DLL_CALLCONV FreeImage_ZLibCompress(BYTE *target, DWORD target_size, BYTE *source, DWORD source_size); DLL_API DWORD DLL_CALLCONV FreeImage_ZLibUncompress(BYTE *target, DWORD target_size, BYTE *source, DWORD source_size); // -------------------------------------------------------------------------- // Metadata routines -------------------------------------------------------- // -------------------------------------------------------------------------- // iterator DLL_API FIMETADATA *DLL_CALLCONV FreeImage_FindFirstMetadata(FREE_IMAGE_MDMODEL model, FIBITMAP *dib, FITAG **tag); DLL_API BOOL DLL_CALLCONV FreeImage_FindNextMetadata(FIMETADATA *mdhandle, FITAG **tag); DLL_API void DLL_CALLCONV FreeImage_FindCloseMetadata(FIMETADATA *mdhandle); // setter and getter DLL_API BOOL DLL_CALLCONV FreeImage_SetMetadata(FREE_IMAGE_MDMODEL model, FIBITMAP *dib, const char *key, FITAG *tag); DLL_API BOOL DLL_CALLCONV FreeImage_GetMetadata(FREE_IMAGE_MDMODEL model, FIBITMAP *dib, const char *key, FITAG **tag); // helpers DLL_API unsigned DLL_CALLCONV FreeImage_GetMetadataCount(FREE_IMAGE_MDMODEL model, FIBITMAP *dib); // tag to C string conversion DLL_API const char* DLL_CALLCONV FreeImage_TagToString(FREE_IMAGE_MDMODEL model, FITAG *tag, char *Make FI_DEFAULT(NULL)); // -------------------------------------------------------------------------- // Image manipulation toolkit ----------------------------------------------- // -------------------------------------------------------------------------- // rotation and flipping DLL_API FIBITMAP *DLL_CALLCONV FreeImage_RotateClassic(FIBITMAP *dib, double angle); DLL_API FIBITMAP *DLL_CALLCONV FreeImage_RotateEx(FIBITMAP *dib, double angle, double x_shift, double y_shift, double x_origin, double y_origin, BOOL use_mask); DLL_API BOOL DLL_CALLCONV FreeImage_FlipHorizontal(FIBITMAP *dib); DLL_API BOOL DLL_CALLCONV FreeImage_FlipVertical(FIBITMAP *dib); // upsampling / downsampling DLL_API FIBITMAP *DLL_CALLCONV FreeImage_Rescale(FIBITMAP *dib, int dst_width, int dst_height, FREE_IMAGE_FILTER filter); // color manipulation routines (point operations) DLL_API BOOL DLL_CALLCONV FreeImage_AdjustCurve(FIBITMAP *dib, BYTE *LUT, FREE_IMAGE_COLOR_CHANNEL channel); DLL_API BOOL DLL_CALLCONV FreeImage_AdjustGamma(FIBITMAP *dib, double gamma); DLL_API BOOL DLL_CALLCONV FreeImage_AdjustBrightness(FIBITMAP *dib, double percentage); DLL_API BOOL DLL_CALLCONV FreeImage_AdjustContrast(FIBITMAP *dib, double percentage); DLL_API BOOL DLL_CALLCONV FreeImage_Invert(FIBITMAP *dib); DLL_API BOOL DLL_CALLCONV FreeImage_GetHistogram(FIBITMAP *dib, DWORD *histo, FREE_IMAGE_COLOR_CHANNEL channel FI_DEFAULT(FICC_BLACK)); // channel processing routines DLL_API FIBITMAP *DLL_CALLCONV FreeImage_GetChannel(FIBITMAP *dib, FREE_IMAGE_COLOR_CHANNEL channel); DLL_API BOOL DLL_CALLCONV FreeImage_SetChannel(FIBITMAP *dib, FIBITMAP *dib8, FREE_IMAGE_COLOR_CHANNEL channel); DLL_API FIBITMAP *DLL_CALLCONV FreeImage_GetComplexChannel(FIBITMAP *src, FREE_IMAGE_COLOR_CHANNEL channel); DLL_API BOOL DLL_CALLCONV FreeImage_SetComplexChannel(FIBITMAP *dst, FIBITMAP *src, FREE_IMAGE_COLOR_CHANNEL channel); // copy / paste / composite routines DLL_API FIBITMAP *DLL_CALLCONV FreeImage_Copy(FIBITMAP *dib, int left, int top, int right, int bottom); DLL_API BOOL DLL_CALLCONV FreeImage_Paste(FIBITMAP *dst, FIBITMAP *src, int left, int top, int alpha); DLL_API FIBITMAP *DLL_CALLCONV FreeImage_Composite(FIBITMAP *fg, BOOL useFileBkg FI_DEFAULT(FALSE), RGBQUAD *appBkColor FI_DEFAULT(NULL), FIBITMAP *bg FI_DEFAULT(NULL)); // restore the borland-specific enum size option #if defined(__BORLANDC__) #pragma option pop #endif #ifdef __cplusplus } #endif #endif // FREEIMAGE_H --- NEW FILE: Readme.txt --- Download FreeImage source code at http://freeimage.sourceforge.net/ Build the FreeImage static lib with MSVC project. Copy the FreeImage.lib and FreeImage.h in the extlib directory. Run : perl Makefile.pl nmake nmake install --- NEW FILE: FreeImage.lib --- (This appears to be a binary file; contents omitted.) |
From: jw <jw...@us...> - 2005-11-02 08:41:25
|
Update of /cvsroot/perl-win32-gui/Win32-GUI-DIBitmap/samples/bmp In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv32157/samples/bmp Added Files: 1.bmp 1.png 1.tga 2.bmp 2.png 2.tga 3.bmp 3.png 3.tga 4.bmp 4.png 4.tga 5.bmp 5.png 5.tga Zapotec.JPG Zapotec.bmp small.tga Log Message: Added to repository --- NEW FILE: 1.bmp --- (This appears to be a binary file; contents omitted.) --- NEW FILE: 4.bmp --- (This appears to be a binary file; contents omitted.) --- NEW FILE: small.tga --- (This appears to be a binary file; contents omitted.) --- NEW FILE: 4.tga --- (This appears to be a binary file; contents omitted.) --- NEW FILE: 2.bmp --- (This appears to be a binary file; contents omitted.) --- NEW FILE: Zapotec.JPG --- (This appears to be a binary file; contents omitted.) --- NEW FILE: 1.tga --- (This appears to be a binary file; contents omitted.) --- NEW FILE: 5.bmp --- (This appears to be a binary file; contents omitted.) --- NEW FILE: 2.png --- (This appears to be a binary file; contents omitted.) --- NEW FILE: 3.png --- (This appears to be a binary file; contents omitted.) --- NEW FILE: 5.tga --- (This appears to be a binary file; contents omitted.) --- NEW FILE: 2.tga --- (This appears to be a binary file; contents omitted.) --- NEW FILE: Zapotec.bmp --- (This appears to be a binary file; contents omitted.) --- NEW FILE: 4.png --- (This appears to be a binary file; contents omitted.) --- NEW FILE: 5.png --- (This appears to be a binary file; contents omitted.) --- NEW FILE: 3.tga --- (This appears to be a binary file; contents omitted.) --- NEW FILE: 1.png --- (This appears to be a binary file; contents omitted.) --- NEW FILE: 3.bmp --- (This appears to be a binary file; contents omitted.) |
From: jw <jw...@us...> - 2005-11-02 08:35:42
|
Update of /cvsroot/perl-win32-gui/Win32-GUI-DIBitmap/samples/bmp In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv32021/bmp Log Message: Directory /cvsroot/perl-win32-gui/Win32-GUI-DIBitmap/samples/bmp added to the repository |
From: jw <jw...@us...> - 2005-11-02 08:35:21
|
Update of /cvsroot/perl-win32-gui/Win32-GUI-DIBitmap/samples In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv31922/samples Log Message: Directory /cvsroot/perl-win32-gui/Win32-GUI-DIBitmap/samples added to the repository |
From: jw <jw...@us...> - 2005-11-02 08:35:20
|
Update of /cvsroot/perl-win32-gui/Win32-GUI-DIBitmap/extlib In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv31922/extlib Log Message: Directory /cvsroot/perl-win32-gui/Win32-GUI-DIBitmap/extlib added to the repository |
Update of /cvsroot/perl-win32-gui/Win32-GUI-Grid/MFCGrid In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv15861/MFCGrid Added Files: CellRange.h GridCell.cpp GridCell.h GridCellBase.cpp GridCellBase.h GridCellCheck.cpp GridCellCheck.h GridCellCombo.cpp GridCellCombo.h GridCellDateTime.cpp GridCellDateTime.h GridCellNumeric.cpp GridCellNumeric.h GridCellURL.cpp GridCellURL.h GridCtrl.cpp GridCtrl.h GridDropTarget.cpp GridDropTarget.h InPlaceEdit.cpp InPlaceEdit.h Makefile MemDC.h StdAfx.cpp StdAfx.h TitleTip.cpp TitleTip.h Log Message: Added to repository --- NEW FILE: InPlaceEdit.h --- ////////////////////////////////////////////////////////////////////// // InPlaceEdit.h : header file // // MFC Grid Control - inplace editing class // // Written by Chris Maunder <cma...@ma...> // Copyright (c) 1998-2002. All Rights Reserved. // // This code may be used in compiled form in any way you desire. This // file may be redistributed unmodified by any means PROVIDING it is // not sold for profit without the authors written consent, and // providing that this notice and the authors name and all copyright // notices remains intact. // // An email letting me know how you are using it would be nice as well. // // This file is provided "as is" with no expressed or implied warranty. // The author accepts no liability for any damage/loss of business that // this product may cause. // // For use with CGridCtrl v2.10+ // ////////////////////////////////////////////////////////////////////// #if !defined(AFX_INPLACEEDIT_H__ECD42821_16DF_11D1_992F_895E185F9C72__INCLUDED_) #define AFX_INPLACEEDIT_H__ECD42821_16DF_11D1_992F_895E185F9C72__INCLUDED_ #if _MSC_VER >= 1000 #pragma once #endif // _MSC_VER >= 1000 class CInPlaceEdit : public CEdit { // Construction public: CInPlaceEdit(CWnd* pParent, CRect& rect, DWORD dwStyle, UINT nID, int nRow, int nColumn, CString sInitText, UINT nFirstChar); // Attributes public: // Operations public: void EndEdit(); // Overrides // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CInPlaceEdit) public: virtual BOOL PreTranslateMessage(MSG* pMsg); protected: virtual void PostNcDestroy(); //}}AFX_VIRTUAL // Implementation public: virtual ~CInPlaceEdit(); // Generated message map functions protected: //{{AFX_MSG(CInPlaceEdit) afx_msg void OnKillFocus(CWnd* pNewWnd); afx_msg void OnChar(UINT nChar, UINT nRepCnt, UINT nFlags); afx_msg void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags); afx_msg UINT OnGetDlgCode(); //}}AFX_MSG DECLARE_MESSAGE_MAP() private: int m_nRow; int m_nColumn; CString m_sInitText; UINT m_nLastChar; BOOL m_bExitOnArrows; CRect m_Rect; }; ///////////////////////////////////////////////////////////////////////////// //{{AFX_INSERT_LOCATION}} // Microsoft Developer Studio will insert additional declarations immediately before the previous line. #endif // !defined(AFX_INPLACEEDIT_H__ECD42821_16DF_11D1_992F_895E185F9C72__INCLUDED_) --- NEW FILE: GridCellCheck.cpp --- // GridCellCheck.cpp : implementation file // // MFC Grid Control - Main grid cell class // // Provides the implementation for a combobox cell type of the // grid control. // // Written by Chris Maunder <cma...@ma...> // Copyright (c) 1998-2002. All Rights Reserved. // // Parts of the code contained in this file are based on the original // CInPlaceList from http://www.codeguru.com/listview // // This code may be used in compiled form in any way you desire. This // file may be redistributed unmodified by any means PROVIDING it is // not sold for profit without the authors written consent, and // providing that this notice and the authors name and all copyright // notices remains intact. // // An email letting me know how you are using it would be nice as well. // // This file is provided "as is" with no expressed or implied warranty. // The author accepts no liability for any damage/loss of business that // this product may cause. // // For use with CGridCtrl v2.22+ // // History: // 23 Jul 2001 - Complete rewrite // ///////////////////////////////////////////////////////////////////////////// #include "StdAfx.h" #include "GridCell.h" #include "GridCtrl.h" #include "GridCellCheck.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif IMPLEMENT_DYNCREATE(CGridCellCheck, CGridCell) CGridCellCheck::CGridCellCheck() : CGridCell() { m_bChecked = FALSE; //m_Rect.IsRectNull(); } CSize CGridCellCheck::GetCellExtent(CDC* pDC) { // Using SM_CXHSCROLL as a guide to the size of the checkbox int nWidth = GetSystemMetrics(SM_CXHSCROLL) + 2*GetMargin(); // Yogurt $$LR$$ CSize cellSize = CGridCell::GetCellExtent(pDC); cellSize.cx += nWidth; cellSize.cy = max (cellSize.cy, nWidth); return cellSize; } // i/o: i=dims of cell rect; o=dims of text rect BOOL CGridCellCheck::GetTextRect( LPRECT pRect) { BOOL bResult = CGridCell::GetTextRect(pRect); if (bResult) { int nWidth = GetSystemMetrics(SM_CXHSCROLL) + 2*GetMargin(); pRect->left += nWidth; if (pRect->left > pRect->right) pRect->left = pRect->right; } return bResult; } // Override draw so that when the cell is selected, a drop arrow is shown in the RHS. BOOL CGridCellCheck::Draw(CDC* pDC, int nRow, int nCol, CRect rect, BOOL bEraseBkgnd /*=TRUE*/) { BOOL bResult = CGridCell::Draw(pDC, nRow, nCol, rect, bEraseBkgnd); #ifndef _WIN32_WCE // Store the cell's dimensions for later m_Rect = rect; CRect CheckRect = GetCheckPlacement(); rect.left = CheckRect.right; // enough room to draw? // if (CheckRect.Width() < rect.Width() && CheckRect.Height() < rect.Height()) { // Do the draw pDC->DrawFrameControl(GetCheckPlacement(), DFC_BUTTON, (m_bChecked)? DFCS_BUTTONCHECK | DFCS_CHECKED : DFCS_BUTTONCHECK); // } #endif return bResult; } void CGridCellCheck::OnClick(CPoint PointCellRelative) { // PointCellRelative is relative to the topleft of the cell. Convert to client coords PointCellRelative += m_Rect.TopLeft(); CCellID cell = GetGrid()->GetCellFromPt (PointCellRelative); if (!GetGrid()->IsCellEditable (cell)) return; // GetCheckPlacement returns the checkbox dimensions in client coords. Only check/ // uncheck if the user clicked in the box if (GetCheckPlacement().PtInRect(PointCellRelative)) { m_bChecked = !m_bChecked; GetGrid()->InvalidateRect(m_Rect); } } ////////////////////////////////////////////////////////////////////// // Operations ////////////////////////////////////////////////////////////////////// BOOL CGridCellCheck::SetCheck(BOOL bChecked /*=TRUE*/) { BOOL bTemp = m_bChecked; m_bChecked = bChecked; if (!m_Rect.IsRectEmpty()) GetGrid()->InvalidateRect(m_Rect); return bTemp; } BOOL CGridCellCheck::GetCheck() { return m_bChecked; } ////////////////////////////////////////////////////////////////////// // Protected implementation ////////////////////////////////////////////////////////////////////// // Returns the dimensions and placement of the checkbox in client coords. CRect CGridCellCheck::GetCheckPlacement() { int nWidth = GetSystemMetrics(SM_CXHSCROLL); CRect place = m_Rect + CSize(GetMargin(), GetMargin()); place.right = place.left + nWidth; place.bottom = place.top + nWidth; /* for centering int nDiff = (place.Width() - nWidth)/2; if (nDiff > 0) { place.left += nDiff; place.right = place.left + nWidth; } nDiff = (place.Height() - nWidth)/2; if (nDiff > 0) { place.top += nDiff; place.bottom = place.top + nWidth; } */ // Yogurt $$LR$$ if (m_Rect.Height() < nWidth + 2 * (int)GetMargin() ) { place.top = m_Rect.top + (m_Rect.Height() - nWidth) / 2; place.bottom = place.top + nWidth; } return place; } --- NEW FILE: GridCell.cpp --- // GridCell.cpp : implementation file // // MFC Grid Control - Main grid cell class // // Provides the implementation for the "default" cell type of the // grid control. Adds in cell editing. // // Written by Chris Maunder <cma...@ma...> // Copyright (c) 1998-2002. All Rights Reserved. // // This code may be used in compiled form in any way you desire. This // file may be redistributed unmodified by any means PROVIDING it is // not sold for profit without the authors written consent, and // providing that this notice and the authors name and all copyright // notices remains intact. // // An email letting me know how you are using it would be nice as well. // // This file is provided "as is" with no expressed or implied warranty. // The author accepts no liability for any damage/loss of business that // this product may cause. // // For use with CGridCtrl v2.20+ // // History: // Eric Woodruff - 20 Feb 2000 - Added PrintCell() plus other minor changes // Ken Bertelson - 12 Apr 2000 - Split CGridCell into CGridCell and CGridCellBase // <ken...@ho...> // C Maunder - 17 Jun 2000 - Font handling optimsed, Added CGridDefaultCell // ///////////////////////////////////////////////////////////////////////////// #include "stdafx.h" #include "GridCell.h" #include "InPlaceEdit.h" #include "GridCtrl.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif IMPLEMENT_DYNCREATE(CGridCell, CGridCellBase) IMPLEMENT_DYNCREATE(CGridDefaultCell, CGridCell) ///////////////////////////////////////////////////////////////////////////// // GridCell CGridCell::CGridCell() { m_plfFont = NULL; CGridCell::Reset(); } CGridCell::~CGridCell() { delete m_plfFont; } ///////////////////////////////////////////////////////////////////////////// // GridCell Attributes void CGridCell::operator=(const CGridCell& cell) { if (this != &cell) CGridCellBase::operator=(cell); } void CGridCell::Reset() { CGridCellBase::Reset(); m_strText.Empty(); m_nImage = -1; m_lParam = NULL; // BUG FIX J. Bloggs 20/10/03 m_pGrid = NULL; m_bEditing = FALSE; m_pEditWnd = NULL; m_nFormat = (DWORD)-1; // Use default from CGridDefaultCell m_crBkClr = CLR_DEFAULT; // Background colour (or CLR_DEFAULT) m_crFgClr = CLR_DEFAULT; // Forground colour (or CLR_DEFAULT) m_nMargin = (UINT)-1; // Use default from CGridDefaultCell delete m_plfFont; m_plfFont = NULL; // Cell font } void CGridCell::SetFont(const LOGFONT* plf) { if (plf == NULL) { delete m_plfFont; m_plfFont = NULL; } else { if (!m_plfFont) m_plfFont = new LOGFONT; if (m_plfFont) memcpy(m_plfFont, plf, sizeof(LOGFONT)); } } LOGFONT* CGridCell::GetFont() const { if (m_plfFont == NULL) { CGridDefaultCell *pDefaultCell = (CGridDefaultCell*) GetDefaultCell(); if (!pDefaultCell) return NULL; return pDefaultCell->GetFont(); } return m_plfFont; } CFont* CGridCell::GetFontObject() const { // If the default font is specified, use the default cell implementation if (m_plfFont == NULL) { CGridDefaultCell *pDefaultCell = (CGridDefaultCell*) GetDefaultCell(); if (!pDefaultCell) return NULL; return pDefaultCell->GetFontObject(); } else { static CFont Font; Font.DeleteObject(); Font.CreateFontIndirect(m_plfFont); return &Font; } } DWORD CGridCell::GetFormat() const { if (m_nFormat == (DWORD)-1) { CGridDefaultCell *pDefaultCell = (CGridDefaultCell*) GetDefaultCell(); if (!pDefaultCell) return 0; return pDefaultCell->GetFormat(); } return m_nFormat; } UINT CGridCell::GetMargin() const { if (m_nMargin == (UINT)-1) { CGridDefaultCell *pDefaultCell = (CGridDefaultCell*) GetDefaultCell(); if (!pDefaultCell) return 0; return pDefaultCell->GetMargin(); } return m_nMargin; } ///////////////////////////////////////////////////////////////////////////// // GridCell Operations BOOL CGridCell::Edit(int nRow, int nCol, CRect rect, CPoint /* point */, UINT nID, UINT nChar) { if ( m_bEditing ) { if (m_pEditWnd) m_pEditWnd->SendMessage ( WM_CHAR, nChar ); } else { DWORD dwStyle = ES_LEFT; if (GetFormat() & DT_RIGHT) dwStyle = ES_RIGHT; else if (GetFormat() & DT_CENTER) dwStyle = ES_CENTER; m_bEditing = TRUE; // InPlaceEdit auto-deletes itself CGridCtrl* pGrid = GetGrid(); m_pEditWnd = new CInPlaceEdit(pGrid, rect, dwStyle, nID, nRow, nCol, GetText(), nChar); } return TRUE; } void CGridCell::EndEdit() { if (m_pEditWnd) ((CInPlaceEdit*)m_pEditWnd)->EndEdit(); } void CGridCell::OnEndEdit() { m_bEditing = FALSE; m_pEditWnd = NULL; } ///////////////////////////////////////////////////////////////////////////// // CGridDefaultCell CGridDefaultCell::CGridDefaultCell() { #ifdef _WIN32_WCE m_nFormat = DT_LEFT|DT_VCENTER|DT_SINGLELINE|DT_NOPREFIX; #else m_nFormat = DT_LEFT|DT_VCENTER|DT_SINGLELINE|DT_NOPREFIX | DT_END_ELLIPSIS; #endif m_crFgClr = CLR_DEFAULT; m_crBkClr = CLR_DEFAULT; m_Size = CSize(30,10); m_dwStyle = 0; #ifdef _WIN32_WCE LOGFONT lf; GetObject(GetStockObject(SYSTEM_FONT), sizeof(LOGFONT), &lf); SetFont(&lf); #else // not CE NONCLIENTMETRICS ncm; ncm.cbSize = sizeof(NONCLIENTMETRICS); VERIFY(SystemParametersInfo(SPI_GETNONCLIENTMETRICS, sizeof(NONCLIENTMETRICS), &ncm, 0)); SetFont(&(ncm.lfMessageFont)); #endif } CGridDefaultCell::~CGridDefaultCell() { m_Font.DeleteObject(); } void CGridDefaultCell::SetFont(const LOGFONT* plf) { ASSERT(plf); if (!plf) return; m_Font.DeleteObject(); m_Font.CreateFontIndirect(plf); CGridCell::SetFont(plf); // Get the font size and hence the default cell size CDC* pDC = CDC::FromHandle(::GetDC(NULL)); if (pDC) { CFont* pOldFont = pDC->SelectObject(&m_Font); SetMargin(pDC->GetTextExtent(_T(" "), 1).cx); m_Size = pDC->GetTextExtent(_T(" XXXXXXXXXXXX "), 14); m_Size.cy = (m_Size.cy * 3) / 2; pDC->SelectObject(pOldFont); ReleaseDC(NULL, pDC->GetSafeHdc()); } else { SetMargin(3); m_Size = CSize(40,16); } } LOGFONT* CGridDefaultCell::GetFont() const { ASSERT(m_plfFont); // This is the default - it CAN'T be NULL! return m_plfFont; } CFont* CGridDefaultCell::GetFontObject() const { ASSERT(m_Font.GetSafeHandle()); return (CFont*) &m_Font; } --- NEW FILE: Makefile --- # Microsoft Developer Studio Generated NMAKE File, Based on MFCGrid.dsp !IF "$(OS)" == "Windows_NT" NULL= !ELSE NULL=nul !ENDIF CPP=cl.exe RSC=rc.exe OUTDIR=.\Lib INTDIR=.\Build # Begin Custom Macros OutDir=.\Lib # End Custom Macros ALL : "$(OUTDIR)\MFCGrid.lib" CLEAN : -@erase "$(INTDIR)\GridCellUrl.obj" -@erase "$(INTDIR)\GridCellNumeric.obj" -@erase "$(INTDIR)\GridCellDateTime.obj" -@erase "$(INTDIR)\GridCellCheck.obj" -@erase "$(INTDIR)\GridCellCombo.obj" -@erase "$(INTDIR)\GridCell.obj" -@erase "$(INTDIR)\GridCellBase.obj" -@erase "$(INTDIR)\GridCtrl.obj" -@erase "$(INTDIR)\GridDropTarget.obj" -@erase "$(INTDIR)\InPlaceEdit.obj" -@erase "$(INTDIR)\StdAfx.obj" -@erase "$(INTDIR)\TitleTip.obj" -@erase "$(INTDIR)\vc60.idb" -@erase "$(INTDIR)\MFCGrid.pch" -@erase "$(OUTDIR)\MFCGrid.lib" "$(OUTDIR)" : mkdir "$(OUTDIR)" "$(INTDIR)" : mkdir "$(INTDIR)" CPP=cl.exe CPP_PROJ=/nologo /MD /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D"_WINDLL" /D"_USRDLL" /D "_AFXDLL" /D "_AFX_NOFORCE_LIBS" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c BSC32=bscmake.exe BSC32_FLAGS=/nologo /o"$(OUTDIR)\MFCGrid.bsc" BSC32_SBRS= \ LIB32=link.exe -lib LIB32_FLAGS=/nologo /out:"$(OUTDIR)\MFCGrid.lib" LIB32_OBJS= \ "$(INTDIR)\TitleTip.obj" \ "$(INTDIR)\InPlaceEdit.obj" \ "$(INTDIR)\GridDropTarget.obj" \ "$(INTDIR)\GridCtrl.obj" \ "$(INTDIR)\GridCellBase.obj" \ "$(INTDIR)\GridCell.obj" \ "$(INTDIR)\GridCellNumeric.obj" \ "$(INTDIR)\GridCellUrl.obj" \ "$(INTDIR)\GridCellDateTime.obj" \ "$(INTDIR)\GridCellCheck.obj" \ "$(INTDIR)\GridCellCombo.obj" \ "$(INTDIR)\StdAfx.obj" "$(OUTDIR)\MFCGrid.lib" : "$(OUTDIR)" "$(INTDIR)" $(DEF_FILE) $(LIB32_OBJS) $(LIB32) @<< $(LIB32_FLAGS) $(DEF_FLAGS) $(LIB32_OBJS) << .c{$(INTDIR)}.obj:: $(CPP) @<< $(CPP_PROJ) $< << .cpp{$(INTDIR)}.obj:: $(CPP) @<< $(CPP_PROJ) $< << .cxx{$(INTDIR)}.obj:: $(CPP) @<< $(CPP_PROJ) $< << .c{$(INTDIR)}.sbr:: $(CPP) @<< $(CPP_PROJ) $< << .cpp{$(INTDIR)}.sbr:: $(CPP) @<< $(CPP_PROJ) $< << .cxx{$(INTDIR)}.sbr:: $(CPP) @<< $(CPP_PROJ) $< << GridCell.cpp : \ "CellRange.h"\ "GridCell.h"\ "GridCellBase.h"\ "GridCtrl.h"\ "GridDropTarget.h"\ "InPlaceEdit.h"\ "StdAfx.h"\ "TitleTip.h" GridCellBase.cpp : \ "CellRange.h"\ "GridCell.h"\ "GridCellBase.h"\ "GridCtrl.h"\ "GridDropTarget.h"\ "StdAfx.h"\ "TitleTip.h" GridCtrl.cpp : \ "CellRange.h"\ "GridCell.h"\ "GridCellBase.h"\ "GridCtrl.h"\ "GridDropTarget.h"\ "MemDC.h"\ "StdAfx.h"\ "TitleTip.h" GridDropTarget.cpp : \ "CellRange.h"\ "GridCell.h"\ "GridCellBase.h"\ "GridCtrl.h"\ "GridDropTarget.h"\ "StdAfx.h"\ "TitleTip.h" InPlaceEdit.cpp : \ "CellRange.h"\ "GridCell.h"\ "GridCellBase.h"\ "GridCtrl.h"\ "GridDropTarget.h"\ "InPlaceEdit.h"\ "StdAfx.h"\ "TitleTip.h" StdAfx.cpp : \ "StdAfx.h" TitleTip.cpp : \ "CellRange.h"\ "GridCell.h"\ "GridCellBase.h"\ "GridCtrl.h"\ "GridDropTarget.h"\ "StdAfx.h"\ "TitleTip.h" GridCellNumeric.cpp : \ "GridCell.h"\ "GridCellBase.h"\ "GridCtrl.h"\ "InPlaceEdit.h"\ "StdAfx.h" GridCellDateTime.cpp : \ "GridCell.h"\ "GridCellBase.h"\ "GridCtrl.h"\ "StdAfx.h" GridCellCheck.cpp : \ "GridCellCheck.h"\ "GridCell.h"\ "GridCellBase.h"\ "GridCtrl.h"\ "StdAfx.h" GridCellCombo.cpp : \ "GridCellCombo.h"\ "GridCell.h"\ "GridCellBase.h"\ "GridCtrl.h"\ "StdAfx.h" GridCellUrl.cpp : \ "GridCellUrl.h"\ "GridCell.h"\ "GridCellBase.h"\ "GridCtrl.h"\ "StdAfx.h" SOURCE=GridCell.cpp "$(INTDIR)\GridCell.obj" : $(SOURCE) "$(INTDIR)" $(CPP) $(CPP_PROJ) $(SOURCE) SOURCE=GridCellBase.cpp "$(INTDIR)\GridCellBase.obj" : $(SOURCE) "$(INTDIR)" $(CPP) $(CPP_PROJ) $(SOURCE) SOURCE=GridCtrl.cpp "$(INTDIR)\GridCtrl.obj" : $(SOURCE) "$(INTDIR)" $(CPP) $(CPP_PROJ) $(SOURCE) SOURCE=GridDropTarget.cpp "$(INTDIR)\GridDropTarget.obj" : $(SOURCE) "$(INTDIR)" $(CPP) $(CPP_PROJ) $(SOURCE) SOURCE=InPlaceEdit.cpp "$(INTDIR)\InPlaceEdit.obj" : $(SOURCE) "$(INTDIR)" $(CPP) $(CPP_PROJ) $(SOURCE) SOURCE=StdAfx.cpp "$(INTDIR)\StdAfx.obj" : $(SOURCE) "$(INTDIR)" $(CPP) $(CPP_PROJ) $(SOURCE) SOURCE=TitleTip.cpp "$(INTDIR)\TitleTip.obj" : $(SOURCE) "$(INTDIR)" $(CPP) $(CPP_PROJ) $(SOURCE) SOURCE=GridCellNumeric.cpp "$(INTDIR)\GridCellNumeric.obj" : $(SOURCE) "$(INTDIR)" $(CPP) $(CPP_PROJ) $(SOURCE) SOURCE=GridCellDateTime.cpp "$(INTDIR)\GridCellDateTime.obj" : $(SOURCE) "$(INTDIR)" $(CPP) $(CPP_PROJ) $(SOURCE) SOURCE=GridCellCheck.cpp "$(INTDIR)\GridCellCheck.obj" : $(SOURCE) "$(INTDIR)" $(CPP) $(CPP_PROJ) $(SOURCE) SOURCE=GridCellCombo.cpp "$(INTDIR)\GridCellCombo.obj" : $(SOURCE) "$(INTDIR)" $(CPP) $(CPP_PROJ) $(SOURCE) SOURCE=GridCellUrl.cpp "$(INTDIR)\GridCellUrl.obj" : $(SOURCE) "$(INTDIR)" $(CPP) $(CPP_PROJ) $(SOURCE) --- NEW FILE: GridCellCombo.h --- #if !defined(AFX_GRIDCELLCOMBO_H__ECD42822_16DF_11D1_992F_895E185F9C72__INCLUDED_) #define AFX_GRIDCELLCOMBO_H__ECD42822_16DF_11D1_992F_895E185F9C72__INCLUDED_ #if _MSC_VER >= 1000 #pragma once #endif // _MSC_VER >= 1000 ///////////////////////////////////////////////////////////////////////////// // GridCellCombo.h : header file // // MFC Grid Control - Grid combo cell class header file // // Written by Chris Maunder <cma...@ma...> // Copyright (c) 1998-2002. All Rights Reserved. // // This code may be used in compiled form in any way you desire. This // file may be redistributed unmodified by any means PROVIDING it is // not sold for profit without the authors written consent, and // providing that this notice and the authors name and all copyright // notices remains intact. // // An email letting me know how you are using it would be nice as well. // // This file is provided "as is" with no expressed or implied warranty. // The author accepts no liability for any damage/loss of business that // this product may cause. // // For use with CGridCtrl v2.10 // ////////////////////////////////////////////////////////////////////// #include "GridCell.h" class CGridCellCombo : public CGridCell { friend class CGridCtrl; DECLARE_DYNCREATE(CGridCellCombo) public: CGridCellCombo(); // editing cells public: virtual BOOL Edit(int nRow, int nCol, CRect rect, CPoint point, UINT nID, UINT nChar); virtual CWnd* GetEditWnd() const; virtual void EndEdit(); // Operations public: virtual CSize GetCellExtent(CDC* pDC); // CGridCellCombo specific calls public: void SetOptions(const CStringArray& ar); void SetStyle(DWORD dwStyle) { m_dwStyle = dwStyle; } DWORD GetStyle() { return m_dwStyle; } protected: virtual BOOL Draw(CDC* pDC, int nRow, int nCol, CRect rect, BOOL bEraseBkgnd = TRUE); CStringArray m_Strings; DWORD m_dwStyle; }; class CGridCellList : public CGridCellCombo { DECLARE_DYNCREATE(CGridCellList) public: CGridCellList(); }; ///////////////////////////////////////////////////////////////////////////// // CComboEdit window #define IDC_COMBOEDIT 1001 class CComboEdit : public CEdit { // Construction public: CComboEdit(); // Attributes public: // Operations public: // Overrides // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CComboEdit) virtual BOOL PreTranslateMessage(MSG* pMsg); //}}AFX_VIRTUAL // Implementation public: virtual ~CComboEdit(); // Generated message map functions protected: //{{AFX_MSG(CComboEdit) afx_msg void OnKillFocus(CWnd* pNewWnd); afx_msg void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags); afx_msg void OnKeyUp(UINT nChar, UINT nRepCnt, UINT nFlags); //}}AFX_MSG DECLARE_MESSAGE_MAP() }; ///////////////////////////////////////////////////////////////////////////// // CInPlaceList window class CInPlaceList : public CComboBox { friend class CComboEdit; // Construction public: CInPlaceList(CWnd* pParent, // parent CRect& rect, // dimensions & location DWORD dwStyle, // window/combobox style UINT nID, // control ID int nRow, int nColumn, // row and column COLORREF crFore, COLORREF crBack, // Foreground, background colour CStringArray& Items, // Items in list CString sInitText, // initial selection UINT nFirstChar); // first character to pass to control // Attributes public: CComboEdit m_edit; // subclassed edit control // Operations public: // Overrides // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CInPlaceList) protected: virtual void PostNcDestroy(); //}}AFX_VIRTUAL // Implementation public: virtual ~CInPlaceList(); void EndEdit(); protected: int GetCorrectDropWidth(); // Generated message map functions protected: //{{AFX_MSG(CInPlaceList) afx_msg void OnKillFocus(CWnd* pNewWnd); afx_msg void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags); afx_msg void OnKeyUp(UINT nChar, UINT nRepCnt, UINT nFlags); afx_msg void OnDropdown(); afx_msg void OnSelChange(); afx_msg UINT OnGetDlgCode(); afx_msg HBRUSH CtlColor(CDC* pDC, UINT nCtlColor); //}}AFX_MSG //afx_msg void OnSelendOK(); DECLARE_MESSAGE_MAP() private: int m_nNumLines; CString m_sInitText; int m_nRow; int m_nCol; UINT m_nLastChar; BOOL m_bExitOnArrows; COLORREF m_crForeClr, m_crBackClr; }; ///////////////////////////////////////////////////////////////////////////// //{{AFX_INSERT_LOCATION}} // Microsoft Developer Studio will insert additional declarations immediately before the previous line. #endif // !defined(AFX_GRIDCELLCOMBO_H__ECD42822_16DF_11D1_992F_895E185F9C72__INCLUDED_) --- NEW FILE: GridCellURL.h --- // GridCellURL.h: interface for the CGridCellURL class. // ////////////////////////////////////////////////////////////////////// #if !defined(AFX_GridCellURL_H__9F4A50B4_D773_11D3_A439_F7E60631F563__INCLUDED_) #define AFX_GridCellURL_H__9F4A50B4_D773_11D3_A439_F7E60631F563__INCLUDED_ #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 #include "GridCell.h" typedef struct { LPCTSTR szURLPrefix; int nLength; } URLStruct; class CGridCellURL : public CGridCell { DECLARE_DYNCREATE(CGridCellURL) public: CGridCellURL(); virtual ~CGridCellURL(); virtual BOOL Draw(CDC* pDC, int nRow, int nCol, CRect rect, BOOL bEraseBkgnd = TRUE); // virtual BOOL Edit(int nRow, int nCol, CRect rect, CPoint point, UINT nID, UINT nChar); virtual LPCTSTR GetTipText() { return NULL; } void SetAutoLaunchUrl(BOOL bLaunch = TRUE) { m_bLaunchUrl = bLaunch; } BOOL GetAutoLaunchUrl() { return m_bLaunchUrl && !m_bEditing; } protected: virtual BOOL OnSetCursor(); virtual void OnClick(CPoint PointCellRelative); BOOL HasUrl(CString str); BOOL OverURL(CPoint& pt, CString& strURL); protected: #ifndef _WIN32_WCE static HCURSOR g_hLinkCursor; // Hyperlink mouse cursor HCURSOR GetHandCursor(); #endif static URLStruct g_szURIprefixes[]; protected: COLORREF m_clrUrl; COLORREF m_clrOld; BOOL m_bLaunchUrl; CRect m_Rect; }; #endif // !defined(AFX_GridCellURL_H__9F4A50B4_D773_11D3_A439_F7E60631F563__INCLUDED_) --- NEW FILE: GridCellDateTime.h --- // GridCellDateTime.h: interface for the CGridCellDateTime class. // // Provides the implementation for a datetime picker cell type of the // grid control. // // For use with CGridCtrl v2.22+ // ////////////////////////////////////////////////////////////////////// #if !defined(AFX_DATETIMECELL_H__A0B7DA0A_0AFE_4D28_A00E_846C96D7507A__INCLUDED_) #define AFX_DATETIMECELL_H__A0B7DA0A_0AFE_4D28_A00E_846C96D7507A__INCLUDED_ #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 #include "GridCell.h" #include "afxdtctl.h" // for CDateTimeCtrl class CGridCellDateTime : public CGridCell { friend class CGridCtrl; DECLARE_DYNCREATE(CGridCellDateTime) CTime m_cTime; DWORD m_dwStyle; public: CGridCellDateTime(); CGridCellDateTime(DWORD dwStyle); virtual ~CGridCellDateTime(); // editing cells public: void Init(DWORD dwStyle); virtual BOOL Edit(int nRow, int nCol, CRect rect, CPoint point, UINT nID, UINT nChar); virtual CWnd* GetEditWnd() const; virtual void EndEdit(); virtual CSize GetCellExtent(CDC* pDC); CTime* GetTime() {return &m_cTime;}; void SetTime(CTime time); }; class CInPlaceDateTime : public CDateTimeCtrl { // Construction public: CInPlaceDateTime(CWnd* pParent, // parent CRect& rect, // dimensions & location DWORD dwStyle, // window/combobox style UINT nID, // control ID int nRow, int nColumn, // row and column COLORREF crFore, COLORREF crBack, // Foreground, background colour CTime* pcTime, UINT nFirstChar); // first character to pass to control // Overrides // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CInPlaceList) protected: virtual void PostNcDestroy(); //}}AFX_VIRTUAL // Implementation public: virtual ~CInPlaceDateTime(); void EndEdit(); // Generated message map functions protected: //{{AFX_MSG(CInPlaceList) afx_msg void OnKillFocus(CWnd* pNewWnd); afx_msg void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags); afx_msg void OnKeyUp(UINT nChar, UINT nRepCnt, UINT nFlags); afx_msg UINT OnGetDlgCode(); afx_msg void OnCloseUp ( NMHDR * pNotifyStruct, LRESULT* result ); //}}AFX_MSG //afx_msg void OnSelendOK(); DECLARE_MESSAGE_MAP() private: CTime* m_pcTime; int m_nRow; int m_nCol; UINT m_nLastChar; BOOL m_bExitOnArrows; COLORREF m_crForeClr, m_crBackClr; }; class CGridCellTime : public CGridCellDateTime { CGridCellTime():CGridCellDateTime(DTS_TIMEFORMAT) {} DECLARE_DYNCREATE(CGridCellTime) }; class CGridCellDateCal : public CGridCellDateTime { CGridCellDateCal():CGridCellDateTime() {} virtual BOOL Edit(int nRow, int nCol, CRect rect, CPoint /* point */, UINT nID, UINT nChar); DECLARE_DYNCREATE(CGridCellDateCal) }; #endif // !defined(AFX_DATETIMECELL_H__A0B7DA0A_0AFE_4D28_A00E_846C96D7507A__INCLUDED_) --- NEW FILE: GridCell.h --- ///////////////////////////////////////////////////////////////////////////// // GridCell.h : header file // // MFC Grid Control - Grid cell class header file // // Written by Chris Maunder <cma...@ma...> // Copyright (c) 1998-2002. All Rights Reserved. // // This code may be used in compiled form in any way you desire. This // file may be redistributed unmodified by any means PROVIDING it is // not sold for profit without the authors written consent, and // providing that this notice and the authors name and all copyright // notices remains intact. // // An email letting me know how you are using it would be nice as well. // // This file is provided "as is" with no expressed or implied warranty. // The author accepts no liability for any damage/loss of business that // this product may cause. // // For use with CGridCtrl v2.20+ // ////////////////////////////////////////////////////////////////////// #if !defined(AFX_GRIDCELL_H__519FA702_722C_11D1_ABBA_00A0243D1382__INCLUDED_) #define AFX_GRIDCELL_H__519FA702_722C_11D1_ABBA_00A0243D1382__INCLUDED_ #if _MSC_VER >= 1000 #pragma once #endif // _MSC_VER >= 1000 class CGridCtrl; #include "GridCellBase.h" // Each cell contains one of these. Fields "row" and "column" are not stored since we // will usually have acces to them in other ways, and they are an extra 8 bytes per // cell that is probably unnecessary. class CGridCell : public CGridCellBase { friend class CGridCtrl; DECLARE_DYNCREATE(CGridCell) // Construction/Destruction public: CGridCell(); virtual ~CGridCell(); // Attributes public: void operator=(const CGridCell& cell); virtual void SetText(LPCTSTR szText) { m_strText = szText; } virtual void SetImage(int nImage) { m_nImage = nImage; } virtual void SetData(LPARAM lParam) { m_lParam = lParam; } virtual void SetGrid(CGridCtrl* pGrid) { m_pGrid = pGrid; } // virtual void SetState(const DWORD nState); - use base class version virtual void SetFormat(DWORD nFormat) { m_nFormat = nFormat; } virtual void SetTextClr(COLORREF clr) { m_crFgClr = clr; } virtual void SetBackClr(COLORREF clr) { m_crBkClr = clr; } virtual void SetFont(const LOGFONT* plf); virtual void SetMargin(UINT nMargin) { m_nMargin = nMargin; } virtual CWnd* GetEditWnd() const { return m_pEditWnd; } virtual void SetCoords(int /*nRow*/, int /*nCol*/) {} // don't need to know the row and // column for base implementation virtual LPCTSTR GetText() const { return (m_strText.IsEmpty())? _T("") : LPCTSTR(m_strText); } virtual int GetImage() const { return m_nImage; } virtual LPARAM GetData() const { return m_lParam; } virtual CGridCtrl* GetGrid() const { return m_pGrid; } // virtual DWORD GetState() const - use base class virtual DWORD GetFormat() const; virtual COLORREF GetTextClr() const { return m_crFgClr; } // TODO: change to use default cell virtual COLORREF GetBackClr() const { return m_crBkClr; } virtual LOGFONT* GetFont() const; virtual CFont* GetFontObject() const; virtual UINT GetMargin() const; virtual BOOL IsEditing() const { return m_bEditing; } virtual BOOL IsDefaultFont() const { return (m_plfFont == NULL); } virtual void Reset(); // editing cells public: virtual BOOL Edit(int nRow, int nCol, CRect rect, CPoint point, UINT nID, UINT nChar); virtual void EndEdit(); protected: virtual void OnEndEdit(); protected: CString m_strText; // Cell text (or binary data if you wish...) LPARAM m_lParam; // 32-bit value to associate with item int m_nImage; // Index of the list view items icon DWORD m_nFormat; COLORREF m_crFgClr; COLORREF m_crBkClr; LOGFONT* m_plfFont; UINT m_nMargin; BOOL m_bEditing; // Cell being edited? CGridCtrl* m_pGrid; // Parent grid control CWnd* m_pEditWnd; }; // This class is for storing grid default values. It's a little heavy weight, so // don't use it in bulk class CGridDefaultCell : public CGridCell { DECLARE_DYNCREATE(CGridDefaultCell) // Construction/Destruction public: CGridDefaultCell(); virtual ~CGridDefaultCell(); public: virtual DWORD GetStyle() const { return m_dwStyle; } virtual void SetStyle(DWORD dwStyle) { m_dwStyle = dwStyle; } virtual int GetWidth() const { return m_Size.cx; } virtual int GetHeight() const { return m_Size.cy; } virtual void SetWidth(int nWidth) { m_Size.cx = nWidth; } virtual void SetHeight(int nHeight) { m_Size.cy = nHeight; } // Disable these properties virtual void SetData(LPARAM /*lParam*/) { ASSERT(FALSE); } virtual void SetState(DWORD /*nState*/) { ASSERT(FALSE); } virtual DWORD GetState() const { return CGridCell::GetState()|GVIS_READONLY; } virtual void SetCoords( int /*row*/, int /*col*/) { ASSERT(FALSE); } virtual void SetFont(const LOGFONT* /*plf*/); virtual LOGFONT* GetFont() const; virtual CFont* GetFontObject() const; protected: CSize m_Size; // Default Size CFont m_Font; // Cached font DWORD m_dwStyle; // Cell Style - unused }; //{{AFX_INSERT_LOCATION}} // Microsoft Developer Studio will insert additional declarations immediately before the previous line. #endif // !defined(AFX_GRIDCELL_H__519FA702_722C_11D1_ABBA_00A0243D1382__INCLUDED_) --- NEW FILE: GridCellNumeric.h --- // GridCellNumeric.h: interface for the CGridCellNumeric class. // // Written by Andrew Truckle [ajt...@ws...] // ////////////////////////////////////////////////////////////////////// #if !defined(AFX_GRIDINTEGERCELL_H__3479ED0D_B57D_4940_B83D_9E2296ED75B5__INCLUDED_) #define AFX_GRIDINTEGERCELL_H__3479ED0D_B57D_4940_B83D_9E2296ED75B5__INCLUDED_ #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 #include "GridCell.h" class CGridCellNumeric : public CGridCell { DECLARE_DYNCREATE(CGridCellNumeric) public: virtual BOOL Edit(int nRow, int nCol, CRect rect, CPoint point, UINT nID, UINT nChar); virtual void EndEdit(); }; #endif // !defined(AFX_GRIDINTEGERCELL_H__3479ED0D_B57D_4940_B83D_9E2296ED75B5__INCLUDED_) --- NEW FILE: CellRange.h --- /////////////////////////////////////////////////////////////////////// // CellRange.h: header file // // MFC Grid Control - interface for the CCellRange class. // // Written by Chris Maunder <cma...@ma...> // Copyright (c) 1998-2002. All Rights Reserved. // // This code may be used in compiled form in any way you desire. This // file may be redistributed unmodified by any means PROVIDING it is // not sold for profit without the authors written consent, and // providing that this notice and the authors name and all copyright // notices remains intact. // // An email letting me know how you are using it would be nice as well. // // This file is provided "as is" with no expressed or implied warranty. // The author accepts no liability for any damage/loss of business that // this product may cause. // // For use with CGridCtrl v2.20+ // ////////////////////////////////////////////////////////////////////// #if !defined(AFX_CELLRANGE_H__F86EF761_725A_11D1_ABBA_00A0243D1382__INCLUDED_) #define AFX_CELLRANGE_H__F86EF761_725A_11D1_ABBA_00A0243D1382__INCLUDED_ #if _MSC_VER >= 1000 #pragma once #endif // _MSC_VER >= 1000 // The code contained in this file is based on the original // WorldCom Grid control written by Joe Willcoxson, // mailto:chi...@ao... // http://users.aol.com/chinajoe class CCellID { // Attributes public: int row, col; // Operations public: explicit CCellID(int nRow = -1, int nCol = -1) : row(nRow), col(nCol) {} int IsValid() const { return (row >= 0 && col >= 0); } int operator==(const CCellID& rhs) const { return (row == rhs.row && col == rhs.col); } int operator!=(const CCellID& rhs) const { return !operator==(rhs); } }; class CCellRange { public: CCellRange(int nMinRow = -1, int nMinCol = -1, int nMaxRow = -1, int nMaxCol = -1) { Set(nMinRow, nMinCol, nMaxRow, nMaxCol); } void Set(int nMinRow = -1, int nMinCol = -1, int nMaxRow = -1, int nMaxCol = -1); int IsValid() const; int InRange(int row, int col) const; int InRange(const CCellID& cellID) const; int Count() { return (m_nMaxRow - m_nMinRow + 1) * (m_nMaxCol - m_nMinCol + 1); } CCellID GetTopLeft() const; CCellRange Intersect(const CCellRange& rhs) const; int GetMinRow() const {return m_nMinRow;} void SetMinRow(int minRow) {m_nMinRow = minRow;} int GetMinCol() const {return m_nMinCol;} void SetMinCol(int minCol) {m_nMinCol = minCol;} int GetMaxRow() const {return m_nMaxRow;} void SetMaxRow(int maxRow) {m_nMaxRow = maxRow;} int GetMaxCol() const {return m_nMaxCol;} void SetMaxCol(int maxCol) {m_nMaxCol = maxCol;} int GetRowSpan() const {return m_nMaxRow - m_nMinRow + 1;} int GetColSpan() const {return m_nMaxCol - m_nMinCol + 1;} void operator=(const CCellRange& rhs); int operator==(const CCellRange& rhs); int operator!=(const CCellRange& rhs); protected: int m_nMinRow; int m_nMinCol; int m_nMaxRow; int m_nMaxCol; }; inline void CCellRange::Set(int minRow, int minCol, int maxRow, int maxCol) { m_nMinRow = minRow; m_nMinCol = minCol; m_nMaxRow = maxRow; m_nMaxCol = maxCol; } inline void CCellRange::operator=(const CCellRange& rhs) { if (this != &rhs) Set(rhs.m_nMinRow, rhs.m_nMinCol, rhs.m_nMaxRow, rhs.m_nMaxCol); } inline int CCellRange::operator==(const CCellRange& rhs) { return ((m_nMinRow == rhs.m_nMinRow) && (m_nMinCol == rhs.m_nMinCol) && (m_nMaxRow == rhs.m_nMaxRow) && (m_nMaxCol == rhs.m_nMaxCol)); } inline int CCellRange::operator!=(const CCellRange& rhs) { return !operator==(rhs); } inline int CCellRange::IsValid() const { return (m_nMinRow >= 0 && m_nMinCol >= 0 && m_nMaxRow >= 0 && m_nMaxCol >= 0 && m_nMinRow <= m_nMaxRow && m_nMinCol <= m_nMaxCol); } inline int CCellRange::InRange(int row, int col) const { return (row >= m_nMinRow && row <= m_nMaxRow && col >= m_nMinCol && col <= m_nMaxCol); } inline int CCellRange::InRange(const CCellID& cellID) const { return InRange(cellID.row, cellID.col); } inline CCellID CCellRange::GetTopLeft() const { return CCellID(m_nMinRow, m_nMinCol); } inline CCellRange CCellRange::Intersect(const CCellRange& rhs) const { return CCellRange(max(m_nMinRow,rhs.m_nMinRow), max(m_nMinCol,rhs.m_nMinCol), min(m_nMaxRow,rhs.m_nMaxRow), min(m_nMaxCol,rhs.m_nMaxCol)); } #endif // !defined(AFX_CELLRANGE_H__F86EF761_725A_11D1_ABBA_00A0243D1382__INCLUDED_) --- NEW FILE: GridCellBase.cpp --- // GridCellBase.cpp : implementation file // // MFC Grid Control - Main grid cell base class // // Provides the implementation for the base cell type of the // grid control. No data is stored (except for state) but default // implementations of drawing, printingetc provided. MUST be derived // from to be used. // // Written by Chris Maunder <cma...@ma...> // Copyright (c) 1998-2002. All Rights Reserved. // // This code may be used in compiled form in any way you desire. This // file may be redistributed unmodified by any means PROVIDING it is // not sold for profit without the authors written consent, and // providing that this notice and the authors name and all copyright // notices remains intact. // // An email letting me know how you are using it would be nice as well. // // This file is provided "as is" with no expressed or implied warranty. // The author accepts no liability for any damage/loss of business that // this product may cause. // // For use with CGridCtrl v2.22+ // // History: // Ken Bertelson - 12 Apr 2000 - Split CGridCell into CGridCell and CGridCellBase // C Maunder - 19 May 2000 - Fixed sort arrow drawing (Ivan Ilinov) // C Maunder - 29 Aug 2000 - operator= checks for NULL font before setting (Martin Richter) // C Maunder - 15 Oct 2000 - GetTextExtent fixed (Martin Richter) // C Maunder - 1 Jan 2001 - Added ValidateEdit // Yogurt - 13 Mar 2004 - GetCellExtent fixed // // NOTES: Each grid cell should take care of it's own drawing, though the Draw() // method takes an "erase background" paramter that is called if the grid // decides to draw the entire grid background in on hit. Certain ambient // properties such as the default font to use, and hints on how to draw // fixed cells should be fetched from the parent grid. The grid trusts the // cells will behave in a certain way, and the cells trust the grid will // supply accurate information. // ///////////////////////////////////////////////////////////////////////////// #include "stdafx.h" #include "GridCtrl.h" #include "GridCellBase.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif IMPLEMENT_DYNAMIC(CGridCellBase, CObject) ///////////////////////////////////////////////////////////////////////////// // GridCellBase CGridCellBase::CGridCellBase() { Reset(); } CGridCellBase::~CGridCellBase() { } ///////////////////////////////////////////////////////////////////////////// // GridCellBase Operations void CGridCellBase::Reset() { m_nState = 0; } void CGridCellBase::operator=(const CGridCellBase& cell) { if (this == &cell) return; SetGrid(cell.GetGrid()); // do first in case of dependencies SetText(cell.GetText()); SetImage(cell.GetImage()); SetData(cell.GetData()); SetState(cell.GetState()); SetFormat(cell.GetFormat()); SetTextClr(cell.GetTextClr()); SetBackClr(cell.GetBackClr()); SetFont(cell.IsDefaultFont()? NULL : cell.GetFont()); SetMargin(cell.GetMargin()); } ///////////////////////////////////////////////////////////////////////////// // CGridCellBase Attributes // Returns a pointer to a cell that holds default values for this particular type of cell CGridCellBase* CGridCellBase::GetDefaultCell() const { if (GetGrid()) return GetGrid()->GetDefaultCell(IsFixedRow(), IsFixedCol()); return NULL; } ///////////////////////////////////////////////////////////////////////////// // CGridCellBase Operations // EFW - Various changes to make it draw cells better when using alternate // color schemes. Also removed printing references as that's now done // by PrintCell() and fixed the sort marker so that it doesn't draw out // of bounds. BOOL CGridCellBase::Draw(CDC* pDC, int nRow, int nCol, CRect rect, BOOL bEraseBkgnd /*=TRUE*/) { // Note - all through this function we totally brutalise 'rect'. Do not // depend on it's value being that which was passed in. CGridCtrl* pGrid = GetGrid(); ASSERT(pGrid); if (!pGrid || !pDC) return FALSE; if( rect.Width() <= 0 || rect.Height() <= 0) // prevents imagelist item from drawing even return FALSE; // though cell is hidden //TRACE3("Drawing %scell %d, %d\n", IsFixed()? _T("Fixed ") : _T(""), nRow, nCol); int nSavedDC = pDC->SaveDC(); pDC->SetBkMode(TRANSPARENT); // Get the default cell implementation for this kind of cell. We use it if this cell // has anything marked as "default" CGridDefaultCell *pDefaultCell = (CGridDefaultCell*) GetDefaultCell(); if (!pDefaultCell) return FALSE; // Set up text and background colours COLORREF TextClr, TextBkClr; TextClr = (GetTextClr() == CLR_DEFAULT)? pDefaultCell->GetTextClr() : GetTextClr(); if (GetBackClr() == CLR_DEFAULT) TextBkClr = pDefaultCell->GetBackClr(); else { bEraseBkgnd = TRUE; TextBkClr = GetBackClr(); } // Draw cell background and highlighting (if necessary) if ( IsFocused() || IsDropHighlighted() ) { // Always draw even in list mode so that we can tell where the // cursor is at. Use the highlight colors though. if(GetState() & GVIS_SELECTED) { TextBkClr = ::GetSysColor(COLOR_HIGHLIGHT); TextClr = ::GetSysColor(COLOR_HIGHLIGHTTEXT); bEraseBkgnd = TRUE; } rect.right++; rect.bottom++; // FillRect doesn't draw RHS or bottom if (bEraseBkgnd) { TRY { CBrush brush(TextBkClr); pDC->FillRect(rect, &brush); } CATCH(CResourceException, e) { //e->ReportError(); } END_CATCH } // Don't adjust frame rect if no grid lines so that the // whole cell is enclosed. if(pGrid->GetGridLines() != GVL_NONE) { rect.right--; rect.bottom--; } if (pGrid->GetFrameFocusCell()) { // Use same color as text to outline the cell so that it shows // up if the background is black. TRY { CBrush brush(TextClr); pDC->FrameRect(rect, &brush); } CATCH(CResourceException, e) { //e->ReportError(); } END_CATCH } pDC->SetTextColor(TextClr); // Adjust rect after frame draw if no grid lines if(pGrid->GetGridLines() == GVL_NONE) { rect.right--; rect.bottom--; } //rect.DeflateRect(0,1,1,1); - Removed by Yogurt } else if ((GetState() & GVIS_SELECTED)) { rect.right++; rect.bottom++; // FillRect doesn't draw RHS or bottom pDC->FillSolidRect(rect, ::GetSysColor(COLOR_HIGHLIGHT)); rect.right--; rect.bottom--; pDC->SetTextColor(::GetSysColor(COLOR_HIGHLIGHTTEXT)); } else { if (bEraseBkgnd) { rect.right++; rect.bottom++; // FillRect doesn't draw RHS or bottom CBrush brush(TextBkClr); pDC->FillRect(rect, &brush); rect.right--; rect.bottom--; } pDC->SetTextColor(TextClr); } // Draw lines only when wanted if (IsFixed() && pGrid->GetGridLines() != GVL_NONE) { CCellID FocusCell = pGrid->GetFocusCell(); // As above, always show current location even in list mode so // that we know where the cursor is at. BOOL bHiliteFixed = pGrid->GetTrackFocusCell() && pGrid->IsValid(FocusCell) && (FocusCell.row == nRow || FocusCell.col == nCol); // If this fixed cell is on the same row/col as the focus cell, // highlight it. if (bHiliteFixed) { rect.right++; rect.bottom++; pDC->DrawEdge(rect, BDR_SUNKENINNER /*EDGE_RAISED*/, BF_RECT); rect.DeflateRect(1,1); } else { CPen lightpen(PS_SOLID, 1, ::GetSysColor(COLOR_3DHIGHLIGHT)), darkpen(PS_SOLID, 1, ::GetSysColor(COLOR_3DDKSHADOW)), *pOldPen = pDC->GetCurrentPen(); pDC->SelectObject(&lightpen); pDC->MoveTo(rect.right, rect.top); pDC->LineTo(rect.left, rect.top); pDC->LineTo(rect.left, rect.bottom); pDC->SelectObject(&darkpen); pDC->MoveTo(rect.right, rect.top); pDC->LineTo(rect.right, rect.bottom); pDC->LineTo(rect.left, rect.bottom); pDC->SelectObject(pOldPen); rect.DeflateRect(1,1); } } // Draw Text and image #if !defined(_WIN32_WCE_NO_PRINTING) && !defined(GRIDCONTROL_NO_PRINTING) if (!pDC->m_bPrinting) #endif { CFont *pFont = GetFontObject(); ASSERT(pFont); if (pFont) pDC->SelectObject(pFont); } //rect.DeflateRect(GetMargin(), 0); - changed by Yogurt rect.DeflateRect(GetMargin(), GetMargin()); rect.right++; rect.bottom++; if (pGrid->GetImageList() && GetImage() >= 0) { IMAGEINFO Info; if (pGrid->GetImageList()->GetImageInfo(GetImage(), &Info)) { // would like to use a clipping region but seems to have issue // working with CMemDC directly. Instead, don't display image // if any part of it cut-off // // CRgn rgn; // rgn.CreateRectRgnIndirect(rect); // pDC->SelectClipRgn(&rgn); // rgn.DeleteObject(); /* // removed by Yogurt int nImageWidth = Info.rcImage.right-Info.rcImage.left+1; int nImageHeight = Info.rcImage.bottom-Info.rcImage.top+1; if( nImageWidth + rect.left <= rect.right + (int)(2*GetMargin()) && nImageHeight + rect.top <= rect.bottom + (int)(2*GetMargin()) ) { pGrid->GetImageList()->Draw(pDC, GetImage(), rect.TopLeft(), ILD_NORMAL); } */ // Added by Yogurt int nImageWidth = Info.rcImage.right-Info.rcImage.left; int nImageHeight = Info.rcImage.bottom-Info.rcImage.top; if ((nImageWidth + rect.left <= rect.right) && (nImageHeight + rect.top <= rect.bottom)) pGrid->GetImageList()->Draw(pDC, GetImage(), rect.TopLeft(), ILD_NORMAL); //rect.left += nImageWidth+GetMargin(); } } // Draw sort arrow if (pGrid->GetSortColumn() == nCol && nRow == 0) { CSize size = pDC->GetTextExtent(_T("M")); int nOffset = 2; // Base the size of the triangle on the smaller of the column // height or text height with a slight offset top and bottom. // Otherwise, it can get drawn outside the bounds of the cell. size.cy -= (nOffset * 2); if (size.cy >= rect.Height()) size.cy = rect.Height() - (nOffset * 2); size.cx = size.cy; // Make the dimensions square // Kludge for vertical text BOOL bVertical = (GetFont()->lfEscapement == 900); // Only draw if it'll fit! //if (size.cx + rect.left < rect.right + (int)(2*GetMargin())) - changed / Yogurt if (size.cx + rect.left < rect.right) { int nTriangleBase = rect.bottom - nOffset - size.cy; // Triangle bottom right //int nTriangleBase = (rect.top + rect.bottom - size.cy)/2; // Triangle middle right //int nTriangleBase = rect.top + nOffset; // Triangle top right //int nTriangleLeft = rect.right - size.cx; // Triangle RHS //int nTriangleLeft = (rect.right + rect.left - size.cx)/2; // Triangle middle //int nTriangleLeft = rect.left; // Triangle LHS int nTriangleLeft; if (bVertical) nTriangleLeft = (rect.right + rect.left - size.cx)/2; // Triangle middle else nTriangleLeft = rect.right - size.cx; // Triangle RHS CPen penShadow(PS_SOLID, 0, ::GetSysColor(COLOR_3DSHADOW)); CPen penLight(PS_SOLID, 0, ::GetSysColor(COLOR_3DHILIGHT)); if (pGrid->GetSortAscending()) { // Draw triangle pointing upwards CPen *pOldPen = (CPen*) pDC->SelectObject(&penLight); pDC->MoveTo( nTriangleLeft + 1, nTriangleBase + size.cy + 1); pDC->LineTo( nTriangleLeft + (size.cx / 2) + 1, nTriangleBase + 1 ); pDC->LineTo( nTriangleLeft + size.cx + 1, nTriangleBase + size.cy + 1); pDC->LineTo( nTriangleLeft + 1, nTriangleBase + size.cy + 1); pDC->SelectObject(&penShadow); pDC->MoveTo( nTriangleLeft, nTriangleBase + size.cy ); pDC->LineTo( nTriangleLeft + (size.cx / 2), nTriangleBase ); pDC->LineTo( nTriangleLeft + size.cx, nTriangleBase + size.cy ); pDC->LineTo( nTriangleLeft, nTriangleBase + size.cy ); pDC->SelectObject(pOldPen); } else { // Draw triangle pointing downwards CPen *pOldPen = (CPen*) pDC->SelectObject(&penLight); pDC->MoveTo( nTriangleLeft + 1, nTriangleBase + 1 ); pDC->LineTo( nTriangleLeft + (size.cx / 2) + 1, nTriangleBase + size.cy + 1 ); pDC->LineTo( nTriangleLeft + size.cx + 1, nTriangleBase + 1 ); pDC->LineTo( nTriangleLeft + 1, nTriangleBase + 1 ); pDC->SelectObject(&penShadow); pDC->MoveTo( nTriangleLeft, nTriangleBase ); pDC->LineTo( nTriangleLeft + (size.cx / 2), nTriangleBase + size.cy ); pDC->LineTo( nTriangleLeft + size.cx, nTriangleBase ); pDC->LineTo( nTriangleLeft, nTriangleBase ); pDC->SelectObject(pOldPen); } if (!bVertical) rect.right -= size.cy; } } // We want to see '&' characters so use DT_NOPREFIX GetTextRect(rect); rect.right++; rect.bottom++; DrawText(pDC->m_hDC, GetText(), -1, rect, GetFormat() | DT_NOPREFIX); pDC->RestoreDC(nSavedDC); return TRUE; } ///////////////////////////////////////////////////////////////////////////// // CGridCellBase Mouse and Cursor events // Not yet implemented void CGridCellBase::OnMouseEnter() { TRACE0("Mouse entered cell\n"); } void CGridCellBase::OnMouseOver() { //TRACE0("Mouse over cell\n"); } // Not Yet Implemented void CGridCellBase::OnMouseLeave() { TRACE0("Mouse left cell\n"); } void CGridCellBase::OnClick( CPoint PointCellRelative) { UNUSED_ALWAYS(PointCellRelative); TRACE2("Mouse Left btn up in cell at x=%i y=%i\n", PointCellRelative.x, PointCellRelative.y); } void CGridCellBase::OnClickDown( CPoint PointCellRelative) { UNUSED_ALWAYS(PointCellRelative); TRACE2("Mouse Left btn down in cell at x=%i y=%i\n", PointCellRelative.x, PointCellRelative.y); } void CGridCellBase::OnRClick( CPoint PointCellRelative) { UNUSED_ALWAYS(PointCellRelative); TRACE2("Mouse right-clicked in cell at x=%i y=%i\n", PointCellRelative.x, PointCellRelative.y); } void CGridCellBase::OnDblClick( CPoint PointCellRelative) { UNUSED_ALWAYS(PointCellRelative); TRACE2("Mouse double-clicked in cell at x=%i y=%i\n", PointCellRelative.x, PointCellRelative.y); } // Return TRUE if you set the cursor BOOL CGridCellBase::OnSetCursor() { #ifndef _WIN32_WCE_NO_CURSOR SetCursor(AfxGetApp()->LoadStandardCursor(IDC_ARROW)); #endif return TRUE; } ///////////////////////////////////////////////////////////////////////////// // CGridCellBase editing void CGridCellBase::OnEndEdit() { ASSERT( FALSE); } BOOL CGridCellBase::ValidateEdit(LPCTSTR str) { UNUSED_ALWAYS(str); return TRUE; } ///////////////////////////////////////////////////////////////////////////// // CGridCellBase Sizing BOOL CGridCellBase::GetTextRect( LPRECT pRect) // i/o: i=dims of cell rect; o=dims of text rect { if (GetImage() >= 0) { IMAGEINFO Info; CGridCtrl* pGrid = GetGrid(); CImageList* pImageList = pGrid->GetImageList(); if (pImageList && pImageList->GetImageInfo( GetImage(), &Info)) { int nImageWidth = Info.rcImage.right-Info.rcImage.left; //+1; pRect->left += nImageWidth + GetMargin(); } } return TRUE; } // By default this uses the selected font (which is a bigger font) CSize CGridCellBase::GetTextExtent(LPCTSTR szText, CDC* pDC /*= NULL*/) { CGridCtrl* pGrid = GetGrid(); ASSERT(pGrid); BOOL bReleaseDC = FALSE; if (pDC == NULL || szText == NULL) { if (szText) pDC = pGrid->GetDC(); if (pDC == NULL || szText == NULL) { CGridDefaultCell* pDefCell = (CGridDefaultCell*) GetDefaultCell(); ASSERT(pDefCell); return CSize(pDefCell->GetWidth(), pDefCell->GetHeight()); } bReleaseDC = TRUE; } CFont *pOldFont = NULL, *pFont = GetFontObject(); if (pFont) pOldFont = pDC->SelectObject(pFont); CSize size; int nFormat = GetFormat(); // If the cell is a multiline cell, then use the width of the cell // to get the height if ((nFormat & DT_WORDBREAK) && !(nFormat & DT_SINGLELINE)) { CString str = szText; int nMaxWidth = 0; while (TRUE) { int nPos = str.Find(_T('\n')); CString TempStr = (nPos < 0)? str : str.Left(nPos); int nTempWidth = pDC->GetTextExtent(TempStr).cx; if (nTempWidth > nMaxWidth) nMaxWidth = nTempWidth; if (nPos < 0) break; str = str.Mid(nPos + 1); // Bug fix by Thomas Steinborn } CRect rect; rect.SetRect(0,0, nMaxWidth+1, 0); pDC->DrawText(szText, -1, rect, nFormat | DT_CALCRECT); size = rect.Size(); } else size = pDC->GetTextExtent(szText, _tcslen(szText)); // Removed by Yogurt //TEXTMETRIC tm; //pDC->GetTextMetrics(&tm); //size.cx += (tm.tmOverhang); if (pOldFont) pDC->SelectObject(pOldFont); size += CSize(2*GetMargin(), 2*GetMargin()); // Kludge for vertical text LOGFONT *pLF = GetFont(); if (pLF->lfEscapement == 900 || pLF->lfEscapement == -900) { int nTemp = size.cx; size.cx = size.cy; size.cy = nTemp; size += CSize(0, 4*GetMargin()); } if (bReleaseDC) pGrid->ReleaseDC(pDC); return size; } CSize CGridCellBase::GetCellExtent(CDC* pDC) { CSize size = GetTextExtent(GetText(), pDC); CSize ImageSize(0... [truncated message content] |
From: jw <jw...@us...> - 2005-11-01 12:34:56
|
Update of /cvsroot/perl-win32-gui/Win32-GUI-Grid In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv15861 Added Files: Changes Grid.pm Grid.xs MANIFEST Makefile.PL README TYPEMAP Log Message: Added to repository --- NEW FILE: Makefile.PL --- use ExtUtils::MakeMaker; # See lib/ExtUtils/MakeMaker.pm for details of how to influence # the contents of the Makefile that is written. WriteMakefile( 'NAME' => 'Win32::GUI::Grid', 'VERSION_FROM' => 'Grid.pm', 'XS' => { 'Grid.xs' => 'Grid.cpp' }, 'LIBS' => ['Comctl32.lib Mfc42.lib Eafxis.lib'], # e.g., '-lm' 'DEFINE' => '', # e.g., '-DHAVE_SOMETHING' 'INC' => '', # e.g., '-I/usr/include/other' 'MYEXTLIB' => './MFCGrid/Lib/MFCGrid.lib', ($] ge '5.005') ? ( 'AUTHOR' => 'ROCHER Laurent (lr...@cp...)', 'ABSTRACT' => 'Add a Grid control to Win32::GUI (MFC Grid from CodeProject.com)', ) : (), ); sub MY::xs_c { ' .xs.c: $(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) $(XSUBPP) $(XSPROTOARG) $(XSUBPPARGS) $*.xs > $*.c .xs.cpp: $(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) $(XSUBPP) $(XSPROTOARG) $(XSUBPPARGS) $*.xs > $*.cpp ./MFCGrid/Lib/MFCGrid.lib: MFCGrid/makefile cd MFCGrid nmake cd .. '; } --- NEW FILE: MANIFEST --- Makefile.PL Changes Grid.pm Grid.xs MANIFEST TYPEMAP MFCGrid/Makefile --- NEW FILE: Grid.xs --- /**********************************************************************/ /* G R I D . x s */ /**********************************************************************/ ////////////////////////////////////////////////////////////////////// // Include ////////////////////////////////////////////////////////////////////// // // MFC // #define _AFX_NOFORCE_LIBS // not force library #define _WINDLL // Windows DLL #define _USRDLL // #define _AFXDLL // Use shared MFC #define VC_EXTRALEAN // Exclude rarely-used stuff from Windows headers #include <afxwin.h> // MFC core and standard components [...3241 lines suppressed...] object->m_SvSub = NULL; object->SetCompareFunction(NULL); } else if (nCol < object->GetColumnCount()) { pFun = (SV*) object->m_RowSortFunc.GetAt (nCol); if (pFun != NULL) { SvREFCNT_dec (pFun); object->m_RowSortFunc.SetAtGrow(nCol, NULL); } } } # // in-built sort functions # static int CALLBACK pfnCellTextCompare(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort); # static int CALLBACK pfnCellNumericCompare(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort); # # ################################################################## --- NEW FILE: Grid.pm --- package Win32::GUI::Grid; use strict; use vars qw($VERSION @ISA @EXPORT @EXPORT_OK $AUTOLOAD); use Carp 'croak','carp'; use Win32::GUI; require Exporter; require DynaLoader; require AutoLoader; @ISA = qw(Exporter DynaLoader Win32::GUI::Window); # Items to export into callers namespace by default. Note: do not export # names by default without a very good reason. Use EXPORT_OK instead. # Do not simply export all your public functions/methods/constants. @EXPORT = qw ( GVL_NONE GVL_HORZ [...1199 lines suppressed...] =item C<_GetData> (nRow, nCol) [virtual Mode Only] Must return data cell. =item C<_CacheHint> (nMinRow, nMinCol, nMaxRow, nMaxCol) [virtual Mode Only] Range before request data. =head1 AUTHOR Laurent Rocher (lr...@cp...) HomePage : http://perso.club-internet.fr/rocherl/Win32GUI.html =head1 SEE ALSO Win32::GUI =cut --- NEW FILE: README --- Win32::GUI::Grid version 0.07 ============================= Win32::GUI::Grid add a grid control to Win32::GUI. This module use MFC Grid control By Chris Maunder. Url : http://www.codeproject.com/miscctrl/gridctrl.asp (Modified sources code include) INSTALLATION To install this module type the following: perl Makefile.PL make make install DEPENDENCIES This module requires these other modules and libraries: Win32::GUI Microsoft Foudation Classes (MFC) WEB PAGE AND PPM REPOSITORY See: http://perso.club-internet.fr/rocherl/Win32GUI.html COPYRIGHT AND LICENCE Copyright 2003 by Laurent Rocher (lr...@cp...). This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. See <http://www.perl.com/perl/misc/Artistic.html>. --- NEW FILE: Changes --- Revision history for Perl extension Win32::GUI::Grid. 0.07 14/02/2004 - Use MFC Grid control 2.25 - Correct EnsureCellVisible methods ( bad name in XS, but keep EnsureVisible for compatibility) - Fix locale setting problem. 0.06 14/02/2004 - Fix Clipboard error (Ctrl+C) [Thank to Andrew St. Denis] - Fix some Grid draw problem - Add WM_PRINTCLIENT support for new Win32::GUI -noflicker option. - New Cell Type (Calendar, URL) - SetCellOptions : New options 0.05 07/09/2003 - Add SetCellEditable method. - Add List cell editing. - New event _ChangedEdit for COMBO and LIST edit control when select change in list. 0.04 07/08/2003 - Correct -heigth option. - In InsertColumn, set last parameter optional. - Add Column Perl Sort method. 0.03 03/06/2003 - Correct Abnormal terminaison when multiple grid instance 0.02 03/06/2003 - Correct crash when destroy grid during cell edit. - Virtual Mode support. - New cell editing support. + Numeric + Date + Time + Check + Combo - Add Perl Sort method. 0.01 28/05/2003 - First build Win32::GUI::Grid - Use MFC Grid control 2.24 TODO - Printing support (???) --- NEW FILE: TYPEMAP --- TYPEMAP LPCTSTR T_PV LPCSTR T_PV LPTSTR T_PV DWORD T_IV UINT T_IV BOOL T_IV HBITMAP T_HANDLE HDC T_HANDLE HFONT T_HANDLE HIMAGELIST T_HANDLE HWND T_HANDLE CMFCWnd* T_MFCWND COLORREF T_COLOR ################################################################################ INPUT T_HANDLE if(SvROK($arg)) { if(hv_fetch((HV*)SvRV($arg), \"-handle\", 7, 0) != NULL) $var = ($type) SvIV(*(hv_fetch((HV*)SvRV($arg), \"-handle\", 7, 0))); else $var = NULL; } else $var = ($type) SvIV($arg); T_MFCWND $var = ($type) SvIV(*(hv_fetch((HV*)SvRV($arg), \"-CMFCWnd\", 8, 0))); T_COLOR $var = SvCOLORREF(aTHX_ $arg); ################################################################################ OUTPUT T_HANDLE sv_setiv($arg, (IV) $var); T_COLOR sv_setiv($arg, (IV) $var); |
Update of /cvsroot/perl-win32-gui/Win32-GUI-Grid/samples In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv15861/samples Added Files: one.bmp test1.pl test2.pl test3.pl test4.pl test5.pl test6.pl three.bmp two.bmp Log Message: Added to repository --- NEW FILE: test5.pl --- #! perl -w # # - Custom Cell Type # - Sort function # use strict; use Win32::GUI; use Win32::GUI::Grid; # main Window my $Window = new Win32::GUI::Window ( -title => "Win32::GUI::Grid test 5", -pos => [100, 100], -size => [400, 400], -name => "Window", ) or die "new Window"; # Grid Window my $Grid = new Win32::GUI::Grid ( -parent => $Window, -name => "Grid", -pos => [0, 0], ) or die "new Grid"; # Grid cell base $Grid->SetDefCellType(GVIT_NUMERIC); # Preset Cell type before cell creation # Init Grid $Grid->SetEditable(1); $Grid->SetRows(10); $Grid->SetColumns(10); $Grid->SetFixedRows(1); $Grid->SetFixedColumns(1); # Fill Grid for my $row (0..$Grid->GetRows()) { for my $col (0..$Grid->GetColumns()) { if ($row == 0) { $Grid->SetCellText($row, $col,"Column : $col"); } elsif ($col == 0) { $Grid->SetCellText($row, $col, "Row : $row"); } else { # $Grid->SetCellType($row, $col, GVIT_NUMERIC); # Set cell type after creation. $Grid->SetCellText($row, $col, $row*$col); } } } # Set Date edit control in cell (1,1) $Grid->SetCellText(1, 1, ""); $Grid->SetCellType(1, 1, GVIT_DATE); # Set Date edit control in cell (1,1) $Grid->SetCellText(2, 1, ""); $Grid->SetCellType(2, 1, GVIT_DATECAL); # Set Time edit control in cell (1,2) $Grid->SetCellText(1, 2, ""); $Grid->SetCellType(1, 2, GVIT_TIME); # Set Check edit control in cell (1,3) $Grid->SetCellText(1, 3, ""); $Grid->SetCellType(1, 3, GVIT_CHECK); $Grid->SetCellCheck(1, 3, 1); print "Cell Check : ", $Grid->GetCellCheck(1, 3), "\n"; # Set Combobox edit control in cell (1,4) $Grid->SetCellText(1, 4, ""); $Grid->SetCellType(1, 4, GVIT_COMBO); $Grid->SetCellOptions(1, 4, ["Option 1", "Option 2", "Option 3"]); # Set Listbox control in cell (1,5) $Grid->SetCellText(1, 5, ""); $Grid->SetCellType(1, 5, GVIT_LIST); $Grid->SetCellOptions(1, 5, ["Option 1", "Option 2", "Option 3"]); # Set Url control in cell (1,6) $Grid->SetCellText(1, 6, "www.perl.com"); $Grid->SetCellType(1, 6, GVIT_URL); $Grid->SetCellOptions(1, 6, -autolaunch => 0); # Set Url control in cell (2,6) $Grid->SetCellText(2, 6, "www.perl.com"); $Grid->SetCellType(2, 6, GVIT_URL); # Set uneditable cell (2,6) $Grid->SetCellEditable(2, 6, 0); # Sort Numeric reverse order (Method 1) # $Grid->SortNumericCells(5, 0); # Sort Numeric reverse order (Method 2) # $Grid->SortCells(5, 0, sub { my ($e1, $e2) = @_; return (int($e1) - int ($e2)); } ); # Sort Numeric reverse order (Method 3) # $Grid->SetSortFunction (sub { my ($e1, $e2) = @_; return (int($e1) - int ($e2)); } ); # $Grid->SortCells(7, 0); # $Grid->SetSortFunction (); # remove sort method # Resize Grid Cell $Grid->AutoSize(); # Event loop $Window->Show(); Win32::GUI::Dialog(); # Main window event handler sub Window_Terminate { return -1; } sub Window_Resize { my ($width, $height) = ($Window->GetClientRect)[2..3]; $Grid->Resize ($width, $height); } sub Grid_BeginEdit { my ($col, $row) = @_; print "Begin Edit ($col, $row)\n"; } sub Grid_ChangedEdit { my ($col, $row, $str) = @_; print "Changed Edit ($col, $row, $str)\n"; } sub Grid_EndEdit { my ($col, $row) = @_; print "End Edit ($col, $row)\n"; } --- NEW FILE: two.bmp --- (This appears to be a binary file; contents omitted.) --- NEW FILE: test3.pl --- #! perl -w # # Test Grid method # - Default cell setting # - font method # use strict; use Win32::GUI; use Win32::GUI::Grid; # main Window my $Window = new Win32::GUI::Window ( -title => "Win32::GUI::Grid test 3", -pos => [100, 100], -size => [400, 400], -name => "Window", ) or die "new Window"; # Grid Window my $Grid = $Window->AddGrid ( -name => "Grid", -pos => [0, 0], ) or die "new Grid"; # Image list my $IL = new Win32::GUI::ImageList(16, 16, 24, 3, 10); $IL->Add("one.bmp"); $IL->Add("two.bmp"); $IL->Add("three.bmp"); # Attach ImageList to grid $Grid->SetImageList($IL); # Set default cell style $Grid->SetDefCellTextColor(0,0, '#FF0000'); $Grid->SetDefCellTextColor(1,0, '#00FF00'); $Grid->SetDefCellTextColor(0,1, '#0000FF'); $Grid->SetDefCellBackColor(0,0, '#0000FF'); $Grid->SetDefCellBackColor(1,0, '#FF0000'); $Grid->SetDefCellBackColor(0,1, '#00FF00'); $Grid->SetDefCellFormat(0, 0, DT_RIGHT|DT_VCENTER|DT_SINGLELINE|DT_END_ELLIPSIS|DT_NOPREFIX); $Grid->SetDefCellFormat(0, 1, DT_RIGHT|DT_VCENTER|DT_SINGLELINE|DT_END_ELLIPSIS|DT_NOPREFIX); $Grid->SetDefCellFormat(1, 0, DT_LEFT|DT_WORDBREAK); # Change default font my %font = $Grid->GetDefCellFont(0,0); $font {-bold} = 1; $font {-height} = 10; $Grid->SetDefCellFont(0,0, %font); # Create Cells after set default style. (required for format ONLY) $Grid->SetRows(50); $Grid->SetColumns(10); $Grid->SetFixedRows(1); $Grid->SetFixedColumns(1); # Fill Grid for my $row (0..$Grid->GetRows()) { for my $col (0..$Grid->GetColumns()) { if ($row == 0) { $Grid->SetCellText($row, $col,"Column : $col"); $Grid->SetCellImage($row, $col, 0); # Add bitmap } elsif ($col == 0) { $Grid->SetCellText($row, $col, "Row : $row"); $Grid->SetCellImage($row, $col, 1); # Add bitmap } else { $Grid->SetCellText($row, $col, "Cell : ($row,$col)"); $Grid->SetCellImage($row, $col, 2); # Add bitmap } } } # Set Cell font $Grid->SetCellFont(0, 0, -name => 'Arial' , -size => 12, -italic => 1, -bold => 1); # Set font from a Win32::GUI::Font my $F = new Win32::GUI::Font( -name => "MS Sans Serif", -size => 10, -bold => 1, ); $Grid->SetCellFont(0, 1, $F->Info()); # Resize Grid Cell $Grid->AutoSize(); # Event loop $Window->Show(); Win32::GUI::Dialog(); # Main window event handler sub Window_Terminate { return -1; } sub Window_Resize { my ($width, $height) = ($Window->GetClientRect)[2..3]; $Grid->Resize ($width, $height); } sub Grid_Click { my ($row, $col) = @_; # Get font information print "\nFont for cell ($row, $col) :\n"; my %font = $Grid->GetCellFont($row, $col); for my $key (keys %font) { print $key, " => ", $font{$key}, "\n"; } } --- NEW FILE: test2.pl --- #! perl -w # # Test Grid method # - create option # - Color method # - ImageList support # - Event # - POINT, RECT method. use strict; use Win32::GUI; use Win32::GUI::Grid; # main Window my $Window = new Win32::GUI::Window ( -title => "Win32::GUI::Grid test 2", -pos => [100, 100], -size => [400, 400], -name => "Window", ) or die "new Window"; # Grid Window my $Grid = $Window->AddGrid ( -name => "Grid", -pos => [0, 0], -rows => 50, -columns => 10, -fixedrows => 1, -fixedcolumns => 1, -editable => 1, ) or die "new Grid"; # Image list my $IL = new Win32::GUI::ImageList(16, 16, 24, 3, 10); $IL->Add("one.bmp"); $IL->Add("two.bmp"); $IL->Add("three.bmp"); # Attach ImageList to grid $Grid->SetImageList($IL); # Change some color (different color format) $Grid->SetGridBkColor([66,66,66]); $Grid->SetGridLineColor('#0000ff'); $Grid->SetTitleTipBackClr('#00ff00'); $Grid->SetDefCellTextColor(0,0, 0x9F9F9F); $Grid->SetDefCellBackColor(0,0, 0x003300); # Some test my ($x, $y) = $Grid->GetCellOrigin(1, 1); print "CellOrigine(1,1) = ($x, $y)\n"; my ($left, $top, $right, $bottom) = $Grid->GetCellRect(1,1); print "GetCellRect(1,1) ($left, $top, $right, $bottom)\n"; ($left, $top, $right, $bottom) = $Grid->GetTextRect(1,1); print "GetTextRect(1,1) ($left, $top, $right, $bottom)\n"; ($x, $y) = $Grid->GetCellFromPt(85, 50); print "GetCellFromPt(85,50) = ($x, $y)\n"; # Fill Grid for my $row (0..$Grid->GetRows()) { for my $col (0..$Grid->GetColumns()) { if ($row == 0) { $Grid->SetCellFormat($row, $col, DT_LEFT|DT_WORDBREAK); $Grid->SetCellText($row, $col,"Column : $col"); $Grid->SetCellImage($row, $col, 0); # Add bitmap } elsif ($col == 0) { $Grid->SetCellFormat($row, $col, DT_RIGHT|DT_VCENTER|DT_SINGLELINE|DT_END_ELLIPSIS|DT_NOPREFIX); $Grid->SetCellText($row, $col, "Row : $row"); $Grid->SetCellImage($row, $col, 1); # Add bitmap } else { $Grid->SetCellFormat($row, $col, DT_RIGHT|DT_VCENTER|DT_SINGLELINE|DT_END_ELLIPSIS|DT_NOPREFIX); $Grid->SetCellText($row, $col, "Cell : ($row,$col)"); $Grid->SetCellImage($row, $col, 2); # Add bitmap } } } # Resize Grid Cell $Grid->AutoSize(); # Some test ($x, $y) = $Grid->GetCellOrigin(1, 1); print "CellOrigine(1,1) = ($x, $y)\n"; ($left, $top, $right, $bottom) = $Grid->GetCellRect(1,1); print "GetCellRect(1,1) ($left, $top, $right, $bottom)\n"; ($left, $top, $right, $bottom) = $Grid->GetTextRect(1,1); print "GetTextRect(1,1) ($left, $top, $right, $bottom)\n"; ($x, $y) = $Grid->GetCellFromPt(85, 50); print "GetCellFromPt(85,50) = ($x, $y)\n"; # Event loop $Window->Show(); Win32::GUI::Dialog(); # Main window event handler sub Window_Terminate { return -1; } sub Window_Resize { my ($width, $height) = ($Window->GetClientRect)[2..3]; $Grid->Resize ($width, $height); } sub Grid_Click { my ($col, $row) = @_; print "Click ($col, $row)\n"; } sub Grid_RClick { my ($col, $row) = @_; print "Right Click ($col, $row)\n"; } sub Grid_DblClick { my ($col, $row) = @_; print "Double Click ($col, $row)\n"; } sub Grid_Changing { my ($col, $row) = @_; print "Selection Changing ($col, $row)\n"; } sub Grid_Changed { my ($col, $row) = @_; print "Selection Changed ($col, $row)\n"; } sub Grid_BeginEdit { my ($col, $row) = @_; print "Begin Edit ($col, $row)\n"; } sub Grid_EndEdit { my ($col, $row) = @_; print "End Edit ($col, $row)\n"; } sub Grid_BeginDrag { my ($col, $row) = @_; print "Begin Drag ($col, $row)\n"; } --- NEW FILE: one.bmp --- (This appears to be a binary file; contents omitted.) --- NEW FILE: test4.pl --- #! perl -w # # Test Grid method # - Virtual mode # - EndEdit event in virtual mode # use strict; use Win32::GUI; use Win32::GUI::Grid; # main Window my $Window = new Win32::GUI::Window ( -title => "Win32::GUI::Grid test 4", -pos => [100, 100], -size => [400, 400], -name => "Window", ) or die "new Window"; # Grid Window my $Grid = $Window->AddGrid ( -name => "Grid", -pos => [0, 0], -rows => 50, # Use create option -columns => 10, -fixedrows => 1, -fixedcolumns => 1, -editable => 1, -virtual => 1, ) or die "new Grid"; # $Grid->SetVirtualMode(1); # Set virtual before set rows and columns # $Grid->SetRows(50); # $Grid->SetColumns(10); # $Grid->SetFixedRows(1); # $Grid->SetFixedColumns(1); # $Grid->SetEditable(1); $Grid->SetCellBkColor(2, 2, 0xFF0000); # Event loop $Window->Show(); Win32::GUI::Dialog(); # Main window event handler sub Window_Terminate { return -1; } sub Window_Resize { my ($width, $height) = ($Window->GetClientRect)[2..3]; $Grid->Resize ($width, $height); } # Virtual Grid request data sub Grid_GetData { my ($row, $col) = @_; return "Cell ($row, $col)"; } sub Grid_EndEdit { my ($col, $row, $str) = @_; print "End Edit ($col, $row) = $str\n"; return 1; } --- NEW FILE: test6.pl --- #! perl -w # # Test multiple Grid instance # noflicker Win32::GUI support # use strict; use Win32::GUI; use Win32::GUI::Grid; # main Window my $Window = new Win32::GUI::Window ( -title => "Win32::GUI::Grid test 6", -pos => [100, 100], -size => [400, 400], -name => "Window", -noflicker => 1, ) or die "new Window"; # Grid Window my $Grid = new Win32::GUI::Grid ( -parent => $Window, -name => "Grid", -pos => [0, 0], -rows => 10, -columns => 10, -fixedrows => 1, -fixedcolumns => 1, ) or die "new Grid"; my $Grid2 = new Win32::GUI::Grid ( -parent => $Window, -name => "Grid2", -pos => [0, 0], -rows => 10, -columns => 10, -fixedrows => 1, -fixedcolumns => 1, ) or die "new Grid2"; # Fill Grid for my $row (0..$Grid->GetRows()) { for my $col (0..$Grid->GetColumns()) { if ($row == 0) { $Grid->SetCellText($row, $col,"Column : $col"); $Grid2->SetCellText($row, $col,"Column : $col"); } elsif ($col == 0) { $Grid->SetCellText($row, $col, "Row : $row"); $Grid2->SetCellText($row, $col, "Row : $row"); } else { $Grid->SetCellText($row, $col, $row*$col); $Grid2->SetCellText($row, $col, $row*$col); } } } # Resize Grid Cell $Grid->AutoSize(); $Grid2->AutoSize(); # Event loop $Window->Show(); Win32::GUI::Dialog(); # Main window event handler sub Window_Terminate { return -1; } sub Window_Resize { my ($width, $height) = ($Window->GetClientRect)[2..3]; $Grid->Resize ($width, $height/2); $Grid2->Move (0, $height/2); $Grid2->Resize ($width, $height/2); } sub Grid_Click { my ($row, $col) = @_; print "Grid cell ($row, $col)\n"; } sub Grid2_Click { my ($row, $col) = @_; print "Grid2 cell ($row, $col)\n"; } --- NEW FILE: test1.pl --- #! perl -w # # Test Basic Grid method # use strict; use Win32::GUI; use Win32::GUI::Grid; # main Window my $Window = new Win32::GUI::Window ( -title => "Win32::GUI::Grid test 1", -pos => [100, 100], -size => [400, 400], -name => "Window", ) or die "new Window"; # Grid Window my $Grid = new Win32::GUI::Grid ( -parent => $Window, -name => "Grid", -pos => [0, 0], ) or die "new Grid"; # Init Grid $Grid->SetEditable(1); $Grid->SetRows(50); $Grid->SetColumns(10); $Grid->SetFixedRows(1); $Grid->SetFixedColumns(1); # Fill Grid for my $row (0..$Grid->GetRows()) { for my $col (0..$Grid->GetColumns()) { if ($row == 0) { $Grid->SetCellFormat($row, $col, DT_LEFT|DT_WORDBREAK); $Grid->SetCellText($row, $col,"Column : $col"); } elsif ($col == 0) { $Grid->SetCellFormat($row, $col, DT_RIGHT|DT_VCENTER|DT_SINGLELINE|DT_END_ELLIPSIS|DT_NOPREFIX); $Grid->SetCellText($row, $col, "Row : $row"); } else { $Grid->SetCellFormat($row, $col, DT_RIGHT|DT_VCENTER|DT_SINGLELINE|DT_END_ELLIPSIS|DT_NOPREFIX); $Grid->SetCellText($row, $col, "Cell : ($row,$col)"); } } } # Resize Grid Cell $Grid->AutoSize(); # Event loop $Window->Show(); Win32::GUI::Dialog(); # Main window event handler sub Window_Terminate { return -1; } sub Window_Resize { my ($width, $height) = ($Window->GetClientRect)[2..3]; $Grid->Resize ($width, $height); } --- NEW FILE: three.bmp --- (This appears to be a binary file; contents omitted.) |
From: jw <jw...@us...> - 2005-11-01 12:33:40
|
Update of /cvsroot/perl-win32-gui/Win32-GUI-Grid/samples In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv15758/samples Log Message: Directory /cvsroot/perl-win32-gui/Win32-GUI-Grid/samples added to the repository |
From: jw <jw...@us...> - 2005-11-01 12:33:40
|
Update of /cvsroot/perl-win32-gui/Win32-GUI-Grid/MFCGrid In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv15758/MFCGrid Log Message: Directory /cvsroot/perl-win32-gui/Win32-GUI-Grid/MFCGrid added to the repository |
From: jw <jw...@us...> - 2005-11-01 12:32:43
|
Update of /cvsroot/perl-win32-gui/Win32-GUI-AxWindow/Samples In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv15455/Samples Added Files: DHtmlEdit.pl DHtmlEdit.pm DHtmlEditor.pl Google.pl Info.bat InfoControl.pl MShtml.pl Movie.avi MovieControl.pl MsFlexGrid.pl SCGrid.pl TestOLE.pl WebBrowser.pl Log Message: Added to repository --- NEW FILE: MsFlexGrid.pl --- # perl -w # # Hosting MsFlexGrid : Test Indexed properties # use Cwd; use Win32::GUI; use Win32::GUI::AxWindow; # main Window $Window = new Win32::GUI::Window ( -title => "Win32::GUI::AxWindow test", -pos => [100, 100], -size => [400, 400], -name => "Window", ) or die "new Window"; # Create AxWindow $Control = new Win32::GUI::AxWindow ( -parent => $Window, -name => "Control", -pos => [0, 0], -size => [400, 400], -control => "MSFlexGridLib.MSFlexGrid", ) or die "new Control"; # Test Enum property set by string value # $Control->SetProperty("ScrollBars", "flexScrollBarNone"); # $Control->SetProperty("GridLines", "flexGridInset"); $Control->SetProperty("Rows", 5); $Control->SetProperty("Cols", 5); $Control->SetProperty("TextMatrix", 1, 2, "Hello!!!"); $r = $Control->GetProperty("Rows"); $c = $Control->GetProperty("Cols"); $t = $Control->GetProperty("TextMatrix", 1, 2); print "Rows = $r, Cols = $c, TextMatrix(1,2) = $t\n"; # Event loop $Window->Show(); Win32::GUI::Dialog(); # Main window event handler sub Window_Terminate { return -1; } sub Window_Resize { if (defined $Window) { ($width, $height) = ($Window->GetClientRect)[2..3]; $Control->Move (0, 0); $Control->Resize ($width, $height); } } --- NEW FILE: Movie.avi --- (This appears to be a binary file; contents omitted.) --- NEW FILE: WebBrowser.pl --- # perl -w # # Hosting a WebBrowser # Create a WebBrowser and register an event. # Enumerate Property, Methods and Events and create a Html file. # Load Html file in WebBrowser. # use Cwd; use Win32::GUI; use Win32::GUI::AxWindow; # main Window $Window = new Win32::GUI::Window ( -title => "Win32::GUI::AxWindow test", -pos => [100, 100], -size => [400, 400], -name => "Window", ) or die "new Window"; # Create AxWindow $Control = new Win32::GUI::AxWindow ( -parent => $Window, -name => "Control", -pos => [0, 0], -size => [400, 400], -control => "Shell.Explorer.2", # -control => "{8856F961-340A-11D0-A96B-00C04FD705A2}", ) or die "new Control"; # Register Event $Control->RegisterEvent("StatusTextChange", sub { $self = shift; $id = shift; print "Event : ", @_, "\n"; } ); # Enum Property info open (F, ">Webbrowser.html") or die "open"; print F '<HTML><BODY><HR><H1>Properties</H1><HR>'; foreach $id ($Control->EnumPropertyID()) { %property = $Control->GetPropertyInfo ($id); foreach $key (keys %property) { print F "<B>$key</B> = ", $property {$key}, "<BR>"; } print F "<P>"; } # Enum Method info print F "<P><HR><H1>Methods</H1><HR>"; foreach $id ($Control->EnumMethodID()) { %method = $Control->GetMethodInfo ($id); foreach $key (keys %method) { print F "<B>$key</B> = ", $method {$key}, "<BR>"; } print F "<P>"; } # Enum Event info print F "<P><HR><H1>Events</H1><HR>"; foreach $id ($Control->EnumEventID()) { %event = $Control->GetEventInfo ($id); foreach $key (keys %event) { print F "<B>$key</B> = ", $event {$key}, "<BR>"; } print F "<P>"; } print F "</BODY></HTML>"; close (F); # Method call $dir = cwd; $path = "file://$dir/Webbrowser.html"; # print $path, "\n"; $Control->CallMethod("Navigate", $path); # Event loop $Window->Show(); Win32::GUI::Dialog(); # Main window event handler sub Window_Terminate { return -1; } sub Window_Resize { if (defined $Window) { ($width, $height) = ($Window->GetClientRect)[2..3]; $Control->Move (0, 0); $Control->Resize ($width, $height); } } --- NEW FILE: DHtmlEdit.pm --- # # Win32::GUI::DHtmlEdit : wrapper package for DHtmlEdit ActiveX # by Laurent Rocher. # # TODO : Check ExecuteCommand (Some commande have parametre) # TODO : Check QueryStatus (Usefull for all) # package Win32::GUI::DHtmlEdit; use strict; use vars qw(@ISA $VERSION); use Carp 'croak','carp'; use Win32::GUI::AxWindow; @ISA = qw(Win32::GUI::AxWindow Exporter); $VERSION = "1.0"; [...1362 lines suppressed...] my ($self, $callback) = @_; $self->RegisterEvent ("onblur", $callback); } # # onreadystatechange # sub OnReadyStateChange { croak("Usage: OnReadyStateChange (CallBack)") if (@_ != 2); my ($self, $callback) = @_; $self->RegisterEvent ("onreadystatechange", $callback); } 1; --- NEW FILE: DHtmlEdit.pl --- # perl -w # # Hosting DHtmlEdit basic # use Cwd; use Win32::GUI; use Win32::GUI::AxWindow; # main Window $Window = new Win32::GUI::Window ( -name => "Window", -title => "Win32::GUI::AxWindow test", -pos => [100, 100], -size => [400, 400], ) or die "new Window"; # Create AxWindow $Control = new Win32::GUI::AxWindow ( -parent => $Window, -name => "Control", -pos => [0, 0], -size => [400, 400], -control => "{2D360200-FFF5-11D1-8D03-00A0C959BC0A}", ) or die "new Control"; # Method call $Control->CallMethod("NewDocument"); # Event loop $Window->Show(); Win32::GUI::Dialog(); # Main window event handler sub Window_Terminate { # Print Html Text print $Control->GetProperty("DocumentHTML"); return -1; } sub Window_Resize { if (defined $Window) { ($width, $height) = ($Window->GetClientRect)[2..3]; $Control->Move (0, 0); $Control->Resize ($width, $height); } } --- NEW FILE: MovieControl.pl --- # perl -v # # Hosting Movie Control (A movie player control see http://www.viscomsoft.com/movieplayer.htm) # use Cwd; use Win32::GUI; use Win32::GUI::AxWindow; # main Window $Window = new Win32::GUI::Window ( -title => "Movie Control Test", -pos => [100, 100], -size => [400, 400], -name => "Window", ) or die "new Window"; # Create AxWindow $Control = new Win32::GUI::AxWindow ( -parent => $Window, -name => "Control", -pos => [0, 0], -size => [400, 400], # -control => "{F4A32EAF-F30D-466D-BEC8-F4ED86CAF84E}", -control => "MOVIEPLAYER.MoviePlayerCtrl.1", ) or die "new Control"; # Load Avi file $Control->SetProperty("FileName", "movie.avi"); # Event loop $Window->Show(); # Start Avi player $Control->CallMethod("Play"); Win32::GUI::Dialog(); # Main window event handler sub Window_Terminate { # Release all before destroy window # $Control->Release(); return -1; } sub Window_Resize { if (defined $Window) { ($width, $height) = ($Window->GetClientRect)[2..3]; $Control->Move (0, 0); $Control->Resize ($width, $height); } } --- NEW FILE: SCGrid.pl --- # perl -w # # Hosting SCGrid (A freeware Grid ActiveX see : http://www.scgrid.com/) # use Cwd; use Win32::GUI; use Win32::GUI::AxWindow; # main Window $Window = new Win32::GUI::Window ( -title => "Win32::GUI::AxWindow test", -pos => [100, 100], -size => [400, 400], -name => "Window", ) or die "new Window"; # Create AxWindow $Control = new Win32::GUI::AxWindow ( -parent => $Window, -name => "Control", -pos => [0, 0], -size => [400, 400], -control => "prjSCGrid.SCGrid", ) or die "new Control"; # Redraw Off $Control->SetProperty("Redraw", 0); # Create 1 Fixed col and Row $Control->SetProperty("FixedRows", 1); $Control->SetProperty("FixedCols", 1); # Create 5 col and Row $Control->SetProperty("Rows", 5); $Control->SetProperty("Cols", 5); # Adjust grid on column $Control->SetProperty("AdjustLast", "scColumn"); # Add Resize column mode $Control->SetProperty("ResizeMode", "scColumn"); # Fill Cell for $C (0..4) { for $R (0..4) { $Control->SetProperty("Text", $R, $C, "Cell ($R, $C)"); } } # Fill Fixed Rows $Control->SetProperty("Text", -1, -1, " "); for $R (0..4) { $Control->SetProperty("Text", $R, -1, "$R"); } $Control->CallMethod("AdjustWidth", -1, -32767); # Force optional value # Fill Fixed Cols and adjust size for $C (0..4) { $Control->SetProperty("Text", -1, $C, "FixedCol($C)"); $Control->CallMethod("AdjustWidth", $C, -32767); # Force optional value } # Enable draw mode $Control->SetProperty("Redraw", 1); # Some property get $r = $Control->GetProperty("Rows"); $c = $Control->GetProperty("Cols"); $t = $Control->GetProperty("Text", 1, 2); print "Rows = $r, Cols = $c, Text(1,2) = $t\n"; # Event loop $Window->Show(); Win32::GUI::Dialog(); # Main window event handler sub Window_Terminate { return -1; } sub Window_Resize { if (defined $Window) { ($width, $height) = ($Window->GetClientRect)[2..3]; $Control->Move (0, 0); $Control->Resize ($width, $height); } } --- NEW FILE: TestOLE.pl --- # perl -W # # Host with AxWindow and manipulate with Win32::OLE # - Use GetOLE # - Call method # - Write in a HTML document # use Cwd; use Win32::GUI; use Win32::OLE; use Win32::GUI::AxWindow; # main Window $Window = new Win32::GUI::Window ( -title => "Win32::GUI::AxWindow and Win32::OLE", -pos => [100, 100], -size => [400, 400], -name => "Window", ) or die "new Window"; # A button $Button = new Win32::GUI::Button ( -parent => $Window, -name => "Button", -pos => [0, 25], -size => [400, 50], -text => "Click me !!!", ); # Create AxWindow $Control = new Win32::GUI::AxWindow ( -parent => $Window, -name => "Control", -pos => [0, 100], -size => [400, 300], -control => "Shell.Explorer.2", ) or die "new Control"; # Get Ole object $OLEControl = $Control->GetOLE(); # $OLEControl->Navigate("about:blank"); # Clear control $OLEControl->Navigate("http://www.google.com/"); # Event loop $Window->Show(); Win32::GUI::Dialog(); # Button Event sub Button_Click { $OLEControl->{Document}->{body}->insertAdjacentHTML("BeforeEnd","Click !!!"); print "HTML = ", $OLEControl->{Document}->{body}->innerHTML, "\n"; } # Main window event handler sub Window_Terminate { # Release all before destroy window undef $OLEControl; $Control->Release(); return -1; } sub Window_Resize { if (defined $Window) { ($width, $height) = ($Window->GetClientRect)[2..3]; $Button->Move(0,25); $Button->Resize ($width, 50); $Control->Move (0, 100); $Control->Resize ($width, $height-100); } } --- NEW FILE: DHtmlEditor.pl --- # perl -w # # Hosting DHtmlEdit and use wrapper package # # use Cwd; use Win32::GUI; use DHtmlEdit; my $HtmlFile = ""; my $Directory = cwd; # main menu my $Menu = Win32::GUI::MakeMenu( "&File" => "File", " > &New..." => "FileNew", " > &Open..." => "FileOpen", " > -" => 0, " > &Save" => "FileSave", " > Save &As..." => "FileSaveAs", " > -" => 0, " > &Print" => "FilePrint", " > -" => 0, " > &Directory..." => "FileDirectory", " > -" => 0, " > E&xit" => "FileExit", "&Edit" => "Edit", " > &Undo" => "EditUndo", " > &Redo" => "EditRedo", " > -" => 0, " > Cu&t" => "EditCut", " > &Copy" => "EditCopy", " > &Paste" => "EditPaste", " > -" => 0, " > &Select All" => "EditSelectAll", " > &Delete" => "EditDelete", " > -" => 0, " > &Find " => "EditFind", "&Format" => "Format", " > &Bold" => "FormatBold", " > &Italic" => "FormatItalic", " > &Underline" => "FormatUnderline", " > &Font..." => "FormatFont", " > -" => 0, " > Justify &Left" => "FormatJustifyLeft", " > Justify &Center" => "FormatJustifyCenter", " > Justify &Right" => "FormatJustifyRight", " > -" => 0, " > &Indent" => "FormatIndent", " > &Outdent" => "FormatOutdent", "&Insert" => "Insert", " > &HyperLink..." => "InsertHyperLink", " > &Image..." => "InsertImage", " > -" => 0, " > &OrderList" => "InsertOrderList", " > &UnOrderList" => "InsertUnOrderList", " > -" => 0, " > &Unlink" => "InsertUnlink", "&Help" => "Help", " > &About" => "HelpAbout", ); # main Window $Window = new Win32::GUI::Window ( -name => "Window", -title => "Win32::GUI::AxWindow test", -pos => [100, 100], -size => [400, 400], -menu => $Menu, ) or die "new Window"; # Create AxWindow $Control = new Win32::GUI::DHtmlEdit ( -parent => $Window, -name => "Control", -pos => [0, 0], -size => [400, 400], ) or die "new Control"; # Method call $Control->DocumentHTML('<HTML><BODY><B>Hello World !!!</B></BODY></HTML>'); # Event handler $Control->OnDisplayChanged ( "Event_DisplayChanged" ); # Event loop $Window->Show(); Win32::GUI::Dialog(); sub Event_DisplayChanged { my $self = shift; # Check Edit menu if ($Control->QueryUndo() == 3) { $Menu->{EditUndo}->Enabled(1); } else { $Menu->{EditUndo}->Enabled(0); } if ($Control->QueryRedo() == 3) { $Menu->{EditRedo}->Enabled(1); } else { $Menu->{EditRedo}->Enabled(0); } if ($Control->QueryCut() == 3) { $Menu->{EditCut}->Enabled(1); } else { $Menu->{EditCut}->Enabled(0); } if ($Control->QueryCopy() == 3) { $Menu->{EditCopy}->Enabled(1); } else { $Menu->{EditCopy}->Enabled(0); } if ($Control->QueryPaste() == 3) { $Menu->{EditPaste}->Enabled(1); } else { $Menu->{EditPaste}->Enabled(0); } if ($Control->QuerySelectAll() == 3) { $Menu->{EditSelectAll}->Enabled(1); } else { $Menu->{EditSelectAll}->Enabled(0); } if ($Control->QueryDelete() == 3) { $Menu->{EditDelete}->Enabled(1); } else { $Menu->{EditDelete}->Enabled(0); } } # Finish method sub Finish { # Change after last save. if ($Control->IsDirty()) { FileSave_Click(); } return -1; } # Main window event handler sub Window_Terminate { return Finish (); } sub Window_Resize { if (defined $Window) { ($width, $height) = ($Window->GetClientRect)[2..3]; $Control->Move (0, 0); $Control->Resize ($width, $height); } } ####################################################################### # # File Menu # ####################################################################### # New sub FileNew_Click { $Control->NewDocument (); $HtmlFile = ""; } # Open sub FileOpen_Click { my $ret = Win32::GUI::GetOpenFileName( -title => "Open html File", -filter => [ "Html Document (*.htm, *.html)" => "*.htm;*.html", "All files", "*.*", ], -directory => $Directory, ); if ($ret) { $HtmlFile = $ret; $Control->LoadDocument ($HtmlFile); } elsif (Win32::GUI::CommDlgExtendedError()) { Win32::GUI::MessageBox (0, "ERROR : ".Win32::GUI::CommDlgExtendedError(), "GetOpenFileName Error"); } } # Save sub FileSave_Click { unless ($HtmlFile eq "") { my $ret = Win32::GUI::MessageBox (0, "Overwrite existing file ?", "Save",MB_ICONQUESTION | MB_YESNOCANCEL); if ($ret == 6) { $ret = $Control->SaveDocument ($HtmlFile); unless ($ret) { Win32::GUI::MessageBox (0, "ERROR : SaveDocument ", "Save Error"); } } elsif ($ret == 7) { FileSaveAs_Click(); } } else { FileSaveAs_Click(); } } # SaveAs sub FileSaveAs_Click { my $ret = Win32::GUI::GetSaveFileName( -title => "Save html File As", -filter => ["Html Document (*.htm, *.html)" => "*.htm;*.html"], -directory => $Directory, ); if ($ret) { $HtmlFile = $ret; $ret = $Control->SaveDocument ($HtmlFile); unless ($ret) { Win32::GUI::MessageBox (0, "ERROR : SaveDocument ", "Save Error"); } } elsif (Win32::GUI::CommDlgExtendedError()) { Win32::GUI::MessageBox (0, "ERROR : ".Win32::GUI::CommDlgExtendedError(), "GetSaveFileName Error"); } } # Print sub FilePrint_Click { $ret = $Control->PrintDocument (1); } # Directory sub FileDirectory_Click { my $ret = Win32::GUI::BrowseForFolder ( -title => "Select default directory", -directory => $Directory, -folderonly => 1, ); $Directory = $ret if ($ret); } # Exit sub FileExit_Click { return Finish(); } ####################################################################### # # Edit Menu # ####################################################################### sub EditUndo_Click { $Control->Undo(); } sub EditRedo_Click { $Control->Redo(); } sub EditCut_Click { $Control->Cut(); } sub EditCopy_Click { $Control->Copy(); } sub EditPaste_Click { $Control->Paste(); } sub EditSelectAll_Click { $Control->SelectAll(); } sub EditDelete_Click { $Control->Delete(); } sub EditFind_Click { $Control->FindText(); } ####################################################################### # # Format Menu # ####################################################################### sub FormatBold_Click { $Control->Bold(); } sub FormatItalic_Click { $Control->Italic(); } sub FormatUnderline_Click { $Control->Underline(); } sub FormatFont_Click { $Control->Font(); } sub FormatJustifyLeft_Click { $Control->JustifyLeft(); } sub FormatJustifyCenter_Click { $Control->JustifyCenter(); } sub FormatJustifyRight_Click { $Control->JustifyRight(); } sub FormatIndent_Click { $Control->Indent(); } sub FormatOutdent_Click { $Control->Outdent(); } ####################################################################### # # Insert Menu # ####################################################################### sub InsertHyperLink_Click { $Control->HyperLink(); } sub InsertImage_Click { $Control->Image(); } sub InsertOrderList { $Control->OrderList(); } sub InsertUnOrderList { $Control->UnOrderList(); } sub InsertUnlink_Click { $Control->Unlink(); } ####################################################################### # # Help Menu # ####################################################################### sub HelpAbout_Click { Win32::GUI::MessageBox (0, "Perl Html Editor 0.1 by Laurent Rocher", "About",MB_ICONINFORMATION); } --- NEW FILE: InfoControl.pl --- # perl -w # # Information about a control. # Create a html file with control information. # Parametre : CLSID Or ProgID # use Cwd; use Win32::GUI; use Win32::GUI::AxWindow; if ($#ARGV != 0) { print $0, " : ControlId\n"; exit(0); } $ControlID = $ARGV[0]; # main Window $Window = new Win32::GUI::Window ( -title => "Win32::GUI::AxWindow test", -left => 100, -top => 100, -width => 400, -height => 400, -name => "Window", ) or die "new Window"; # Create AxWindow $Control = new Win32::GUI::AxWindow ( -parent => $Window, -name => "Control", -pos => [0, 0], -size => [400, 400], -control => $ControlID, ) or die "new Control"; open (F, ">$ControlID.html") or die "open"; # Enum Property info print F '<HTML><BODY><HR><H1>Properties</H1><HR>'; print "Properties\n"; foreach $id ($Control->EnumPropertyID()) { %property = $Control->GetPropertyInfo ($id); foreach $key (keys %property) { print F "<B>$key</B> = ", $property {$key}, "<BR>"; } print F "<P>"; } # Enum Method info print F "<P><HR><H1>Methods</H1><HR>"; print "Methods\n"; foreach $id ($Control->EnumMethodID()) { %method = $Control->GetMethodInfo ($id); foreach $key (keys %method) { print F "<B>$key</B> = ", $method {$key}, "<BR>"; } print F "<P>"; } # Enum Event info print F "<P><HR><H1>Events</H1><HR>"; print "Events\n"; foreach $id ($Control->EnumEventID()) { %event = $Control->GetEventInfo ($id); foreach $key (keys %event) { print F "<B>$key</B> = ", $event {$key}, "<BR>"; } print F "<P>"; } print F "</BODY></HTML>"; close (F); --- NEW FILE: MShtml.pl --- # perl -w # # MSHTML : Load static HTML data # # use Cwd; use Win32::GUI; use Win32::GUI::AxWindow; # main Window $Window = new Win32::GUI::Window ( -title => "Win32::GUI::AxWindow test", -pos => [100, 100], -size => [400, 400], -name => "Window", ) or die "new Window"; # Create AxWindow $Control = new Win32::GUI::AxWindow ( -parent => $Window, -name => "Control", -pos => [0, 0], -size => [400, 400], -control => "MSHTML:<HTML><BODY>This is a line of text</BODY></HTML>", ) or die "new Control"; # Event loop $Window->Show(); Win32::GUI::Dialog(); # Main window event handler sub Window_Terminate { return -1; } sub Window_Resize { if (defined $Window) { ($width, $height) = ($Window->GetClientRect)[2..3]; $Control->Move (0, 0); $Control->Resize ($width, $height); } } --- NEW FILE: Info.bat --- rem Small Batch file for call InfoControl script rem DHTML edit rem perl infocontrol.pl {2D360200-FFF5-11D1-8D03-00A0C959BC0A} rem Webbrowser {8856F961-340A-11D0-A96B-00C04FD705A2} perl infocontrol.pl Explorer.Shell.2 rem FlexGrid rem perl infocontrol.pl {AFC78D00-B917-11CE-AAE4-CE6AC0F06E88} rem MsFlexGrid {6262D3A0-531B-11CF-91F6-C2863C385E30} rem perl infocontrol.pl MSFlexGridLib.MSFlexGrid rem SCGrid rem perl infocontrol.pl prjSCGrid.SCGrid rem Movie control information rem perl infocontrol.pl MOVIEPLAYER.MoviePlayerCtrl.1 --- NEW FILE: Google.pl --- # perl -w # # Hosting WebBrowser # - Create a WebBrowser control and get a Win32::OLe handler. # - Navigate on Google.fr # - When document loaded (DoucmentComplete event), set Win32::GUI::AxWindow in serach edit then submit # If Google Html page change, must change Item index. # use Cwd; use Win32::GUI; use Win32::OLE; use Win32::GUI::AxWindow; # main Window $Window = new Win32::GUI::Window ( -title => "Win32::GUI::AxWindow and Win32::OLE", -pos => [100, 100], -size => [400, 400], -name => "Window", ) or die "new Window"; # Create AxWindow with a webbrowser $Control = new Win32::GUI::AxWindow ( -parent => $Window, -name => "Control", -pos => [0, 100], -size => [400, 300], -control => "Shell.Explorer.2", ) or die "new Control"; # Register Event $Control->RegisterEvent ("DocumentComplete", "DocumentComplete_Event" ); # Get Ole object $OLEControl = $Control->GetOLE(); # Navigate to google $Control->CallMethod("Navigate", 'http://www.google.fr/'); # Event loop $Window->Show(); Win32::GUI::Dialog(); # Event handler sub DocumentComplete_Event { # print $OLEControl->{LocationUrl}, "\n"; return unless $OLEControl->{LocationUrl} eq 'http://www.google.fr/'; print "Search Win32::GUI::AXWindow\n"; my $all = $OLEControl->{Document}->{all}; # List all HTML TAG # for $i (0..$all->length) { # my $item = $all->item($i); # print "$i = ", $item->outerHTML , "\n\n"; # } # Input texte my $inputTexte = $all->item(49); $inputTexte->{value} = "Win32::GUI::AxWindow"; # Submit my $Submit = $all->item(55); $Submit->click; } # Main window event handler sub Window_Terminate { # Release all before destroy window undef $OLEControl; # $Control->Release(); return -1; } sub Window_Resize { if (defined $Window) { ($width, $height) = ($Window->GetClientRect)[2..3]; $Control->Move (0, 0); $Control->Resize ($width, $height); } } |
Update of /cvsroot/perl-win32-gui/Win32-GUI-AxWindow In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv15455 Added Files: AxWindow.html AxWindow.pm AxWindow.xs Changes MANIFEST Makefile.PL README TYPEMAP Log Message: Added to repository --- NEW FILE: AxWindow.pm --- package Win32::GUI::AxWindow; use vars qw($VERSION @ISA @EXPORT @EXPORT_OK); use Win32::GUI; require Exporter; require DynaLoader; require AutoLoader; @ISA = qw(Exporter DynaLoader Win32::GUI::Window); # Items to export into callers namespace by default. Note: do not export # names by default without a very good reason. Use EXPORT_OK instead. # Do not simply export all your public functions/methods/constants. @EXPORT = qw(); $VERSION = '0.07'; bootstrap Win32::GUI::AxWindow $VERSION; # Preloaded methods go here. # Initialise Win32::GUI::AxWindow::_Initialise(); # DeInitialise END { Win32::GUI::AxWindow::_DeInitialise(); } # Autoload methods go after =cut, and are processed by the autosplit program. # # new : Create a new ActiveX Window # sub new { my $class = shift; my %in = @_; ### Control option croak("-parent undefined") unless exists $in{-parent}; croak("-name undefined") unless exists $in{-name}; croak("-control undefined") unless exists $in{-control}; my $parent = $in{-parent}; my $name = $in{-name}; my $clsid = $in{-control}; # print "Parent = $parent->{-name}\n"; # print "Name = $name\n"; # print "Control = $clsid\n"; ### Size my ($x, $y, $w, $h) = (0,0,1,1); $x = $in{-left} if exists $in{-left}; $y = $in{-top} if exists $in{-top}; $w = $in{-width} if exists $in{-width}; $h = $in{-height} if exists $in{-height}; ($x, $y) = ($in{-pos}[0] , $in{-pos}[1]) if exists $in{-pos}; ($w, $h) = ($in{-size}[0],$in{-size}[1]) if exists $in{-size}; # print "(x,y) = ($x,$y)\n(w,h) = ($w,$h)\n"; ### Window Style my $style = WS_CHILD | WS_CLIPCHILDREN; $style = $in{-style} if exists $in{-style}; $style |= $in{-pushstyle} if exists $in{-pushstyle}; $style ^= $in{-popstyle} if exists $in{-popstyle}; $style |= $in{-addstyle} if exists $in{-addstyle}; $style ^= $in{-remstyle} if exists $in{-remstyle}; $style |= WS_VISIBLE unless exists $in{-visible} && $in{-visible} == 0; $style |= WS_TABSTOP unless exists $in{-tabstop} && $in{-tabstop} == 0; $style |= WS_DISABLED if exists $in{-enable} && $in{-enable} == 0; $style |= WS_HSCROLL if exists $in{-hscroll} && $in{-hscroll} == 1; $style |= WS_VSCROLL if exists $in{-vscroll} && $in{-vscroll} == 1; # print "Style = $style\n"; ### Window ExStyle my $exstyle = 0; $exstyle = $in{-exstyle} if exists $in{-exstyle}; $exstyle |= $in{-pushexstyle} if exists $in{-pushexstyle}; $exstyle ^= $in{-popexstyle} if exists $in{-popexstyle}; $exstyle |= $in{-addexstyle} if exists $in{-addexstyle}; $exstyle ^= $in{-remexstyle} if exists $in{-remexstyle}; # print "ExStyle = $exstyle\n"; ### Create Window and ActiveX Object my $self = {}; bless $self, $class; if ( $self->_Create($parent, $clsid, $style, $exstyle, $x, $y, $w, $h) ) { ### Store Data (Win32::GUI glue) $self->{-name} = $in{-name}; $parent->{$name} = $self; return $self; } return undef; } # # CallMethod : Use Invoke with DISPATCH_METHOD # sub CallMethod { my $self = shift; return $self->Invoke (0x01, @_); } # # GetProperty : Use Invoke with DISPATCH_PROPERTYGET # sub GetProperty { my $self = shift; return $self->Invoke (0x02, @_); } # # PutProperty : Use Invoke with DISPATCH_PROPERTYPUT # sub SetProperty { my $self = shift; return $self->Invoke (0x04, @_); } 1; __END__ # Below is the stub of documentation for your module. You better edit it! =head1 NAME Win32::GUI::AxWindow - Perl extension for Hosting ActiveX Control in Win32::GUI =head1 SYNOPSIS use Win32::GUI; use Win32::GUI::AxWindow; # Main Window $Window = new Win32::GUI::Window ( -name => "Window", -title => "Win32::GUI::AxWindow test", -post => [100, 100], -size => [400, 400], ); # Add a WebBrowser AxtiveX $Control = new Win32::GUI::AxWindow ( -parent => $Window, -name => "Control", -control => "Shell.Explorer.2", # -control => "{8856F961-340A-11D0-A96B-00C04FD705A2}", -pos => [0, 0], -size => [400, 400], ); # Register some event $Control->RegisterEvent("StatusTextChange", sub { $self = shift; $eventid = shift; print "Event : ", @_, "\n"; } ); # Call Method $Control->CallMethod("Navigate", 'http://www.perl.com/'); # Event loop $Window->Show(); Win32::GUI::Dialog(); # Main window event handler sub Window_Terminate { return -1; } sub Window_Resize { if (defined $Window) { ($width, $height) = ($Window->GetClientRect)[2..3]; $Control->Move (0, 0); $Control->Resize ($width, $height); } } =head1 DESCRIPTION =head2 AxWindow =item C<new> (...) Create a new ActiveX window. options : -parent => parent window (Required) -name => window name (Required) -size => window size [ width, heigth ] -pos => window pos [ left, top ] -width => window width -height => window height -left => window left -top => window top -control => clisd (see below) (Required). clsid is a string identifier to create the control. Must be formatted in one of the following ways: - A ProgID such as "MSCAL.Calendar.7" - A CLSID such as "{8E27C92B-1264-101C-8A2F-040224009C02}" - A URL such as "http://www.microsoft.com" - A reference to an Active document such as 'file://Documents/MyDoc.doc' - A fragment of HTML such as "MSHTML:<HTML><BODY>This is a line of text</BODY></HTML>" Note "MSHTML:" must precede the HTML fragment so that it is designated as being an MSHTML stream. styles: -visible => 0/1 -tabstop => 0/1 -hscroll => 0/1 -vscroll => 0/1 -style, -addstyle, -pushstyle, -remstyle, -popstyle -exstyle, -exaddstyle, -expushstyle, -exremstyle, -expopstyle Default style is : WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_CLIPCHILDREN =item C<Release> () If have crash when exiting, call this function before all the window are destroy (before Win32::GUI::Dialog(); exit). Generaly, call this function in the Window_Terminate handle. =head2 Property =item C<EnumPropertyID> () Return a list of all the Property ID of the control. =item C<EnumPropertyName> () Return a list of all the Property name of the control. =item C<GetPropertyInfo> (ID_or_Name) Return a hash with information about the Property from ID or Name. Hash entry : -Name => Property Name. -ID => Property ID. -VarType => Property Type (Variant type). -EnumValue => A formated string of enum value ( enum1=value1,enum2=value2,... ). -ReadOnly => Indicate if a property can only be read. -Description => Property Description. -Prototype => Prototype =item C<GetProperty> (ID_or_Name, [index, ...]) Get property value. For indexed property, add index list. =item C<SetProperty> (ID_or_Name, [index, ...], value) Set property value For indexed property, add index list before value. =head2 Method =item C<EnumMethodID> () Return a list of all the Method ID of the control. =item C<EnumMethodName> () Return a list of all the Method name of the control. =item C<GetMethodInfo> (ID_Name) Return a hash with information about the Method from ID or Name. Hash entry : -Name => Method Name. -ID => Method ID. -Description => Method Description. -Prototype => Method Prototype. =item C<CallMethod> (ID_or_Name, ...) Invoke a method of an ActiveX control. =head2 Event =item C<EnumEventID> () Return a list of all the Event ID of the control. =item C<EnumEventName> () Return a list of all the Event Name of the control. =item C<GetEventInfo> (ID_or_Name) Return a hash with information about the Event from ID or Name. Hash entry : -Name => Method Name. -ID => Method ID. -Description => Method Description. -Prototype => Method Prototype. =item C<RegisterEvent> (ID_or_Name, Callback) Associate a Callback for an ActiveX Event. =head2 Win32::OLE =item C<GetOLE> () Return a Win32::OLE object of Hosted ActiveX Control. You MUST add use Win32::OLE in your script. =head1 AUTHOR Laurent Rocher (lr...@cp...) HomePage :http://perso.club-internet.fr/rocherl/Win32GUI.html =head1 SEE ALSO Win32::GUI =cut --- NEW FILE: Makefile.PL --- use ExtUtils::MakeMaker; # See lib/ExtUtils/MakeMaker.pm for details of how to influence # the contents of the Makefile that is written. WriteMakefile( 'NAME' => 'Win32::GUI::AxWindow', 'VERSION_FROM' => 'AxWindow.pm', # finds $VERSION 'XS' => { 'AxWindow.xs' => 'AxWindow.cpp' }, 'LIBS' => ['atl.lib'], # e.g., '-lm' 'INC' => '', # e.g., '-I/usr/include/other' ($] eq '5.00503') ? ( 'DEFINE' => '-DPERL_5005', # e.g., '-DHAVE_SOMETHING' ) : ( 'DEFINE' => '', # e.g., '-DHAVE_SOMETHING' ), ($] ge '5.005') ? ( 'AUTHOR' => 'ROCHER Laurent (ro...@cl...)', 'ABSTRACT' => 'Add ActiveX Control Hosting in Win32::GUI', ) : (), ); sub MY::xs_c { ' .xs.c: $(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) $(XSUBPP) $(XSPROTOARG) $(XSUBPPARGS) $*.xs > $*.c .xs.cpp: $(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) $(XSUBPP) $(XSPROTOARG) $(XSUBPPARGS) $*.xs > $*.cpp '; } --- NEW FILE: MANIFEST --- Makefile.PL Changes AxWindow.pm AxWindow.xs MANIFEST TYPEMAP Samples/WebBrowser.pl Samples/InfoControl.pl Samples/DHtmlEdit.pl Samples/DHtmlEdit.pm Samples/DHtmlEditor.pl Samples/MsFlexGrid.pl Samples/TestOLE.pl --- NEW FILE: AxWindow.xs --- /**********************************************************************/ /* C o n t a i n e r . x s */ /**********************************************************************/ #include <atlbase.h> CComModule _Module; #include <atlcom.h> #include <atlhost.h> #include <atlctl.h> #include <winbase.h> /*====================================================================*/ /* Perl Compatibility */ /*====================================================================*/ #ifdef PERL_5005 [...2660 lines suppressed...] void Release (container) CContainer* container CODE: // printf("Release\n"); container->Clean(); // printf("Release\n"); ################################################################## # # DESTROY # void DESTROY(container) CContainer* container CODE: // printf("DESTROY\n"); delete container; // printf("DESTROY\n"); --- NEW FILE: README --- Win32::GUI::AxWindow 0.07 ========================= Win32::GUI::AxWindow - Perl extension for Hosting ActiveX Control in Win32::GUI INSTALLATION To install this module type the following: perl Makefile.PL make make install DEPENDENCIES This module requires these other modules and libraries: Win32::GUI Active Template Library (ATL) WEB PAGE AND PPM REPOSITORY See: http://perso.club-internet.fr/rocherl/Win32GUI.html COPYRIGHT AND LICENCE Copyright 2003 by Laurent Rocher (lr...@cp...). This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. See <http://www.perl.com/perl/misc/Artistic.html>. --- NEW FILE: Changes --- Revision history for Perl extension AxWindow. 0.07 03/02/2004 - Correct GetOLE() method when using PAR and PerlApp. 0.06 28/09/2003 - Rewrite creation method (Remove AttachControl method). - No more need to call Release Method before exit. - Correct bug in GetPropertyInfo with VARTYPE property. - Correct -heigth option. - Update and add samples. 0.05 15/10/2002 - Add GetOLE method (return a Win32::OLE object of Hosted ActiveX Control). - Add TestOle.pl Sample. 0.04 14/09/2002 - Add indexed property support. - Change code organisation (Invoke method, CProperty child of CMethod). - Add MSFlexGrid Sample. 0.03 30/05/2002 - Add VARTYPE property support. - Add output parameter for event support. - Accept control without event. - Correct DHTMLEdit.pm wrapper class. 0.02 25/03/2002 - Correct ReadOnly value for Properties. - Add =value for Enum string list for Properties. - Test ReadOnly attribut in SetProperty. - SetProperty handle Enum property by value or string constant. - Add a Release method for clean ActiveX reference before window destroy. - Manage VT_USERDEFINED as enum in CallMethod. - Add some documentation (sorry for my english ;-). - Add DHTML Edit sample (basic and a wrapper class). 0.01 22/03/2002 - original version; created by h2xs 1.19 - ActiveX control information (Properties, Metods, Events). - Set/Get property. - Call a Method. - Event Support. - Support of basic variant type. --- NEW FILE: TYPEMAP --- TYPEMAP CContainer* T_CONTAINER HWND T_HANDLE HMENU T_HANDLE HICON T_HANDLE HCURSOR T_HANDLE HBITMAP T_HANDLE HFONT T_HANDLE HGDIOBJ T_HANDLE HIMAGELIST T_HANDLE HDC T_HANDLE HBRUSH T_HANDLE HPEN T_HANDLE HTREEITEM T_IV LONG T_IV LPCTSTR T_PV LPTSTR T_PV DWORD T_IV UINT T_IV BOOL T_IV WPARAM T_IV LPARAM T_IV LRESULT T_IV HINSTANCE T_IV COLORREF T_COLOR LPCSTR T_PV HENHMETAFILE T_IV FLOAT T_FLOAT LPVOID T_PV HACCEL T_IV ################################################################################ INPUT T_HANDLE if(SvROK($arg)) { if(hv_fetch((HV*)SvRV($arg), \"-handle\", 7, 0) != NULL) $var = ($type) SvIV(*(hv_fetch((HV*)SvRV($arg), \"-handle\", 7, 0))); else $var = NULL; } else $var = ($type) SvIV($arg); T_COLOR $var = SvCOLORREF($arg); T_CONTAINER $var = ($type) SvIV(*(hv_fetch((HV*)SvRV($arg), \"-CContainer\", 11, 0))); ################################################################################ OUTPUT T_HANDLE sv_setiv($arg, (IV) $var); T_COLOR sv_setiv($arg, (IV) $var); --- NEW FILE: AxWindow.html --- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>Win32::GUI::AxWindow - Perl extension for Hosting ActiveX Control in Win32::GUI</title> <link rev="made" href="mailto:" /> </head> <body style="background-color: white"> <p><a name="__index__"></a></p> <!-- INDEX BEGIN --> <ul> <li><a href="#name">NAME</a></li> <li><a href="#synopsis">SYNOPSIS</a></li> <li><a href="#description">DESCRIPTION</a></li> <ul> <li><a href="#axwindow">AxWindow</a></li> <li><a href="#property">Property</a></li> <li><a href="#method">Method</a></li> <li><a href="#event">Event</a></li> <li><a href="#win32::ole">Win32::OLE</a></li> </ul> <li><a href="#author">AUTHOR</a></li> <li><a href="#see_also">SEE ALSO</a></li> </ul> <!-- INDEX END --> <hr /> <p> </p> <h1><a name="name">NAME</a></h1> <p>Win32::GUI::AxWindow - Perl extension for Hosting ActiveX Control in Win32::GUI</p> <p> </p> <hr /> <h1><a name="synopsis">SYNOPSIS</a></h1> <pre> use Win32::GUI; use Win32::GUI::AxWindow;</pre> <pre> # Main Window $Window = new Win32::GUI::Window ( -name => "Window", -title => "Win32::GUI::AxWindow test", -post => [100, 100], -size => [400, 400], );</pre> <pre> # Add a WebBrowser AxtiveX $Control = new Win32::GUI::AxWindow ( -parent => $Window, -name => "Control", -control => "Shell.Explorer.2", # -control => "{8856F961-340A-11D0-A96B-00C04FD705A2}", -pos => [0, 0], -size => [400, 400], );</pre> <pre> # Register some event $Control->RegisterEvent("StatusTextChange", sub { $self = shift; $eventid = shift; print "Event : ", @_, "\n"; } );</pre> <pre> # Call Method $Control->CallMethod("Navigate", '<a href="http://www.perl.com/">http://www.perl.com/</a>');</pre> <pre> # Event loop $Window->Show(); Win32::GUI::Dialog();</pre> <pre> # Main window event handler</pre> <pre> sub Window_Terminate {</pre> <pre> return -1; }</pre> <pre> sub Window_Resize {</pre> <pre> if (defined $Window) { ($width, $height) = ($Window->GetClientRect)[2..3]; $Control->Move (0, 0); $Control->Resize ($width, $height); } }</pre> <p> </p> <hr /> <h1><a name="description">DESCRIPTION</a></h1> <p> </p> <h2><a name="axwindow">AxWindow</a></h2> <dl> <dt><strong><a name="item_new"><code>new</code> (...)</a></strong><br /> </dt> <dd> <pre> Create a new ActiveX window.</pre> </dd> <dd> <pre> options :</pre> </dd> <dd> <pre> -parent => parent window (Required) -name => window name (Required) -size => window size [ width, heigth ] -pos => window pos [ left, top ] -width => window width -height => window height -left => window left -top => window top -control => clisd (see below) (Required).</pre> </dd> <dd> <pre> clsid is a string identifier to create the control. Must be formatted in one of the following ways:</pre> </dd> <dd> <pre> - A ProgID such as "MSCAL.Calendar.7" - A CLSID such as "{8E27C92B-1264-101C-8A2F-040224009C02}" - A URL such as "<a href="http://www.microsoft.com"">http://www.microsoft.com"</a>; - A reference to an Active document such as '<a href="file://Documents/MyDoc.doc">file://Documents/MyDoc.doc</a>' - A fragment of HTML such as "MSHTML:<HTML><BODY>This is a line of text</BODY></HTML>" Note "MSHTML:" must precede the HTML fragment so that it is designated as being an MSHTML stream.</pre> </dd> <dd> <pre> styles:</pre> </dd> <dd> <pre> -visible => 0/1 -tabstop => 0/1 -hscroll => 0/1 -vscroll => 0/1</pre> </dd> <dd> <pre> -style, -addstyle, -pushstyle, -remstyle, -popstyle -exstyle, -exaddstyle, -expushstyle, -exremstyle, -expopstyle</pre> </dd> <dd> <pre> Default style is : WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_CLIPCHILDREN</pre> </dd> <dt><strong><a name="item_release"><code>Release</code> ()</a></strong><br /> </dt> <dd> <pre> If have crash when exiting, call this function before all the window are destroy (before Win32::GUI::Dialog(); exit). Generaly, call this function in the Window_Terminate handle.</pre> </dd> </dl> <p> </p> <h2><a name="property">Property</a></h2> <dl> <dt><strong><a name="item_enumpropertyid"><code>EnumPropertyID</code> ()</a></strong><br /> </dt> <dd> <pre> Return a list of all the Property ID of the control.</pre> </dd> <dt><strong><a name="item_enumpropertyname"><code>EnumPropertyName</code> ()</a></strong><br /> </dt> <dd> <pre> Return a list of all the Property name of the control.</pre> </dd> <dt><strong><a name="item_getpropertyinfo"><code>GetPropertyInfo</code> (ID_or_Name)</a></strong><br /> </dt> <dd> <pre> Return a hash with information about the Property from ID or Name.</pre> </dd> <dd> <pre> Hash entry : -Name => Property Name. -ID => Property ID. -VarType => Property Type (Variant type). -EnumValue => A formated string of enum value ( enum1=value1,enum2=value2,... ). -ReadOnly => Indicate if a property can only be read. -Description => Property Description. -Prototype => Prototype</pre> </dd> <dt><strong><a name="item_getproperty"><code>GetProperty</code> (ID_or_Name, [index, ...])</a></strong><br /> </dt> <dd> <pre> Get property value. For indexed property, add index list.</pre> </dd> <dt><strong><a name="item_setproperty"><code>SetProperty</code> (ID_or_Name, [index, ...], value)</a></strong><br /> </dt> <dd> <pre> Set property value For indexed property, add index list before value.</pre> </dd> </dl> <p> </p> <h2><a name="method">Method</a></h2> <dl> <dt><strong><a name="item_enummethodid"><code>EnumMethodID</code> ()</a></strong><br /> </dt> <dd> <pre> Return a list of all the Method ID of the control.</pre> </dd> <dt><strong><a name="item_enummethodname"><code>EnumMethodName</code> ()</a></strong><br /> </dt> <dd> <pre> Return a list of all the Method name of the control.</pre> </dd> <dt><strong><a name="item_getmethodinfo"><code>GetMethodInfo</code> (ID_Name)</a></strong><br /> </dt> <dd> <pre> Return a hash with information about the Method from ID or Name.</pre> </dd> <dd> <pre> Hash entry : -Name => Method Name. -ID => Method ID. -Description => Method Description. -Prototype => Method Prototype.</pre> </dd> <dt><strong><a name="item_callmethod"><code>CallMethod</code> (ID_or_Name, ...)</a></strong><br /> </dt> <dd> <pre> Invoke a method of an ActiveX control.</pre> </dd> </dl> <p> </p> <h2><a name="event">Event</a></h2> <dl> <dt><strong><a name="item_enumeventid"><code>EnumEventID</code> ()</a></strong><br /> </dt> <dd> <pre> Return a list of all the Event ID of the control.</pre> </dd> <dt><strong><a name="item_enumeventname"><code>EnumEventName</code> ()</a></strong><br /> </dt> <dd> <pre> Return a list of all the Event Name of the control.</pre> </dd> <dt><strong><a name="item_geteventinfo"><code>GetEventInfo</code> (ID_or_Name)</a></strong><br /> </dt> <dd> <pre> Return a hash with information about the Event from ID or Name.</pre> </dd> <dd> <pre> Hash entry : -Name => Method Name. -ID => Method ID. -Description => Method Description. -Prototype => Method Prototype.</pre> </dd> <dt><strong><a name="item_registerevent"><code>RegisterEvent</code> (ID_or_Name, Callback)</a></strong><br /> </dt> <dd> <pre> Associate a Callback for an ActiveX Event.</pre> </dd> </dl> <p> </p> <h2><a name="win32::ole">Win32::OLE</a></h2> <dl> <dt><strong><a name="item_getole"><code>GetOLE</code> ()</a></strong><br /> </dt> <dd> <pre> Return a Win32::OLE object of Hosted ActiveX Control.</pre> </dd> <dd> <pre> You MUST add use Win32::OLE in your script.</pre> </dd> </dl> <p> </p> <hr /> <h1><a name="author">AUTHOR</a></h1> <pre> Laurent Rocher (lr...@cp...) HomePage :<a href="http://perso.club-internet.fr/rocherl/Win32GUI.html">http://perso.club-internet.fr/rocherl/Win32GUI.html</a></pre> <p> </p> <hr /> <h1><a name="see_also">SEE ALSO</a></h1> <pre> Win32::GUI</pre> </body> </html> |
From: jw <jw...@us...> - 2005-11-01 12:32:37
|
Update of /cvsroot/perl-win32-gui/Win32-GUI-AxWindow/Samples/UnComplete In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv15455/Samples/UnComplete Added Files: MsFlexGrid.pm Log Message: Added to repository --- NEW FILE: MsFlexGrid.pm --- # # Win32::GUI::MsFlexGrid: wrapper package for MsFlexGrid ActiveX # by Laurent Rocher. # # use strict; use vars qw(@ISA $VERSION); use Carp 'croak','carp'; use Win32::GUI::AxWindow; @ISA = qw(Win32::GUI::AxWindow Exporter); $VERSION = "1.0"; BEGIN { use Exporter(); use vars qw(@EXPORT); [...1680 lines suppressed...] # VARIANT_BOOL RightToLeft() / void RightToLeft([in] VARIANT_BOOL rhs) # Determines text display direction and control visual appearance on a bidirectional system. sub RightToLeft { croak("Usage: VARIANT_BOOL RightToLeft() / void RightToLeft([in] VARIANT_BOOL rhs)") if (@_ != 1 && @_ != 2); my ($self, $value) = @_; if (defined $value) { return $self->SUPER::SetProperty (0xfffffd9d, $value); } else { return $self->SUPER::GetProperty (0xfffffd9d); } } 1; __END__ |
From: jw <jw...@us...> - 2005-11-01 12:31:30
|
Update of /cvsroot/perl-win32-gui/Win32-GUI-AxWindow/Samples/UnComplete In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv15339/UnComplete Log Message: Directory /cvsroot/perl-win32-gui/Win32-GUI-AxWindow/Samples/UnComplete added to the repository |