]>
Commit | Line | Data |
---|---|---|
1 | ||
2 | README.MSW hedu@cul-ipn.uni-kiel.de 5/94 | |
3 | ||
4 | The XPM library for MS-Windows | |
5 | ||
6 | Motivated by the wxWindows library, which is a (freely available) toolkit | |
7 | for developing multi-platform, graphical applications from the same body | |
8 | of C++ code, I wanted to have XPM pixmaps for MS-windows. Instead of rewriting | |
9 | a XPM-parser I managed to port the XPM-library-code to MS-windows. | |
10 | Thanks to Anaud Le Hors this became a part of the official XPM-library. | |
11 | ||
12 | Until now it's only used together with wxWindows. And even there it's more | |
13 | a kind of beta. But it should be possible to run it as a simple libxpm.a | |
14 | without wxWindows. | |
15 | ||
16 | The key is a transformation of some X types plus some basic X functions. | |
17 | There is not yet a special MSW-API, so you should know the X types used. | |
18 | ||
19 | The following is done in simx.h: | |
20 | ||
21 | typedef HDC Display; | |
22 | typedef COLORREF Pixel; | |
23 | ||
24 | typedef struct { | |
25 | Pixel pixel; | |
26 | BYTE red, green, blue; | |
27 | } XColor; | |
28 | ||
29 | typedef struct { | |
30 | HBITMAP bitmap; | |
31 | unsigned int width; | |
32 | unsigned int height; | |
33 | unsigned int depth; | |
34 | } XImage; | |
35 | ||
36 | With these defines and the according functions from simx.c you can call | |
37 | XPM-functions the way it's done under X windows. It can look like this: | |
38 | ||
39 | ErrorStatus=XpmCreateImageFromData(&dc, data, | |
40 | &ximage,(XImage **)NULL, &xpmAttr); | |
41 | ms_bitmap = ximage->bitmap; | |
42 | // releases the malloc,but do not destroy the bitmap | |
43 | XImageFree(ximage); | |
44 | ||
45 | Supported functions are the Xpm*Image* but not the Xpm*Pixmap*. | |
46 | ||
47 | DRAWBACKS: | |
48 | The main drawback is the missing support for Colormaps! There was nothing for | |
49 | it in wxWindows, so I did not know how to deal with Colormaps. | |
50 | ||
51 | The size of the pixmaps is bounded by malloc() (width*height*2 < 64K). | |
52 | ||
53 | Close colors do not look that close. But that seems to be the window system. | |
54 | ||
55 | Neither a special API for MSW nor a special MSW documentation other than this. | |
56 | (I can only point you to wxxpm as an example , see below.) | |
57 | ||
58 | INSTALLATION: | |
59 | There is not yet a makefile with it. Simply take all the *.c files | |
60 | into your project except the files related to Pixmap operations: *P*.c. | |
61 | !!!You MUST set FOR_MSW on the preprocessor options!!! | |
62 | (You might uncomment NEED_STRCASECMP in xpm.h if it's in your lib) | |
63 | This should compile into libxpm.a. Good luck... | |
64 | ||
65 | FTP: | |
66 | wxWindows is currently available from the Artificial Intelligence | |
67 | Applications Institute (University of Edinburgh) by anonymous FTP. | |
68 | skye.aiai.ed.ac.uk pub/wxwin/ | |
69 | or read http://burray.aiai.ed.ac.uk/aiai/aiai.html | |
70 | ||
71 | wxxpm, XPM support for wxWindows, the latest version is available at | |
72 | yoda.cul-ipn.uni-kiel.de pub/wxxpm/ | |
73 | and maybe in the contrib or tools of wxWindows | |
74 | ||
75 | Please contact me if you have suggestions, comments or problems! | |
76 | ||
77 | ================================================================ | |
78 | Some fixes and comments by Jan Wielemaker (jan@swi.psy.uva.nl), | |
79 | Oct 24, 1996: | |
80 | ||
81 | * Please try not to disturb me on this, XPM is not my | |
82 | piece of cake. | |
83 | ||
84 | * Hermann Dunkel has appearently moved in virtual space. | |
85 | ||
86 | Changes: | |
87 | ||
88 | * I've used the xpm package under NT 4.0 and MSVC++ 4.2. | |
89 | ||
90 | * I've made a big performance improvement in | |
91 | ParseAndPutPixels(), fixed creation of the mask in | |
92 | SetColor() in create.c. I looked into XCreateImage() | |
93 | in simx.c, but commented out my improvement for reasons | |
94 | you'll find there. If you know what is going on, statement | |
95 | (1) does not apply to you. | |
96 | ||
97 | Comments on installation: | |
98 | ||
99 | * Donot include the to/from pixmap files into the project. | |
100 | These are the ones containing a capital P somewhere in their | |
101 | name. You can also first include all, and then remove all | |
102 | the files you get errors on :-) | |
103 | ||
104 | * The DC that is requested should be a valid memory DC, thus | |
105 | CreateCompatibleDC(NULL) provides a good generic one, but | |
106 | GetDC(NULL) doesn't! This costed me some time. | |
107 | ||
108 | * The real difficulty is using the mask, mostly due to the | |
109 | bad documentation. If 95 or NT is your target, use: | |
110 | ||
111 | MaskBlt(context.hdc, // Destination DC | |
112 | x, y, w, h, // Destination area | |
113 | mhdc, // Memory DC with the image selected | |
114 | sx, sy, // Source X,Y | |
115 | msk, // HBITMAP of the mask | |
116 | sx, sy, // Mask X,Y | |
117 | MAKEROP4(SRCPAINT, SRCCOPY)); // The magic op code. | |
118 | ================================================================ | |
119 | ||
120 | ||
121 | -- | |
122 | ////|\\\\ \\\\\\ Hermann Dunkel | |
123 | O O ////// IPN Uni Kiel, Germany | |
124 | | \\\\\\ Tel: +49 431 / 880 3144 | |
125 | \___/ ////// E-mail: hedu@cul-ipn.uni-kiel.de | |
126 | \_/ \\\\\\ X.400 : c=de;a=d400;p=uni-kiel;ou=nw-didaktik;s=dunkel | |
127 |