ReactOS 0.4.16-dev-197-g92996da
print.c
Go to the documentation of this file.
1/*
2 * Wordpad implementation - Printing and print preview functions
3 *
4 * Copyright 2007-2008 by Alexander N. Sørnes <alex@thehandofagony.com>
5 *
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
10 *
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
15 *
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
19 */
20
21#include <stdarg.h>
22#include <windef.h>
23#include <winbase.h>
24#include <winreg.h>
25#include <wingdi.h>
26#include <winuser.h>
27#include <richedit.h>
28#include <commctrl.h>
29#include <commdlg.h>
30
31#include "wordpad.h"
32
33typedef struct _previewinfo
34{
35 int page;
47 float zoomratio;
51
54
57
58extern const WCHAR wszPreviewWndClass[];
59
60static const WCHAR var_pagemargin[] = {'P','a','g','e','M','a','r','g','i','n',0};
61static const WCHAR var_previewpages[] = {'P','r','e','v','i','e','w','P','a','g','e','s',0};
62
64{
65 static WCHAR wszPrintFilter[MAX_STRING_LEN*2+6+4+1];
66 const WCHAR files_prn[] = {'*','.','P','R','N',0};
67 const WCHAR files_all[] = {'*','.','*','\0'};
68 LPWSTR p;
70
71 p = wszPrintFilter;
73 p += lstrlenW(p) + 1;
74 lstrcpyW(p, files_prn);
75 p += lstrlenW(p) + 1;
77 p += lstrlenW(p) + 1;
78 lstrcpyW(p, files_all);
79 p += lstrlenW(p) + 1;
80 *p = 0;
81
82 return wszPrintFilter;
83}
84
86{
88}
89
91{
92 DWORD size = sizeof(RECT);
93
95 &size) != ERROR_SUCCESS || size != sizeof(RECT))
96 SetRect(&margins, 1757, 1417, 1757, 1417);
97}
98
100{
102 (LPBYTE)&preview.pages_shown, sizeof(DWORD));
103}
104
106{
107 DWORD size = sizeof(DWORD);
108 if(!hKey ||
111 size != sizeof(DWORD))
112 {
114 } else {
116 else if (preview.pages_shown > 2) preview.pages_shown = 2;
117 }
118}
119
120
121static void AddTextButton(HWND hRebarWnd, UINT string, UINT command, UINT id)
122{
126 HWND hButton;
127
129 hButton = CreateWindowW(WC_BUTTONW, text,
130 WS_VISIBLE | WS_CHILD, 5, 5, 100, 15,
131 hRebarWnd, ULongToHandle(command), hInstance, NULL);
132
136 rb.hwndChild = hButton;
137 rb.cyChild = rb.cyMinChild = 22;
138 rb.cx = rb.cxMinChild = 90;
139 rb.cxIdeal = 100;
140 rb.wID = id;
141
142 SendMessageW(hRebarWnd, RB_INSERTBANDW, -1, (LPARAM)&rb);
143}
144
145static HDC make_dc(void)
146{
147 if(devNames && devMode)
148 {
151 HDC ret;
152
153 ret = CreateDCW((LPWSTR)dn + dn->wDriverOffset,
154 (LPWSTR)dn + dn->wDeviceOffset, 0, dm);
155
156 GlobalUnlock(dn);
157 GlobalUnlock(dm);
158
159 return ret;
160 } else
161 {
162 return 0;
163 }
164}
165
166static LONG twips_to_centmm(int twips)
167{
168 return MulDiv(twips, CENTMM_PER_INCH, TWIPS_PER_INCH);
169}
170
171static LONG centmm_to_twips(int mm)
172{
174}
175
176static LONG twips_to_pixels(int twips, int dpi)
177{
178 return MulDiv(twips, dpi, TWIPS_PER_INCH);
179}
180
182{
183 return MulDiv(units, TWIPS_PER_INCH, dpi);
184}
185
186
188{
189 RECT rc;
190 int width, height;
191
192 if(hdc)
193 {
194 int dpiY = GetDeviceCaps(hdc, LOGPIXELSY);
195 int dpiX = GetDeviceCaps(hdc, LOGPIXELSX);
198 } else
199 {
200 width = centmm_to_twips(18500);
201 height = centmm_to_twips(27000);
202 }
203
205
206 return rc;
207}
208
210{
212
214 {
215 int width = 0;
217 HDC hdc = make_dc();
218 RECT rc = get_print_rect(hdc);
219
220 width = rc.right - rc.left;
221 if(!hdc)
222 {
223 HDC hMaindc = GetDC(hMainWnd);
224 hdc = CreateCompatibleDC(hMaindc);
225 ReleaseDC(hMainWnd, hMaindc);
226 }
228 DeleteDC(hdc);
229 if (result)
230 return;
231 /* otherwise EM_SETTARGETDEVICE failed, so fall back on wrapping
232 * to window using the NULL DC. */
233 }
234
235 if (wordWrap != ID_WORDWRAP_NONE) {
237 } else {
239 }
240
241}
242
244{
246 static WCHAR file[MAX_PATH] = {'O','U','T','P','U','T','.','P','R','N',0};
247 static const WCHAR defExt[] = {'P','R','N',0};
248 static LPWSTR file_filter;
249
250 if(!file_filter)
251 file_filter = get_print_file_filter(hMainWnd);
252
253 ZeroMemory(&ofn, sizeof(ofn));
254
255 ofn.lStructSize = sizeof(ofn);
258 ofn.lpstrFilter = file_filter;
261 ofn.lpstrDefExt = defExt;
262
264 return file;
265 else
266 return FALSE;
267}
268
270{
271 int i;
272
273 fr->chrg.cpMin = 0;
274
275 for(i = 1; i < page; i++)
276 {
277 int bottom = fr->rc.bottom;
279 fr->rc.bottom = bottom;
280 }
281}
282
284{
286}
287
288void redraw_ruler(HWND hRulerWnd)
289{
290 RECT rc;
291
292 GetClientRect(hRulerWnd, &rc);
293 InvalidateRect(hRulerWnd, &rc, TRUE);
294}
295
296static void update_ruler(HWND hRulerWnd)
297{
298 SendMessageW(hRulerWnd, WM_USER, 0, 0);
299 redraw_ruler(hRulerWnd);
300}
301
302static void add_ruler_units(HDC hdcRuler, RECT* drawRect, BOOL NewMetrics, LONG EditLeftmost)
303{
304 static HDC hdc;
305
306 if(NewMetrics)
307 {
308 static HBITMAP hBitmap;
309 int i, x, y, RulerTextEnd;
310 int CmPixels;
311 int QuarterCmPixels;
312 HFONT hFont;
313 WCHAR FontName[] = {'M','S',' ','S','a','n','s',' ','S','e','r','i','f',0};
314
315 if(hdc)
316 {
317 DeleteDC(hdc);
319 }
320
322
324 QuarterCmPixels = (int)((float)CmPixels / 4.0);
325
326 hBitmap = CreateCompatibleBitmap(hdc, drawRect->right, drawRect->bottom);
329
330 hFont = CreateFontW(10, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, FontName);
331
335 y = (int)(((float)drawRect->bottom - (float)drawRect->top) / 2.0) + 1;
336 RulerTextEnd = drawRect->right - EditLeftmost + 1;
337 for(i = 1, x = EditLeftmost; x < (drawRect->right - EditLeftmost + 1); i ++)
338 {
339 WCHAR str[3];
340 WCHAR format[] = {'%','d',0};
341 int x2 = x;
342
343 x2 += QuarterCmPixels;
344 if(x2 > RulerTextEnd)
345 break;
346
347 MoveToEx(hdc, x2, y, NULL);
348 LineTo(hdc, x2, y+2);
349
350 x2 += QuarterCmPixels;
351 if(x2 > RulerTextEnd)
352 break;
353
354 MoveToEx(hdc, x2, y - 3, NULL);
355 LineTo(hdc, x2, y + 3);
356
357 x2 += QuarterCmPixels;
358 if(x2 > RulerTextEnd)
359 break;
360
361 MoveToEx(hdc, x2, y, NULL);
362 LineTo(hdc, x2, y+2);
363
364 x += CmPixels;
365 if(x > RulerTextEnd)
366 break;
367
369 TextOutW(hdc, x, 5, str, lstrlenW(str));
370 }
372 }
373
374 BitBlt(hdcRuler, 0, 0, drawRect->right, drawRect->bottom, hdc, 0, 0, SRCAND);
375}
376
377static void paint_ruler(HWND hWnd, LONG EditLeftmost, BOOL NewMetrics)
378{
379 PAINTSTRUCT ps;
380 HDC hdc = BeginPaint(hWnd, &ps);
381 HDC hdcPrint = make_dc();
382 RECT printRect = get_print_rect(hdcPrint);
383 RECT drawRect;
384
385 GetClientRect(hWnd, &drawRect);
387
388 InflateRect(&drawRect, 0, -3);
389 drawRect.left = EditLeftmost;
392
393 drawRect.top--;
394 drawRect.bottom++;
395 DrawEdge(hdc, &drawRect, EDGE_SUNKEN, BF_RECT);
396
397 drawRect.left = drawRect.right - 1;
399 DrawEdge(hdc, &drawRect, EDGE_ETCHED, BF_RECT);
400
401 drawRect.left = 0;
402 drawRect.top = 0;
403 add_ruler_units(hdc, &drawRect, NewMetrics, EditLeftmost);
404
406 DeleteDC(hdcPrint);
407 EndPaint(hWnd, &ps);
408}
409
411{
412 static WNDPROC pPrevRulerProc;
413 static LONG EditLeftmost;
414 static BOOL NewMetrics;
415
416 switch(msg)
417 {
418 case WM_USER:
419 if(wParam)
420 {
421 EditLeftmost = ((POINTL*)wParam)->x;
422 pPrevRulerProc = (WNDPROC)lParam;
423 }
424 NewMetrics = TRUE;
425 break;
426
427 case WM_PAINT:
428 paint_ruler(hWnd, EditLeftmost, NewMetrics);
429 break;
430
431 default:
432 return CallWindowProcW(pPrevRulerProc, hWnd, msg, wParam, lParam);
433 }
434
435 return 0;
436}
437
439{
440 FORMATRANGE fr;
441 DOCINFOW di;
443 int printedPages = 0;
444
445 fr.hdc = pd->hDC;
446 fr.hdcTarget = pd->hDC;
447
448 fr.rc = get_print_rect(fr.hdc);
449 SetRect(&fr.rcPage, 0, 0, fr.rc.right + margins.right, fr.rc.bottom + margins.bottom);
450
451 ZeroMemory(&di, sizeof(di));
452 di.cbSize = sizeof(di);
454
455 if(pd->Flags & PD_PRINTTOFILE)
456 {
458 if(!di.lpszOutput)
459 return;
460 }
461
462 if(pd->Flags & PD_SELECTION)
463 {
465 } else
466 {
468 gt.flags = GTL_DEFAULT;
469 gt.codepage = 1200;
470 fr.chrg.cpMin = 0;
472
473 if(pd->Flags & PD_PAGENUMS)
475 }
476
477 StartDocW(fr.hdc, &di);
478 do
479 {
480 if(StartPage(fr.hdc) <= 0)
481 break;
482
484
485 if(EndPage(fr.hdc) <= 0)
486 break;
487
488 printedPages++;
489 if((pd->Flags & PD_PAGENUMS) && (printedPages > (pd->nToPage - pd->nFromPage)))
490 break;
491 }
492 while(fr.chrg.cpMin && fr.chrg.cpMin < fr.chrg.cpMax);
493
494 EndDoc(fr.hdc);
496}
497
499{
500 PAGESETUPDLGW ps;
501
502 ZeroMemory(&ps, sizeof(ps));
503 ps.lStructSize = sizeof(ps);
504 ps.hwndOwner = hMainWnd;
508 ps.hDevMode = devMode;
509 ps.hDevNames = devNames;
510
511 if(PageSetupDlgW(&ps))
512 {
515 devMode = ps.hDevMode;
516 devNames = ps.hDevNames;
518 }
519}
520
522{
523 PRINTDLGW pd;
524 ZeroMemory(&pd, sizeof(pd));
525
526 ZeroMemory(&pd, sizeof(pd));
527 pd.lStructSize = sizeof(pd);
529 pd.hDevMode = devMode;
530
531 PrintDlgW(&pd);
532
533 devMode = pd.hDevMode;
534 devNames = pd.hDevNames;
535}
536
538{
539 PRINTDLGW pd;
540
541 ZeroMemory(&pd, sizeof(pd));
542 pd.hwndOwner = hMainWnd;
543 pd.hDC = make_dc();
544
545 print(&pd, wszFileName);
546 DeleteDC(pd.hDC);
547}
548
550{
551 PRINTDLGW pd;
553 int from = 0;
554 int to = 0;
555
556 ZeroMemory(&pd, sizeof(pd));
557 pd.lStructSize = sizeof(pd);
558 pd.hwndOwner = hMainWnd;
560 pd.nMinPage = 1;
561 pd.nMaxPage = -1;
562 pd.hDevMode = devMode;
563 pd.hDevNames = devNames;
564
566 if(from == to)
567 pd.Flags |= PD_NOSELECTION;
568
569 if(PrintDlgW(&pd))
570 {
571 devMode = pd.hDevMode;
572 devNames = pd.hDevNames;
573 print(&pd, wszFileName);
575 }
576}
577
579{
581 int i;
582
583 if(show)
584 {
586 HWND hStatic;
587 UINT num_pages_string = preview.pages_shown > 1 ? STRING_PREVIEW_ONEPAGE :
589
593 AddTextButton(hReBar, num_pages_string, ID_PREVIEW_NUMPAGES, BANDID_PREVIEW_BTN4);
597
598 hStatic = CreateWindowW(WC_STATICW, NULL,
599 WS_VISIBLE | WS_CHILD, 0, 0, 0, 0,
600 hReBar, NULL, NULL, NULL);
601
605 rb.hwndChild = hStatic;
606 rb.cyChild = rb.cyMinChild = 22;
607 rb.cx = rb.cxMinChild = 90;
608 rb.cxIdeal = 100;
610
611 SendMessageW(hReBar, RB_INSERTBANDW, -1, (LPARAM)&rb);
612 } else
613 {
614 for(i = 0; i <= PREVIEW_BUTTONS; i++)
616 }
617}
618
619static const int min_spacing = 10;
620
621static void update_preview_scrollbars(HWND hwndPreview, RECT *window)
622{
623 SCROLLINFO sbi;
624 sbi.cbSize = sizeof(sbi);
626 sbi.nMin = 0;
627 if (preview.zoomlevel == 0)
628 {
629 /* Hide scrollbars when zoomed out. */
630 sbi.nMax = 0;
631 sbi.nPage = window->right;
632 SetScrollInfo(hwndPreview, SB_HORZ, &sbi, TRUE);
633 sbi.nPage = window->bottom;
634 SetScrollInfo(hwndPreview, SB_VERT, &sbi, TRUE);
635 } else {
638 sbi.nPage = window->right;
639 SetScrollInfo(hwndPreview, SB_HORZ, &sbi, TRUE);
640 /* Change in the horizontal scrollbar visibility affects the
641 * client rect, so update the client rect. */
642 GetClientRect(hwndPreview, window);
644 sbi.nPage = window->bottom;
645 SetScrollInfo(hwndPreview, SB_VERT, &sbi, TRUE);
646 }
647}
648
649static void update_preview_sizes(HWND hwndPreview, BOOL zoomLevelUpdated)
650{
651 RECT window;
652
653 GetClientRect(hwndPreview, &window);
654
655 /* The zoom ratio isn't updated for partial zoom because of resizing the window. */
656 if (zoomLevelUpdated || preview.zoomlevel != 1)
657 {
658 float ratio, ratioHeight, ratioWidth;
659 if (preview.zoomlevel == 2)
660 {
661 ratio = 1.0;
662 } else {
663 ratioHeight = (window.bottom - min_spacing * 2) / (float)preview.bmSize.cy;
664
665 ratioWidth = (float)(window.right -
668
669 if(ratioWidth > ratioHeight)
670 ratio = ratioHeight;
671 else
672 ratio = ratioWidth;
673
674 if (preview.zoomlevel == 1)
675 ratio += (1.0 - ratio) / 2;
676 }
677 preview.zoomratio = ratio;
678 }
679
682
684
685 preview.spacing.cx = (window.right -
687 (preview.pages_shown + 1);
690
691 update_preview_scrollbars(hwndPreview, &window);
692}
693
694static void draw_margin_lines(HDC hdc, int x, int y, float ratio)
695{
696 HPEN hPen, oldPen;
697 SIZE dpi;
698 RECT page_margin = preview.rcPage;
699
702
705
706 page_margin.left = (int)((float)twips_to_pixels(page_margin.left, dpi.cx) * ratio);
707 page_margin.top = (int)((float)twips_to_pixels(page_margin.top, dpi.cy) * ratio);
708 page_margin.bottom = (int)((float)twips_to_pixels(page_margin.bottom, dpi.cy) * ratio);
709 page_margin.right = (int)((float)twips_to_pixels(page_margin.right, dpi.cx) * ratio);
710
711 OffsetRect(&page_margin, x, y);
712
713 hPen = CreatePen(PS_DOT, 1, RGB(0,0,0));
714 oldPen = SelectObject(hdc, hPen);
715
716 MoveToEx(hdc, x, page_margin.top, NULL);
717 LineTo(hdc, x + preview.bmScaledSize.cx, page_margin.top);
718 MoveToEx(hdc, x, page_margin.bottom, NULL);
719 LineTo(hdc, x + preview.bmScaledSize.cx, page_margin.bottom);
720
721 MoveToEx(hdc, page_margin.left, y, NULL);
722 LineTo(hdc, page_margin.left, y + preview.bmScaledSize.cy);
723 MoveToEx(hdc, page_margin.right, y, NULL);
724 LineTo(hdc, page_margin.right, y + preview.bmScaledSize.cy);
725
726 SelectObject(hdc, oldPen);
727 DeleteObject(hPen);
728}
729
731{
732 return preview.pageEnds[page - 1] >= preview.textlength;
733}
734
736{
738 preview.page = 1;
739 preview.hdc = 0;
740 preview.hdc2 = 0;
742 preview.zoomratio = 0;
743 preview.zoomlevel = 0;
745
748 0, 0, 200, 10, hMainWnd, (HMENU)IDC_PREVIEW, hInstance, NULL);
749}
750
752{
753 HWND hwndPreview = GetDlgItem(hMainWnd, IDC_PREVIEW);
754 preview.window.right = 0;
756 preview.page = 0;
760 if (preview.zoomlevel > 0)
762 if(preview.hdc) {
765 DeleteObject(oldbm);
766 preview.hdc = NULL;
767 }
768 if(preview.hdc2) {
771 DeleteObject(oldbm);
772 preview.hdc2 = NULL;
773 }
774
776 DestroyWindow(hwndPreview);
777}
778
780{
781 return preview.page != 0;
782}
783
784static void draw_preview(HWND hEditorWnd, FORMATRANGE* lpFr, RECT* paper, int page)
785{
786 int bottom;
787
788 if (!preview.pageEnds)
789 {
792 sizeof(int) * preview.pageCapacity);
793 if (!preview.pageEnds) return;
794 } else if (page >= preview.pageCapacity) {
795 int *new_buffer;
796 new_buffer = HeapReAlloc(GetProcessHeap(), 0, preview.pageEnds,
797 sizeof(int) * preview.pageCapacity * 2);
798 if (!new_buffer) return;
800 preview.pageEnds = new_buffer;
801 }
802
803 FillRect(lpFr->hdc, paper, GetStockObject(WHITE_BRUSH));
804 if (page > 1 && is_last_preview_page(page - 1)) return;
805 lpFr->chrg.cpMin = page <= 1 ? 0 : preview.pageEnds[page-2];
806 bottom = lpFr->rc.bottom;
808
809 /* EM_FORMATRANGE sets fr.rc.bottom to indicate the area printed in,
810 * but we want to keep the original for drawing margins */
811 lpFr->rc.bottom = bottom;
813}
814
816{
823 preview.pages_shown > 1 ||
827}
828
829static LRESULT print_preview(HWND hwndPreview)
830{
831 HPEN hPen, oldPen;
832 HDC hdc;
833 HRGN back_rgn, excl_rgn;
834 RECT window, background;
835 PAINTSTRUCT ps;
836 int x, y;
837
838 hdc = BeginPaint(hwndPreview, &ps);
839 GetClientRect(hwndPreview, &window);
840 back_rgn = CreateRectRgnIndirect(&window);
841
842 x = preview.spacing.cx - GetScrollPos(hwndPreview, SB_HORZ);
843 y = preview.spacing.cy - GetScrollPos(hwndPreview, SB_VERT);
844
845 /* draw page outlines */
846 hPen = CreatePen(PS_SOLID|PS_INSIDEFRAME, 2, RGB(0,0,0));
847 oldPen = SelectObject(hdc, hPen);
848 SetRect(&background, x - 2, y - 2, x + preview.bmScaledSize.cx + 2,
849 y + preview.bmScaledSize.cy + 2);
850 Rectangle(hdc, background.left, background.top,
851 background.right, background.bottom);
852 excl_rgn = CreateRectRgnIndirect(&background);
853 CombineRgn(back_rgn, back_rgn, excl_rgn, RGN_DIFF);
854 if(preview.pages_shown > 1)
855 {
856 background.left += preview.bmScaledSize.cx + preview.spacing.cx;
857 background.right += preview.bmScaledSize.cx + preview.spacing.cx;
858 Rectangle(hdc, background.left, background.top,
859 background.right, background.bottom);
860 SetRectRgn(excl_rgn, background.left, background.top,
861 background.right, background.bottom);
862 CombineRgn(back_rgn, back_rgn, excl_rgn, RGN_DIFF);
863 }
864 SelectObject(hdc, oldPen);
865 DeleteObject(hPen);
867 DeleteObject(excl_rgn);
868 DeleteObject(back_rgn);
869
872
874
875 if(preview.pages_shown > 1)
876 {
879 StretchBlt(hdc, x, y,
881 preview.hdc2, 0, 0,
883
885 } else {
886 InflateRect(&background, -2, -2);
887 FillRect(hdc, &background, GetStockObject(WHITE_BRUSH));
888 }
889 }
890
892
893 EndPaint(hwndPreview, &ps);
894
895 return 0;
896}
897
899{
900 HWND hStatusbar = GetDlgItem(hMainWnd, IDC_STATUSBAR);
902 WCHAR *p;
903 WCHAR wstr[MAX_STRING_LEN];
904
905 p = wstr;
907 {
908 static const WCHAR fmt[] = {' ','%','d','\0'};
911 } else {
912 static const WCHAR fmt[] = {' ','%','d','-','%','d','\0'};
915 }
916 SetWindowTextW(hStatusbar, wstr);
917}
918
919/* Update for page changes. */
921{
922 RECT paper;
924 HWND hwndPreview = GetDlgItem(hMainWnd, IDC_PREVIEW);
925 HBITMAP hBitmapCapture;
926 FORMATRANGE fr;
927 HDC hdc = GetDC(hwndPreview);
928
929 fr.hdcTarget = make_dc();
930 fr.rc = fr.rcPage = preview.rcPage;
931 fr.rc.left += margins.left;
932 fr.rc.top += margins.top;
933 fr.rc.bottom -= margins.bottom;
934 fr.rc.right -= margins.right;
935
936 fr.chrg.cpMin = 0;
938
939 SetRect(&paper, 0, 0, preview.bmSize.cx, preview.bmSize.cy);
940
941 if (!preview.hdc) {
944 SelectObject(preview.hdc, hBitmapCapture);
945 }
946
947 fr.hdc = preview.hdc;
948 draw_preview(hEditorWnd, &fr, &paper, preview.page);
949
950 if(preview.pages_shown > 1)
951 {
952 if (!preview.hdc2)
953 {
955 hBitmapCapture = CreateCompatibleBitmap(hdc,
958 SelectObject(preview.hdc2, hBitmapCapture);
959 }
960
961 fr.hdc = preview.hdc2;
962 draw_preview(hEditorWnd, &fr, &fr.rcPage, preview.page + 1);
963 }
965 ReleaseDC(hwndPreview, hdc);
966
967 InvalidateRect(hwndPreview, NULL, FALSE);
970}
971
973{
977 int nPreviewPages;
978
980
981 nPreviewPages = preview.zoomlevel > 0 ? preview.saved_pages_shown :
983
984 LoadStringW(hInst, nPreviewPages > 1 ? STRING_PREVIEW_ONEPAGE :
987
991}
992
993/* Returns the page shown that the point is in (1 or 2) or 0 if the point
994 * isn't inside either page */
996{
997 RECT rc;
998 rc.left = preview.spacing.cx;
999 rc.right = rc.left + preview.bmScaledSize.cx;
1000 rc.top = preview.spacing.cy;
1001 rc.bottom = rc.top + preview.bmScaledSize.cy;
1002 if (PtInRect(&rc, pt))
1003 return 1;
1004
1005 if (preview.pages_shown <= 1)
1006 return 0;
1007
1010 if (PtInRect(&rc, pt))
1011 return is_last_preview_page(preview.page) ? 1 : 2;
1012
1013 return 0;
1014}
1015
1017{
1018 switch(msg)
1019 {
1020 case WM_CREATE:
1021 {
1024 FORMATRANGE fr;
1025 GETTEXTLENGTHEX gt = {GTL_DEFAULT, 1200};
1026 HDC hdc = GetDC(hWnd);
1027 HDC hdcTarget = make_dc();
1028
1033 fr.rcPage = preview.rcPage;
1034
1037
1039
1041 fr.hdcTarget = hdcTarget;
1042 fr.chrg.cpMin = 0;
1044 DeleteDC(fr.hdc);
1046 ReleaseDC(hWnd, hdc);
1047
1050 break;
1051 }
1052
1053 case WM_PAINT:
1054 return print_preview(hWnd);
1055
1056 case WM_SIZE:
1057 {
1060 break;
1061 }
1062
1063 case WM_VSCROLL:
1064 case WM_HSCROLL:
1065 {
1066 SCROLLINFO si;
1067 RECT rc;
1068 int nBar = (msg == WM_VSCROLL) ? SB_VERT : SB_HORZ;
1069 int origPos;
1070
1071 GetClientRect(hWnd, &rc);
1072 si.cbSize = sizeof(si);
1073 si.fMask = SIF_ALL;
1074 GetScrollInfo(hWnd, nBar, &si);
1075 origPos = si.nPos;
1076 switch(LOWORD(wParam))
1077 {
1078 case SB_TOP: /* == SB_LEFT */
1079 si.nPos = si.nMin;
1080 break;
1081 case SB_BOTTOM: /* == SB_RIGHT */
1082 si.nPos = si.nMax;
1083 break;
1084 case SB_LINEUP: /* == SB_LINELEFT */
1085 si.nPos -= si.nPage / 10;
1086 break;
1087 case SB_LINEDOWN: /* == SB_LINERIGHT */
1088 si.nPos += si.nPage / 10;
1089 break;
1090 case SB_PAGEUP: /* == SB_PAGELEFT */
1091 si.nPos -= si.nPage;
1092 break;
1093 case SB_PAGEDOWN: /* SB_PAGERIGHT */
1094 si.nPos += si.nPage;
1095 break;
1096 case SB_THUMBTRACK:
1097 si.nPos = si.nTrackPos;
1098 break;
1099 }
1100 si.fMask = SIF_POS;
1101 SetScrollInfo(hWnd, nBar, &si, TRUE);
1102 GetScrollInfo(hWnd, nBar, &si);
1103 if (si.nPos != origPos)
1104 {
1105 int amount = origPos - si.nPos;
1106 if (msg == WM_VSCROLL)
1107 ScrollWindow(hWnd, 0, amount, NULL, NULL);
1108 else
1109 ScrollWindow(hWnd, amount, 0, NULL, NULL);
1110 }
1111 return 0;
1112 }
1113
1114 case WM_SETCURSOR:
1115 {
1116 POINT pt;
1117 RECT rc;
1118 int bHittest = 0;
1119 DWORD messagePos = GetMessagePos();
1120 pt.x = (short)LOWORD(messagePos);
1121 pt.y = (short)HIWORD(messagePos);
1123
1124 GetClientRect(hWnd, &rc);
1125 if (PtInRect(&rc, pt))
1126 {
1127 pt.x += GetScrollPos(hWnd, SB_HORZ);
1128 pt.y += GetScrollPos(hWnd, SB_VERT);
1129 bHittest = preview_page_hittest(pt);
1130 }
1131
1132 if (bHittest)
1135 else
1137
1138 return TRUE;
1139 }
1140
1141 case WM_LBUTTONDOWN:
1142 {
1143 int page;
1144 POINT pt;
1147 if ((page = preview_page_hittest(pt)) > 0)
1148 {
1150
1151 /* Convert point from client coordinate to unzoomed page
1152 * coordinate. */
1153 pt.x -= preview.spacing.cx;
1154 if (page > 1)
1156 pt.y -= preview.spacing.cy;
1157 pt.x /= preview.zoomratio;
1158 pt.y /= preview.zoomratio;
1159
1160 if (preview.zoomlevel == 0)
1162 preview.zoomlevel = (preview.zoomlevel + 1) % 3;
1163 preview.zoomratio = 0;
1165 {
1167 } else if (preview.pages_shown > 1) {
1168 if (page >= 2) preview.page++;
1170 } else {
1174 }
1175
1176 if (preview.zoomlevel > 0) {
1177 SCROLLINFO si;
1178 /* Convert the coordinate back to client coordinate. */
1179 pt.x *= preview.zoomratio;
1180 pt.y *= preview.zoomratio;
1181 pt.x += preview.spacing.cx;
1182 pt.y += preview.spacing.cy;
1183 /* Scroll to center view at that point on the page */
1184 si.cbSize = sizeof(si);
1185 si.fMask = SIF_PAGE;
1186 GetScrollInfo(hWnd, SB_HORZ, &si);
1187 pt.x -= si.nPage / 2;
1189 GetScrollInfo(hWnd, SB_VERT, &si);
1190 pt.y -= si.nPage / 2;
1192 }
1193 }
1194 }
1195
1196 default:
1197 return DefWindowProcW(hWnd, msg, wParam, lParam);
1198 }
1199
1200 return 0;
1201}
1202
1204{
1205 switch(LOWORD(wParam))
1206 {
1207 case ID_FILE_EXIT:
1208 PostMessageW(hWnd, WM_CLOSE, 0, 0);
1209 break;
1210
1213 {
1215 preview.page++;
1216 else
1217 preview.page--;
1218
1220 }
1221 break;
1222
1225 break;
1226
1227 case ID_PREVIEW_ZOOMIN:
1228 if (preview.zoomlevel < 2)
1229 {
1230 if (preview.zoomlevel == 0)
1233 preview.zoomratio = 0;
1234 if (preview.pages_shown > 1)
1235 {
1236 /* Forced switch to one page when zooming in. */
1238 } else {
1239 HWND hwndPreview = GetDlgItem(hWnd, IDC_PREVIEW);
1240 update_preview_sizes(hwndPreview, TRUE);
1241 InvalidateRect(hwndPreview, NULL, FALSE);
1243 }
1244 }
1245 break;
1246
1247 case ID_PREVIEW_ZOOMOUT:
1248 if (preview.zoomlevel > 0)
1249 {
1250 HWND hwndPreview = GetDlgItem(hWnd, IDC_PREVIEW);
1252 preview.zoomratio = 0;
1253 if (preview.zoomlevel == 0 && preview.saved_pages_shown > 1) {
1255 } else {
1256 update_preview_sizes(hwndPreview, TRUE);
1257 InvalidateRect(hwndPreview, NULL, FALSE);
1259 }
1260 }
1261 break;
1262
1263 case ID_PRINT:
1265 SendMessageW(hWnd, WM_CLOSE, 0, 0);
1266 break;
1267 }
1268
1269 return 0;
1270}
HDC hdcTarget
Definition: PatBlt.c:13
#define msg(x)
Definition: auth_time.c:54
HWND hWnd
Definition: settings.c:17
#define MAX_STRING_LEN
Definition: precomp.h:36
#define IDC_ZOOM
Definition: resource.h:16
#define IDC_STATUSBAR
Definition: resource.h:12
HFONT hFont
Definition: main.c:53
#define ID_FILE_EXIT
Definition: resource.h:46
static void update_preview_sizes(HWND hwndPreview, BOOL zoomLevelUpdated)
Definition: print.c:649
static void preview_bar_show(HWND hMainWnd, BOOL show)
Definition: print.c:578
static HGLOBAL devMode
Definition: print.c:52
static LONG twips_to_pixels(int twips, int dpi)
Definition: print.c:176
void redraw_ruler(HWND hRulerWnd)
Definition: print.c:288
void print_quick(HWND hMainWnd, LPWSTR wszFileName)
Definition: print.c:537
static previewinfo preview
Definition: print.c:56
LRESULT CALLBACK ruler_proc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
Definition: print.c:410
static int preview_page_hittest(POINT pt)
Definition: print.c:995
void get_default_printer_opts(void)
Definition: print.c:521
static void update_preview(HWND hMainWnd)
Definition: print.c:920
static void char_from_pagenum(HWND hEditorWnd, FORMATRANGE *fr, int page)
Definition: print.c:269
void target_device(HWND hMainWnd, DWORD wordWrap)
Definition: print.c:209
static LPWSTR get_print_file_filter(HWND hMainWnd)
Definition: print.c:63
static LONG twips_to_centmm(int twips)
Definition: print.c:166
static void draw_margin_lines(HDC hdc, int x, int y, float ratio)
Definition: print.c:694
static void update_preview_scrollbars(HWND hwndPreview, RECT *window)
Definition: print.c:621
void dialog_printsetup(HWND hMainWnd)
Definition: print.c:498
static void print(LPPRINTDLGW pd, LPWSTR wszFileName)
Definition: print.c:438
struct _previewinfo * ppreviewinfo
void registry_read_previewpages(HKEY hKey)
Definition: print.c:105
static void draw_preview(HWND hEditorWnd, FORMATRANGE *lpFr, RECT *paper, int page)
Definition: print.c:784
static LRESULT print_preview(HWND hwndPreview)
Definition: print.c:829
struct _previewinfo previewinfo
void init_preview(HWND hMainWnd, LPWSTR wszFileName)
Definition: print.c:735
static BOOL is_last_preview_page(int page)
Definition: print.c:730
static LONG centmm_to_twips(int mm)
Definition: print.c:171
static void toggle_num_pages(HWND hMainWnd)
Definition: print.c:972
const WCHAR wszPreviewWndClass[]
Definition: wordpad.c:57
void registry_read_pagemargins(HKEY hKey)
Definition: print.c:90
static HDC make_dc(void)
Definition: print.c:145
static void paint_ruler(HWND hWnd, LONG EditLeftmost, BOOL NewMetrics)
Definition: print.c:377
void registry_set_previewpages(HKEY hKey)
Definition: print.c:99
static void AddTextButton(HWND hRebarWnd, UINT string, UINT command, UINT id)
Definition: print.c:121
static void add_ruler_units(HDC hdcRuler, RECT *drawRect, BOOL NewMetrics, LONG EditLeftmost)
Definition: print.c:302
static RECT get_print_rect(HDC hdc)
Definition: print.c:187
static void update_preview_statusbar(HWND hMainWnd)
Definition: print.c:898
static const WCHAR var_pagemargin[]
Definition: print.c:60
BOOL preview_isactive(void)
Definition: print.c:779
void dialog_print(HWND hMainWnd, LPWSTR wszFileName)
Definition: print.c:549
static const int min_spacing
Definition: print.c:619
static void update_ruler(HWND hRulerWnd)
Definition: print.c:296
static void update_preview_buttons(HWND hMainWnd)
Definition: print.c:815
static HWND get_ruler_wnd(HWND hMainWnd)
Definition: print.c:283
static HGLOBAL devNames
Definition: print.c:53
static LONG devunits_to_twips(int units, int dpi)
Definition: print.c:181
static RECT margins
Definition: print.c:55
LRESULT preview_command(HWND hWnd, WPARAM wParam)
Definition: print.c:1203
void registry_set_pagemargins(HKEY hKey)
Definition: print.c:85
LRESULT CALLBACK preview_proc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
Definition: print.c:1016
void close_preview(HWND hMainWnd)
Definition: print.c:751
static LPWSTR dialog_print_to_file(HWND hMainWnd)
Definition: print.c:243
static const WCHAR var_previewpages[]
Definition: print.c:61
static WCHAR wszFileName[MAX_PATH]
Definition: wordpad.c:71
static DWORD wordWrap[2]
Definition: wordpad.c:67
static HWND hEditorWnd
Definition: wordpad.c:61
#define ULongToHandle(h)
Definition: basetsd.h:81
HINSTANCE hInstance
Definition: charmap.c:19
WPARAM wParam
Definition: combotst.c:138
LPARAM lParam
Definition: combotst.c:139
#define OFN_OVERWRITEPROMPT
Definition: commdlg.h:116
#define PSD_MARGINS
Definition: commdlg.h:173
#define OFN_EXPLORER
Definition: commdlg.h:104
#define PD_USEDEVMODECOPIESANDCOLLATE
Definition: commdlg.h:166
#define PD_NOSELECTION
Definition: commdlg.h:149
#define PD_SELECTION
Definition: commdlg.h:147
#define PD_RETURNDC
Definition: commdlg.h:155
#define PD_RETURNDEFAULT
Definition: commdlg.h:157
#define PD_PRINTTOFILE
Definition: commdlg.h:152
#define OFN_HIDEREADONLY
Definition: commdlg.h:107
#define PSD_INHUNDREDTHSOFMILLIMETERS
Definition: commdlg.h:175
#define PD_PAGENUMS
Definition: commdlg.h:148
#define OFN_PATHMUSTEXIST
Definition: commdlg.h:117
#define ERROR_SUCCESS
Definition: deptool.c:10
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
static HBITMAP hBitmap
Definition: timezone.c:26
LONG WINAPI RegSetValueExW(_In_ HKEY hKey, _In_ LPCWSTR lpValueName, _In_ DWORD Reserved, _In_ DWORD dwType, _In_ CONST BYTE *lpData, _In_ DWORD cbData)
Definition: reg.c:4882
LONG WINAPI RegQueryValueExW(_In_ HKEY hkeyorg, _In_ LPCWSTR name, _In_ LPDWORD reserved, _In_ LPDWORD type, _In_ LPBYTE data, _In_ LPDWORD count)
Definition: reg.c:4103
BOOL WINAPI GetSaveFileNameW(LPOPENFILENAMEW ofn)
Definition: filedlg.c:4801
BOOL WINAPI PrintDlgW(LPPRINTDLGW lppd)
Definition: printdlg.c:2403
BOOL WINAPI PageSetupDlgW(LPPAGESETUPDLGW setupdlg)
Definition: printdlg.c:3938
#define GetProcessHeap()
Definition: compat.h:736
#define HeapAlloc
Definition: compat.h:733
#define HeapReAlloc
Definition: compat.h:734
#define MAX_PATH
Definition: compat.h:34
#define HeapFree(x, y, z)
Definition: compat.h:735
#define CALLBACK
Definition: compat.h:35
#define lstrcpyW
Definition: compat.h:749
#define lstrlenW
Definition: compat.h:750
HMODULE WINAPI GetModuleHandleW(LPCWSTR lpModuleName)
Definition: loader.c:838
const WCHAR * text
Definition: package.c:1794
unsigned int(__cdecl typeof(jpeg_read_scanlines))(struct jpeg_decompress_struct *
Definition: typeof.h:31
unsigned short(__cdecl typeof(TIFFCurrentDirectory))(struct tiff *)
Definition: typeof.h:94
#define pt(x, y)
Definition: drawing.c:79
static VOID BitBlt(_In_ ULONG Left, _In_ ULONG Top, _In_ ULONG Width, _In_ ULONG Height, _In_reads_bytes_(Delta *Height) PUCHAR Buffer, _In_ ULONG BitsPerPixel, _In_ ULONG Delta)
Definition: common.c:57
#define RGB(r, g, b)
Definition: precomp.h:71
HINSTANCE hInst
Definition: dxdiag.c:13
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
FxAutoRegKey hKey
pKey DeleteObject()
GLint GLint GLint GLint GLint x
Definition: gl.h:1548
GLint GLint GLint GLint GLint GLint y
Definition: gl.h:1548
GLint GLint GLsizei GLsizei height
Definition: gl.h:1546
GLint GLint GLsizei width
Definition: gl.h:1546
GLsizeiptr size
Definition: glext.h:5919
GLfloat units
Definition: glext.h:11727
GLint GLint bottom
Definition: glext.h:7726
GLfloat GLfloat p
Definition: glext.h:8902
GLuint64EXT * result
Definition: glext.h:11304
GLuint id
Definition: glext.h:5910
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
LPVOID NTAPI GlobalLock(HGLOBAL hMem)
Definition: heapmem.c:755
BOOL NTAPI GlobalUnlock(HGLOBAL hMem)
Definition: heapmem.c:1190
HWND hMainWnd
Definition: magnifier.c:32
HDC hdc
Definition: main.c:9
static HBITMAP
Definition: button.c:44
static HDC
Definition: imagelist.c:88
static DWORD *static HFONT(WINAPI *pCreateFontIndirectExA)(const ENUMLOGFONTEXDVA *)
static IHTMLWindow2 * window
Definition: events.c:77
static float(__cdecl *square_half_float)(float x
static const CLSID *static CLSID *static const GUID VARIANT VARIANT *static IServiceProvider DWORD *static HMENU
Definition: ordinal.c:63
INT WINAPI MulDiv(INT nNumber, INT nNumerator, INT nDenominator)
Definition: muldiv.c:25
unsigned int UINT
Definition: ndis.h:50
#define STRING_ALL_FILES
Definition: notepad_res.h:68
#define REG_BINARY
Definition: nt_native.h:1496
#define DWORD
Definition: nt_native.h:44
#define OBJ_BITMAP
Definition: objidl.idl:1415
#define LOWORD(l)
Definition: pedump.c:82
#define WS_CHILD
Definition: pedump.c:617
#define WS_VSCROLL
Definition: pedump.c:627
#define WS_VISIBLE
Definition: pedump.c:620
long LONG
Definition: pedump.c:60
#define WS_HSCROLL
Definition: pedump.c:628
#define WC_BUTTONW
Definition: commctrl.h:4628
#define REBARBANDINFOW_V6_SIZE
Definition: commctrl.h:1542
#define RB_DELETEBAND
Definition: commctrl.h:1576
#define RBBIM_CHILDSIZE
Definition: commctrl.h:1507
#define RB_INSERTBANDW
Definition: commctrl.h:1583
#define RBBIM_CHILD
Definition: commctrl.h:1506
#define RBBS_NOGRIPPER
Definition: commctrl.h:1497
#define RB_IDTOINDEX
Definition: commctrl.h:1588
#define RBBIM_ID
Definition: commctrl.h:1510
#define RBBIM_STYLE
Definition: commctrl.h:1502
#define RBBIM_SIZE
Definition: commctrl.h:1508
#define WC_STATICW
Definition: commctrl.h:4685
#define RBBS_VARIABLEHEIGHT
Definition: commctrl.h:1495
#define RBBIM_IDEALSIZE
Definition: commctrl.h:1511
#define EM_FORMATRANGE
Definition: richedit.h:90
#define GTL_DEFAULT
Definition: richedit.h:1054
#define EM_GETTEXTLENGTHEX
Definition: richedit.h:129
#define EM_SETTARGETDEVICE
Definition: richedit.h:105
#define EM_EXGETSEL
Definition: richedit.h:85
const WCHAR * str
#define REG_DWORD
Definition: sdbapi.c:596
OPENFILENAME ofn
Definition: sndrec32.cpp:56
CardRegion * from
Definition: spigame.cpp:19
LPCWSTR lpszDocName
Definition: wingdi.h:1684
int cbSize
Definition: wingdi.h:1683
LPCWSTR lpszOutput
Definition: wingdi.h:1685
LONG cx
Definition: kdterminal.h:27
LONG cy
Definition: kdterminal.h:28
LONG cpMax
Definition: richedit.h:501
LONG cpMin
Definition: richedit.h:500
HDC hdcTarget
Definition: richedit.h:608
CHARRANGE chrg
Definition: richedit.h:611
RECT rcPage
Definition: richedit.h:610
SIZE bmScaledSize
Definition: print.c:45
SIZE spacing
Definition: print.c:46
int pages_shown
Definition: print.c:36
HDC hdc2
Definition: print.c:41
int pageCapacity
Definition: print.c:38
int * pageEnds
Definition: print.c:38
LPWSTR wszFileName
Definition: print.c:49
float zoomratio
Definition: print.c:47
SIZE bmSize
Definition: print.c:44
HDC hdc
Definition: print.c:40
int saved_pages_shown
Definition: print.c:37
int zoomlevel
Definition: print.c:48
int page
Definition: print.c:35
RECT rcPage
Definition: print.c:43
int textlength
Definition: print.c:39
RECT window
Definition: print.c:42
Definition: fci.c:127
Definition: dsound.c:943
Definition: format.c:58
Definition: name.c:39
Definition: module.h:576
WORD wDeviceOffset
Definition: commdlg.h:298
WORD wDriverOffset
Definition: commdlg.h:297
LPCSTR lpstrDefExt
Definition: commdlg.h:345
HWND hwndOwner
Definition: commdlg.h:330
LPSTR lpstrFile
Definition: commdlg.h:336
DWORD Flags
Definition: commdlg.h:342
DWORD lStructSize
Definition: commdlg.h:329
LPCSTR lpstrFilter
Definition: commdlg.h:332
DWORD nMaxFile
Definition: commdlg.h:337
HGLOBAL hDevMode
Definition: commdlg.h:488
DWORD Flags
Definition: commdlg.h:491
HWND hwndOwner
Definition: commdlg.h:487
WORD nToPage
Definition: commdlg.h:493
HGLOBAL hDevNames
Definition: commdlg.h:489
WORD nMaxPage
Definition: commdlg.h:495
WORD nMinPage
Definition: commdlg.h:494
HDC hDC
Definition: commdlg.h:490
DWORD lStructSize
Definition: commdlg.h:486
WORD nFromPage
Definition: commdlg.h:492
HGLOBAL hDevNames
Definition: commdlg.h:452
DWORD lStructSize
Definition: commdlg.h:449
RECT rtMargin
Definition: commdlg.h:456
DWORD Flags
Definition: commdlg.h:453
HWND hwndOwner
Definition: commdlg.h:450
HGLOBAL hDevMode
Definition: commdlg.h:451
LONG right
Definition: windef.h:308
LONG bottom
Definition: windef.h:309
LONG top
Definition: windef.h:307
LONG left
Definition: windef.h:306
#define max(a, b)
Definition: svc.c:63
unsigned char * LPBYTE
Definition: typedefs.h:53
#define HIWORD(l)
Definition: typedefs.h:247
int ret
#define RECT
Definition: precomp.h:26
#define dpi
Definition: sysparams.c:23
#define ZeroMemory
Definition: winbase.h:1736
_In_ CLIPOBJ _In_ BRUSHOBJ _In_ LONG _In_ LONG _In_ LONG x2
Definition: winddi.h:3710
LONG_PTR LPARAM
Definition: windef.h:208
LONG_PTR LRESULT
Definition: windef.h:209
UINT_PTR WPARAM
Definition: windef.h:207
HGDIOBJ WINAPI GetStockObject(_In_ int)
int WINAPI EndPage(_In_ HDC)
int WINAPI GetDeviceCaps(_In_opt_ HDC, _In_ int)
#define PHYSICALHEIGHT
Definition: wingdi.h:736
#define RGN_DIFF
Definition: wingdi.h:358
#define PS_DOT
Definition: wingdi.h:588
#define LOGPIXELSY
Definition: wingdi.h:719
UINT WINAPI SetTextAlign(_In_ HDC, _In_ UINT)
Definition: text.c:883
HGDIOBJ WINAPI GetCurrentObject(_In_ HDC, _In_ UINT)
Definition: dc.c:428
HGDIOBJ WINAPI SelectObject(_In_ HDC, _In_ HGDIOBJ)
Definition: dc.c:1546
BOOL WINAPI MoveToEx(_In_ HDC, _In_ int, _In_ int, _Out_opt_ LPPOINT)
HDC WINAPI CreateCompatibleDC(_In_opt_ HDC hdc)
int WINAPI EndDoc(_In_ HDC)
int WINAPI CombineRgn(_In_opt_ HRGN hrgnDest, _In_opt_ HRGN hrgnSrc1, _In_opt_ HRGN hrgnSrc2, _In_ int fnCombineMode)
#define TRANSPARENT
Definition: wingdi.h:950
BOOL WINAPI StretchBlt(_In_ HDC, _In_ int, _In_ int, _In_ int, _In_ int, _In_opt_ HDC, _In_ int, _In_ int, _In_ int, _In_ int, _In_ DWORD)
#define SRCCOPY
Definition: wingdi.h:333
#define WHITE_BRUSH
Definition: wingdi.h:902
#define GRAY_BRUSH
Definition: wingdi.h:898
#define PHYSICALWIDTH
Definition: wingdi.h:735
int WINAPI StartPage(_In_ HDC)
int WINAPI StartDocW(_In_ HDC, _In_ const DOCINFOW *)
HFONT WINAPI CreateFontW(_In_ int, _In_ int, _In_ int, _In_ int, _In_ int, _In_ DWORD, _In_ DWORD, _In_ DWORD, _In_ DWORD, _In_ DWORD, _In_ DWORD, _In_ DWORD, _In_ DWORD, _In_opt_ LPCWSTR)
#define BLACK_BRUSH
Definition: wingdi.h:896
HBITMAP WINAPI CreateCompatibleBitmap(_In_ HDC hdc, _In_ INT cx, _In_ INT cy)
int WINAPI FillRgn(_In_ HDC, _In_ HRGN, _In_ HBRUSH)
Definition: painting.c:183
#define LOGPIXELSX
Definition: wingdi.h:718
BOOL WINAPI TextOutW(_In_ HDC hdc, _In_ int x, _In_ int y, _In_reads_(c) LPCWSTR lpString, _In_ int c)
int WINAPI FillRect(HDC, LPCRECT, HBRUSH)
BOOL WINAPI Rectangle(_In_ HDC, _In_ int, _In_ int, _In_ int, _In_ int)
int WINAPI SetBkMode(_In_ HDC, _In_ int)
Definition: dc.c:1056
#define TA_CENTER
Definition: wingdi.h:931
HRGN WINAPI CreateRectRgnIndirect(_In_ LPCRECT)
BOOL WINAPI DeleteDC(_In_ HDC)
HPEN WINAPI CreatePen(_In_ int, _In_ int, _In_ COLORREF)
BOOL WINAPI SetRectRgn(_In_ HRGN, _In_ int, _In_ int, _In_ int, _In_ int)
BOOL WINAPI LineTo(_In_ HDC, _In_ int, _In_ int)
#define PS_INSIDEFRAME
Definition: wingdi.h:593
#define PS_SOLID
Definition: wingdi.h:586
#define SRCAND
Definition: wingdi.h:330
HDC WINAPI CreateDCW(_In_opt_ LPCWSTR pszDriver, _In_opt_ LPCWSTR pszDevice, _In_opt_ LPCWSTR psz, _In_opt_ const DEVMODEW *pdmInit)
#define WM_PAINT
Definition: winuser.h:1623
int WINAPI ReleaseDC(_In_opt_ HWND, _In_ HDC)
#define WM_CLOSE
Definition: winuser.h:1624
#define SB_THUMBTRACK
Definition: winuser.h:573
#define SB_LINEUP
Definition: winuser.h:564
#define WM_HSCROLL
Definition: winuser.h:1746
#define EDGE_SUNKEN
Definition: winuser.h:451
#define COLOR_MENU
Definition: winuser.h:920
DWORD WINAPI GetMessagePos(void)
Definition: message.c:1351
LRESULT WINAPI DefWindowProcW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
BOOL WINAPI PostMessageW(_In_opt_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
#define WM_VSCROLL
Definition: winuser.h:1747
#define SIF_RANGE
Definition: winuser.h:1238
#define WM_CREATE
Definition: winuser.h:1611
int WINAPI LoadStringW(_In_opt_ HINSTANCE hInstance, _In_ UINT uID, _Out_writes_to_(cchBufferMax, return+1) LPWSTR lpBuffer, _In_ int cchBufferMax)
int WINAPIV wsprintfW(_Out_ LPWSTR, _In_ _Printf_format_string_ LPCWSTR,...)
#define EM_GETSEL
Definition: winuser.h:2000
#define WM_SIZE
Definition: winuser.h:1614
HBRUSH WINAPI GetSysColorBrush(_In_ int)
#define SB_VERT
Definition: winuser.h:553
#define SB_BOTTOM
Definition: winuser.h:577
#define IDC_ARROW
Definition: winuser.h:687
#define EDGE_ETCHED
Definition: winuser.h:452
HCURSOR WINAPI SetCursor(_In_opt_ HCURSOR)
#define SIF_PAGE
Definition: winuser.h:1236
#define WM_LBUTTONDOWN
Definition: winuser.h:1779
HCURSOR WINAPI LoadCursorW(_In_opt_ HINSTANCE, _In_ LPCWSTR)
Definition: cursoricon.c:2157
int WINAPI SetScrollPos(_In_ HWND, _In_ int, _In_ int, _In_ BOOL)
HWND WINAPI GetDlgItem(_In_opt_ HWND, _In_ int)
BOOL WINAPI SetWindowTextW(_In_ HWND, _In_opt_ LPCWSTR)
BOOL WINAPI PtInRect(_In_ LPCRECT, _In_ POINT)
BOOL WINAPI GetClientRect(_In_ HWND, _Out_ LPRECT)
BOOL WINAPI DrawEdge(_In_ HDC, _Inout_ LPRECT, _In_ UINT, _In_ UINT)
HWND WINAPI CreateWindowExW(_In_ DWORD dwExStyle, _In_opt_ LPCWSTR lpClassName, _In_opt_ LPCWSTR lpWindowName, _In_ DWORD dwStyle, _In_ int X, _In_ int Y, _In_ int nWidth, _In_ int nHeight, _In_opt_ HWND hWndParent, _In_opt_ HMENU hMenu, _In_opt_ HINSTANCE hInstance, _In_opt_ LPVOID lpParam)
BOOL WINAPI EndPaint(_In_ HWND, _In_ const PAINTSTRUCT *)
#define SB_PAGEDOWN
Definition: winuser.h:569
#define SIF_ALL
Definition: winuser.h:1235
BOOL WINAPI EnableWindow(_In_ HWND, _In_ BOOL)
HDC WINAPI GetDC(_In_opt_ HWND)
#define SB_LINEDOWN
Definition: winuser.h:565
#define CreateWindowW(a, b, c, d, e, f, g, h, i, j, k)
Definition: winuser.h:4319
HWND WINAPI GetParent(_In_ HWND)
#define SB_TOP
Definition: winuser.h:578
#define SIF_POS
Definition: winuser.h:1237
#define WM_SETCURSOR
Definition: winuser.h:1639
#define WM_USER
Definition: winuser.h:1898
BOOL WINAPI OffsetRect(_Inout_ LPRECT, _In_ int, _In_ int)
int WINAPI SetScrollInfo(_In_ HWND, _In_ int, _In_ LPCSCROLLINFO, _In_ BOOL)
int WINAPI GetScrollPos(_In_ HWND, _In_ int)
BOOL WINAPI InvalidateRect(_In_opt_ HWND, _In_opt_ LPCRECT, _In_ BOOL)
#define MAKEINTRESOURCEW(i)
Definition: winuser.h:582
LRESULT(CALLBACK * WNDPROC)(HWND, UINT, WPARAM, LPARAM)
Definition: winuser.h:2909
HDC WINAPI BeginPaint(_In_ HWND, _Out_ LPPAINTSTRUCT)
BOOL WINAPI InflateRect(_Inout_ LPRECT, _In_ int, _In_ int)
LRESULT WINAPI CallWindowProcW(_In_ WNDPROC, _In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
#define BF_RECT
Definition: winuser.h:462
BOOL WINAPI GetScrollInfo(_In_ HWND, _In_ int, _Inout_ LPSCROLLINFO)
BOOL WINAPI DestroyWindow(_In_ HWND)
BOOL WINAPI ScrollWindow(_In_ HWND, _In_ int, _In_ int, _In_opt_ LPCRECT, _In_opt_ LPCRECT)
#define SB_PAGEUP
Definition: winuser.h:568
LRESULT WINAPI SendMessageW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
#define SB_HORZ
Definition: winuser.h:552
BOOL WINAPI SetRect(_Out_ LPRECT, _In_ int, _In_ int, _In_ int, _In_ int)
BOOL WINAPI ScreenToClient(_In_ HWND, _Inout_ LPPOINT)
#define IDC_EDITOR
Definition: wordpad.h:156
#define IDC_RULER
Definition: wordpad.h:170
#define ID_PREVIEW_NEXTPAGE
Definition: wordpad.h:48
#define STRING_PRINTER_FILES_PRN
Definition: wordpad.h:208
#define STRING_PREVIEW_PRINT
Definition: wordpad.h:218
#define BANDID_PREVIEW_BTN7
Definition: wordpad.h:107
#define STRING_PREVIEW_PAGES
Definition: wordpad.h:227
#define ID_PREVIEW_NUMPAGES
Definition: wordpad.h:50
#define BANDID_PREVIEW_BUFFER
Definition: wordpad.h:108
#define BANDID_PREVIEW_BTN4
Definition: wordpad.h:104
#define ID_WORDWRAP_NONE
Definition: wordpad.h:110
#define STRING_PREVIEW_TWOPAGES
Definition: wordpad.h:221
#define STRING_PREVIEW_NEXTPAGE
Definition: wordpad.h:219
#define STRING_PREVIEW_CLOSE
Definition: wordpad.h:225
#define BANDID_PREVIEW_BTN6
Definition: wordpad.h:106
#define STRING_PREVIEW_PREVPAGE
Definition: wordpad.h:220
#define PREVIEW_BUTTONS
Definition: wordpad.h:89
#define TWIPS_PER_INCH
Definition: wordpad.h:24
#define IDC_REBAR
Definition: wordpad.h:159
#define STRING_PREVIEW_ONEPAGE
Definition: wordpad.h:222
#define BANDID_PREVIEW_BTN3
Definition: wordpad.h:103
#define ID_PREVIEW_ZOOMOUT
Definition: wordpad.h:52
#define BANDID_PREVIEW_BTN5
Definition: wordpad.h:105
#define STRING_PREVIEW_ZOOMOUT
Definition: wordpad.h:224
#define ID_PREVIEW_ZOOMIN
Definition: wordpad.h:51
#define CENTMM_PER_INCH
Definition: wordpad.h:25
#define ID_WORDWRAP_MARGIN
Definition: wordpad.h:112
#define STRING_PREVIEW_ZOOMIN
Definition: wordpad.h:223
#define BANDID_PREVIEW_BTN1
Definition: wordpad.h:101
#define BANDID_PREVIEW_BTN2
Definition: wordpad.h:102
#define ID_PRINT
Definition: wordpad.h:39
#define IDC_PREVIEW
Definition: wordpad.h:171
#define STRING_PREVIEW_PAGE
Definition: wordpad.h:226
#define ID_PREVIEW_PREVPAGE
Definition: wordpad.h:49
__wchar_t WCHAR
Definition: xmlstorage.h:180
WCHAR * LPWSTR
Definition: xmlstorage.h:184