Removed resource.h.
[wine/wine64.git] / programs / view / view.c
blob7241bbed32f531e062f78fbeab6045ac0fa4c6fe
1 #include <windows.h>
3 /*
4 #include <windowsx.h>
5 Wine doesn't have windowsx.h, so we use this
6 */
7 #define GET_WM_COMMAND_ID(wp,lp) LOWORD(wp)
9 /* Wine seems to need this */
10 #include <commdlg.h>
12 #include "globals.h"
13 #include <stdio.h>
15 BOOL FileIsPlaceable( LPCSTR szFileName );
16 HMETAFILE GetPlaceableMetaFile( HWND hwnd, LPCSTR szFileName );
18 #define FN_LENGTH 80
20 HMETAFILE hmf;
21 int deltax = 0, deltay = 0;
22 int width = 0, height = 0;
23 BOOL isAldus;
25 BOOL FileOpen(HWND hWnd, char *fn)
27 OPENFILENAME ofn = { sizeof(OPENFILENAME),
28 0, 0, "Metafiles\0*.wmf\0", NULL, 0, 0, NULL,
29 FN_LENGTH, NULL, 0, NULL, NULL, OFN_CREATEPROMPT |
30 OFN_SHOWHELP, 0, 0, NULL, 0, NULL };
31 ofn.hwndOwner = hWnd;
32 ofn.lpstrFile = fn;
33 return GetOpenFileName(&ofn);
37 LRESULT CALLBACK WndProc(HWND hwnd,
38 UINT uMessage,
39 WPARAM wparam,
40 LPARAM lparam)
42 switch (uMessage)
44 case WM_PAINT:
46 PAINTSTRUCT ps;
47 BeginPaint(hwnd, &ps);
48 SetMapMode(ps.hdc, MM_ANISOTROPIC);
49 SetViewportExtEx(ps.hdc, width, height, NULL);
50 SetViewportOrgEx(ps.hdc, deltax, deltay, NULL);
51 if(hmf) PlayMetaFile(ps.hdc, hmf);
52 EndPaint(hwnd, &ps);
55 break;
57 case WM_COMMAND: /* message: command from application menu */
58 switch (GET_WM_COMMAND_ID(wparam,lparam))
60 case IDM_HELLO:
61 MessageBox( hwnd , "Hello there world!", "Hello", MB_OK);
62 break;
64 case IDM_OPEN:
66 char filename[FN_LENGTH];
67 if (FileOpen(hwnd, filename)) {
68 isAldus = FileIsPlaceable(filename);
69 if (isAldus) {
70 hmf = GetPlaceableMetaFile(hwnd, filename);
71 } else {
72 RECT r;
73 hmf = GetMetaFile(filename);
74 GetClientRect(hwnd, &r);
75 width = r.right - r.left;
76 height = r.bottom - r.top;
78 InvalidateRect( hwnd, NULL, TRUE );
81 break;
83 case IDM_SET_EXT_TO_WIN:
85 RECT r;
86 GetClientRect(hwnd, &r);
87 width = r.right - r.left;
88 height = r.bottom - r.top;
89 InvalidateRect( hwnd, NULL, TRUE );
91 break;
94 case IDM_LEFT:
95 deltax += 100;
96 InvalidateRect( hwnd, NULL, TRUE );
97 break;
98 case IDM_RIGHT:
99 deltax -= 100;
100 InvalidateRect( hwnd, NULL, TRUE );
101 break;
102 case IDM_UP:
103 deltay += 100;
104 InvalidateRect( hwnd, NULL, TRUE );
105 break;
106 case IDM_DOWN:
107 deltay -= 100;
108 InvalidateRect( hwnd, NULL, TRUE );
109 break;
111 case IDM_EXIT:
112 DestroyWindow(hwnd);
113 break;
115 default:
116 return DefWindowProc(hwnd, uMessage, wparam, lparam);
118 break;
120 case WM_DESTROY: /* message: window being destroyed */
121 PostQuitMessage(0);
122 break;
124 default: /* Passes it on if unproccessed */
125 return DefWindowProc(hwnd, uMessage, wparam, lparam);
127 return 0;
130 BOOL FileIsPlaceable( LPCSTR szFileName )
132 HFILE hInFile;
133 OFSTRUCT inof;
134 APMFILEHEADER apmh;
136 if( (hInFile = OpenFile( szFileName, &inof, OF_READ ) ) == HFILE_ERROR )
137 return FALSE;
139 if( _lread( hInFile, &apmh, sizeof(APMFILEHEADER) )
140 != sizeof(APMFILEHEADER) )
142 _lclose( hInFile );
143 return FALSE;
145 _lclose( hInFile );
147 /* Is it placeable? */
148 return (apmh.key == APMHEADER_KEY);
151 HMETAFILE GetPlaceableMetaFile( HWND hwnd, LPCSTR szFileName )
153 LPSTR lpData;
154 METAHEADER mfHeader;
155 APMFILEHEADER APMHeader;
156 HFILE fh;
157 HMETAFILE hmf;
158 OFSTRUCT inof;
159 WORD checksum, *p;
160 int i;
162 if( (fh = OpenFile( szFileName, &inof, OF_READ ) ) == HFILE_ERROR ) return 0;
163 _llseek(fh, 0, 0);
164 if (!_lread(fh, (LPSTR)&APMHeader, sizeof(APMFILEHEADER))) return 0;
165 _llseek(fh, sizeof(APMFILEHEADER), 0);
166 checksum = 0;
167 p = (WORD *) &APMHeader;
169 for(i=0; i<10; i++)
170 checksum ^= *p++;
171 if (checksum != APMHeader.checksum) {
172 char msg[128];
173 sprintf(msg, "Computed checksum %04x != stored checksum %04x\n",
174 checksum, APMHeader.checksum);
175 MessageBox(hwnd, msg, "Checksum failed", MB_OK);
176 return 0;
179 if (!_lread(fh, (LPSTR)&mfHeader, sizeof(METAHEADER))) return 0;
181 if (!(lpData = (LPSTR) GlobalAlloc(GPTR, (mfHeader.mtSize * 2L)))) return 0;
183 _llseek(fh, sizeof(APMFILEHEADER), 0);
184 if (!_lread(fh, lpData, (UINT)(mfHeader.mtSize * 2L)))
186 GlobalFree(lpData);
187 _lclose(fh);
188 return 0;
190 _lclose(fh);
192 if (!(hmf = SetMetaFileBitsEx(mfHeader.mtSize*2, lpData)))
193 return 0;
196 width = APMHeader.bbox.Right - APMHeader.bbox.Left;
197 height = APMHeader.bbox.Bottom - APMHeader.bbox.Top;
199 /* printf("Ok! width %d height %d inch %d\n", width, height, APMHeader.inch); */
200 width = width*96/APMHeader.inch;
201 height = height*96/APMHeader.inch;
203 deltax = 0;
204 deltay = 0 ;
205 return hmf;