1 /**
2  * Windows API header module
3  *
4  * Translated from MinGW API for MS-Windows 3.12
5  *
6  * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0)
7  * Source: $(DRUNTIMESRC core/sys/windows/_commdlg.d)
8  */
9 /// Automatically imported and edited from the druntime module
10 /// core.sys.windows.commdlg for the auto-generated win32 package.
11 module win32.commdlg;
12 //version (Windows):
13 @system:
14 
15 version (ANSI) {} else version = Unicode;
16 version (Win32_UseLib) pragma(lib, "comdlg32");
17 
18 import win32.w32api;
19 import win32.windef, win32.winuser;
20 import win32.wingdi; // for LPLOGFONTA
21 
22 const TCHAR[]
23     LBSELCHSTRING = "commdlg_LBSelChangedNotify",
24     SHAREVISTRING = "commdlg_ShareViolation",
25     FILEOKSTRING  = "commdlg_FileNameOK",
26     COLOROKSTRING = "commdlg_ColorOK",
27     SETRGBSTRING  = "commdlg_SetRGBColor",
28     HELPMSGSTRING = "commdlg_help",
29     FINDMSGSTRING = "commdlg_FindReplace";
30 
31 enum : UINT {
32     CDN_FIRST          = -601, // also in commctrl.h
33     CDN_LAST           = -699,
34     CDN_INITDONE       = CDN_FIRST,
35     CDN_SELCHANGE      = CDN_FIRST - 1,
36     CDN_FOLDERCHANGE   = CDN_FIRST - 2,
37     CDN_SHAREVIOLATION = CDN_FIRST - 3,
38     CDN_HELP           = CDN_FIRST - 4,
39     CDN_FILEOK         = CDN_FIRST - 5,
40     CDN_TYPECHANGE     = CDN_FIRST - 6,
41 }
42 
43 //static if (_WIN32_WINNT >= 0x500) {
44     enum : UINT {
45         CDN_INCLUDEITEM    = CDN_FIRST - 7,
46     }
47 //}
48 
49 enum : UINT {
50     CDM_FIRST           = WM_USER + 100,
51     CDM_LAST            = WM_USER + 200,
52     CDM_GETSPEC         = CDM_FIRST,
53     CDM_GETFILEPATH,
54     CDM_GETFOLDERPATH,
55     CDM_GETFOLDERIDLIST,
56     CDM_SETCONTROLTEXT,
57     CDM_HIDECONTROL,
58     CDM_SETDEFEXT    // = CDM_FIRST + 6
59 }
60 
61 // flags for ChooseColor
62 enum : DWORD {
63     CC_RGBINIT              = 0x0001,
64     CC_FULLOPEN             = 0x0002,
65     CC_PREVENTFULLOPEN      = 0x0004,
66     CC_SHOWHELP             = 0x0008,
67     CC_ENABLEHOOK           = 0x0010,
68     CC_ENABLETEMPLATE       = 0x0020,
69     CC_ENABLETEMPLATEHANDLE = 0x0040,
70     CC_SOLIDCOLOR           = 0x0080,
71     CC_ANYCOLOR             = 0x0100
72 }
73 
74 // flags for ChooseFont
75 enum : DWORD {
76     CF_SCREENFONTS          = 0x00000001,
77     CF_PRINTERFONTS         = 0x00000002,
78     CF_BOTH                 = 0x00000003,
79     CF_SHOWHELP             = 0x00000004,
80     CF_ENABLEHOOK           = 0x00000008,
81     CF_ENABLETEMPLATE       = 0x00000010,
82     CF_ENABLETEMPLATEHANDLE = 0x00000020,
83     CF_INITTOLOGFONTSTRUCT  = 0x00000040,
84     CF_USESTYLE             = 0x00000080,
85     CF_EFFECTS              = 0x00000100,
86     CF_APPLY                = 0x00000200,
87     CF_ANSIONLY             = 0x00000400,
88     CF_SCRIPTSONLY          = CF_ANSIONLY,
89     CF_NOVECTORFONTS        = 0x00000800,
90     CF_NOOEMFONTS           = 0x00000800,
91     CF_NOSIMULATIONS        = 0x00001000,
92     CF_LIMITSIZE            = 0x00002000,
93     CF_FIXEDPITCHONLY       = 0x00004000,
94     CF_WYSIWYG              = 0x00008000,
95     CF_FORCEFONTEXIST       = 0x00010000,
96     CF_SCALABLEONLY         = 0x00020000,
97     CF_TTONLY               = 0x00040000,
98     CF_NOFACESEL            = 0x00080000,
99     CF_NOSTYLESEL           = 0x00100000,
100     CF_NOSIZESEL            = 0x00200000,
101     CF_SELECTSCRIPT         = 0x00400000,
102     CF_NOSCRIPTSEL          = 0x00800000,
103     CF_NOVERTFONTS          = 0x01000000
104 }
105 
106 // Font type for ChooseFont
107 enum : WORD {
108     BOLD_FONTTYPE      = 0x0100,
109     ITALIC_FONTTYPE    = 0x0200,
110     REGULAR_FONTTYPE   = 0x0400,
111     SCREEN_FONTTYPE    = 0x2000,
112     PRINTER_FONTTYPE   = 0x4000,
113     SIMULATED_FONTTYPE = 0x8000
114 }
115 
116 enum : UINT {
117     WM_CHOOSEFONT_GETLOGFONT = WM_USER +   1,
118     WM_CHOOSEFONT_SETLOGFONT = WM_USER + 101,
119     WM_CHOOSEFONT_SETFLAGS   = WM_USER + 102
120 }
121 
122 // flags for OpenFileName
123 enum : DWORD {
124     OFN_SHAREWARN            = 0,
125     OFN_SHARENOWARN          = 0x000001,
126     OFN_READONLY             = 0x000001,
127     OFN_SHAREFALLTHROUGH     = 0x000002,
128     OFN_OVERWRITEPROMPT      = 0x000002,
129     OFN_HIDEREADONLY         = 0x000004,
130     OFN_NOCHANGEDIR          = 0x000008,
131     OFN_SHOWHELP             = 0x000010,
132     OFN_ENABLEHOOK           = 0x000020,
133     OFN_ENABLETEMPLATE       = 0x000040,
134     OFN_ENABLETEMPLATEHANDLE = 0x000080,
135     OFN_NOVALIDATE           = 0x000100,
136     OFN_ALLOWMULTISELECT     = 0x000200,
137     OFN_EXTENSIONDIFFERENT   = 0x000400,
138     OFN_PATHMUSTEXIST        = 0x000800,
139     OFN_FILEMUSTEXIST        = 0x001000,
140     OFN_CREATEPROMPT         = 0x002000,
141     OFN_SHAREAWARE           = 0x004000,
142     OFN_NOREADONLYRETURN     = 0x008000,
143     OFN_NOTESTFILECREATE     = 0x010000,
144     OFN_NONETWORKBUTTON      = 0x020000,
145     OFN_NOLONGNAMES          = 0x040000,
146     OFN_EXPLORER             = 0x080000,
147     OFN_NODEREFERENCELINKS   = 0x100000,
148     OFN_LONGNAMES            = 0x200000,
149     OFN_ENABLESIZING         = 0x800000
150 }
151 
152 enum : DWORD {
153     FR_DOWN                 = 0x00000001,
154     FR_WHOLEWORD            = 0x00000002,
155     FR_MATCHCASE            = 0x00000004,
156     FR_FINDNEXT             = 0x00000008,
157     FR_REPLACE              = 0x00000010,
158     FR_REPLACEALL           = 0x00000020,
159     FR_DIALOGTERM           = 0x00000040,
160     FR_SHOWHELP             = 0x00000080,
161     FR_ENABLEHOOK           = 0x00000100,
162     FR_ENABLETEMPLATE       = 0x00000200,
163     FR_NOUPDOWN             = 0x00000400,
164     FR_NOMATCHCASE          = 0x00000800,
165     FR_NOWHOLEWORD          = 0x00001000,
166     FR_ENABLETEMPLATEHANDLE = 0x00002000,
167     FR_HIDEUPDOWN           = 0x00004000,
168     FR_HIDEMATCHCASE        = 0x00008000,
169     FR_HIDEWHOLEWORD        = 0x00010000,
170     FR_MATCHDIAC            = 0x20000000,
171     FR_MATCHKASHIDA         = 0x40000000,
172     FR_MATCHALEFHAMZA       = 0x80000000
173 }
174 
175 enum : DWORD {
176     PD_ALLPAGES                   = 0,
177     PD_SELECTION                  = 0x000001,
178     PD_PAGENUMS                   = 0x000002,
179     PD_NOSELECTION                = 0x000004,
180     PD_NOPAGENUMS                 = 0x000008,
181     PD_COLLATE                    = 0x000010,
182     PD_PRINTTOFILE                = 0x000020,
183     PD_PRINTSETUP                 = 0x000040,
184     PD_NOWARNING                  = 0x000080,
185     PD_RETURNDC                   = 0x000100,
186     PD_RETURNIC                   = 0x000200,
187     PD_RETURNDEFAULT              = 0x000400,
188     PD_SHOWHELP                   = 0x000800,
189     PD_ENABLEPRINTHOOK            = 0x001000,
190     PD_ENABLESETUPHOOK            = 0x002000,
191     PD_ENABLEPRINTTEMPLATE        = 0x004000,
192     PD_ENABLESETUPTEMPLATE        = 0x008000,
193     PD_ENABLEPRINTTEMPLATEHANDLE  = 0x010000,
194     PD_ENABLESETUPTEMPLATEHANDLE  = 0x020000,
195     PD_USEDEVMODECOPIES           = 0x040000,
196     PD_USEDEVMODECOPIESANDCOLLATE = 0x040000,
197     PD_DISABLEPRINTTOFILE         = 0x080000,
198     PD_HIDEPRINTTOFILE            = 0x100000,
199     PD_NONETWORKBUTTON            = 0x200000
200 }
201 
202 //static if (_WIN32_WINNT >= 0x500) {
203     enum : DWORD {
204         PD_CURRENTPAGE      = 0x00400000,
205         PD_NOCURRENTPAGE    = 0x00800000,
206         PD_EXCLUSIONFLAGS   = 0x01000000,
207         PD_USELARGETEMPLATE = 0x10000000,
208     }
209 
210     enum : HRESULT {
211         PD_RESULT_CANCEL,
212         PD_RESULT_PRINT,
213         PD_RESULT_APPLY
214     }
215 
216 enum DWORD START_PAGE_GENERAL = 0xFFFFFFFF;
217 //}
218 
219 enum {
220     PSD_DEFAULTMINMARGINS             = 0,
221     PSD_INWININIINTLMEASURE           = 0,
222     PSD_MINMARGINS                    = 0x000001,
223     PSD_MARGINS                       = 0x000002,
224     PSD_INTHOUSANDTHSOFINCHES         = 0x000004,
225     PSD_INHUNDREDTHSOFMILLIMETERS     = 0x000008,
226     PSD_DISABLEMARGINS                = 0x000010,
227     PSD_DISABLEPRINTER                = 0x000020,
228     PSD_NOWARNING                     = 0x000080,
229     PSD_DISABLEORIENTATION            = 0x000100,
230     PSD_DISABLEPAPER                  = 0x000200,
231     PSD_RETURNDEFAULT                 = 0x000400,
232     PSD_SHOWHELP                      = 0x000800,
233     PSD_ENABLEPAGESETUPHOOK           = 0x002000,
234     PSD_ENABLEPAGESETUPTEMPLATE       = 0x008000,
235     PSD_ENABLEPAGESETUPTEMPLATEHANDLE = 0x020000,
236     PSD_ENABLEPAGEPAINTHOOK           = 0x040000,
237     PSD_DISABLEPAGEPAINTING           = 0x080000
238 }
239 
240 enum : UINT {
241     WM_PSD_PAGESETUPDLG = WM_USER,
242     WM_PSD_FULLPAGERECT,
243     WM_PSD_MINMARGINRECT,
244     WM_PSD_MARGINRECT,
245     WM_PSD_GREEKTEXTRECT,
246     WM_PSD_ENVSTAMPRECT,
247     WM_PSD_YAFULLPAGERECT // = WM_USER + 6
248 }
249 
250 enum : int {
251     CD_LBSELNOITEMS = -1,
252     CD_LBSELCHANGE,
253     CD_LBSELSUB,
254     CD_LBSELADD
255 }
256 
257 enum WORD DN_DEFAULTPRN = 1;
258 
259 /+
260 // Both MinGW and the windows docs indicate that there are macros for the send messages
261 // the controls. These seem to be totally unnecessary -- and at least one of MinGW or
262 // Windows Docs is buggy!
263 
264 int CommDlg_OpenSave_GetSpec()(HWND hWndControl, LPARAM lparam, WPARAM wParam) {
265     return SendMessage(hWndControl, CDM_GETSPEC, wParam, lParam);
266 }
267 
268 int CommDlg_OpenSave_GetFilePath()(HWND hWndControl, LPARAM lparam, WPARAM wParam) {
269     return SendMessage(hWndControl, CDM_GETFILEPATH, wParam, lParam);
270 }
271 
272 int CommDlg_OpenSave_GetFolderPath()(HWND hWndControl, LPARAM lparam, WPARAM wParam) {
273     return SendMessage(hWndControl, CDM_GETFOLDERPATH, wParam, lParam);
274 }
275 
276 int CommDlg_OpenSave_GetFolderIDList()(HWND hWndControl, LPARAM lparam, WPARAM wParam) {
277     return SendMessage(hWndControl, CDM_GETFOLDERIDLIST, wParam, lParam);
278 }
279 
280 void CommDlg_OpenSave_SetControlText()(HWND hWndControl, LPARAM lparam, WPARAM wParam) {
281     return SendMessage(hWndControl, CDM_SETCONTROLTEXT, wParam, lParam);
282 }
283 
284 void CommDlg_OpenSave_HideControl()(HWND hWndControl, WPARAM wParam) {
285     return SendMessage(hWndControl, CDM_HIDECONTROL, wParam, 0);
286 }
287 
288 void CommDlg_OpenSave_SetDefExt()(HWND hWndControl, TCHAR* lparam) {
289     return SendMessage(hWndControl, CDM_SETCONTROLTEXT, 0, cast(LPARAM)lParam);
290 }
291 
292 // These aliases seem even more unnecessary
293 alias CommDlg_OpenSave_GetSpec
294     CommDlg_OpenSave_GetSpecA, CommDlg_OpenSave_GetSpecW;
295 alias CommDlg_OpenSave_GetFilePath
296     CommDlg_OpenSave_GetFilePathA, CommDlg_OpenSave_GetFilePathW;
297 alias CommDlg_OpenSave_GetFolderPath
298     CommDlg_OpenSave_GetFolderPathA, CommDlg_OpenSave_GetFolderPathW;
299 +/
300 
301 // Callbacks.
302 extern(Windows) {
303 alias UINT_PTR function (HWND, UINT, WPARAM, LPARAM) nothrow
304     LPCCHOOKPROC, LPCFHOOKPROC, LPFRHOOKPROC, LPOFNHOOKPROC,
305     LPPAGEPAINTHOOK, LPPAGESETUPHOOK, LPSETUPHOOKPROC, LPPRINTHOOKPROC;
306 }
307 
308 //align (1): // 1 in Win32, default in Win64
309 
310 struct CHOOSECOLORA {
311     DWORD        lStructSize = CHOOSECOLORA.sizeof;
312     HWND         hwndOwner;
313     HWND         hInstance;
314     COLORREF     rgbResult;
315     COLORREF*    lpCustColors;
316     DWORD        Flags;
317     LPARAM       lCustData;
318     LPCCHOOKPROC lpfnHook;
319     LPCSTR       lpTemplateName;
320 }
321 alias CHOOSECOLORA* LPCHOOSECOLORA;
322 
323 struct CHOOSECOLORW {
324     DWORD        lStructSize = CHOOSECOLORW.sizeof;
325     HWND         hwndOwner;
326     HWND         hInstance;
327     COLORREF     rgbResult;
328     COLORREF*    lpCustColors;
329     DWORD        Flags;
330     LPARAM       lCustData;
331     LPCCHOOKPROC lpfnHook;
332     LPCWSTR      lpTemplateName;
333 }
334 alias CHOOSECOLORW* LPCHOOSECOLORW;
335 
336 struct CHOOSEFONTA {
337     DWORD        lStructSize = CHOOSEFONTA.sizeof;
338     HWND         hwndOwner;
339     HDC          hDC;
340     LPLOGFONTA   lpLogFont;
341     INT          iPointSize;
342     DWORD        Flags;
343     DWORD        rgbColors;
344     LPARAM       lCustData;
345     LPCFHOOKPROC lpfnHook;
346     LPCSTR       lpTemplateName;
347     HINSTANCE    hInstance;
348     LPSTR        lpszStyle;
349     WORD         nFontType;
350     WORD         ___MISSING_ALIGNMENT__;
351     INT          nSizeMin;
352     INT          nSizeMax;
353 }
354 alias CHOOSEFONTA* LPCHOOSEFONTA;
355 
356 struct CHOOSEFONTW {
357     DWORD        lStructSize = CHOOSEFONTW.sizeof;
358     HWND         hwndOwner;
359     HDC          hDC;
360     LPLOGFONTW   lpLogFont;
361     INT          iPointSize;
362     DWORD        Flags;
363     DWORD        rgbColors;
364     LPARAM       lCustData;
365     LPCFHOOKPROC lpfnHook;
366     LPCWSTR      lpTemplateName;
367     HINSTANCE    hInstance;
368     LPWSTR       lpszStyle;
369     WORD         nFontType;
370     WORD         ___MISSING_ALIGNMENT__;
371     INT          nSizeMin;
372     INT          nSizeMax;
373 }
374 alias CHOOSEFONTW* LPCHOOSEFONTW;
375 
376 struct DEVNAMES {
377     WORD wDriverOffset;
378     WORD wDeviceOffset;
379     WORD wOutputOffset;
380     WORD wDefault;
381 }
382 alias DEVNAMES* LPDEVNAMES;
383 
384 struct FINDREPLACEA {
385     DWORD        lStructSize = FINDREPLACEA.sizeof;
386     HWND         hwndOwner;
387     HINSTANCE    hInstance;
388     DWORD        Flags;
389     LPSTR        lpstrFindWhat;
390     LPSTR        lpstrReplaceWith;
391     WORD         wFindWhatLen;
392     WORD         wReplaceWithLen;
393     LPARAM       lCustData;
394     LPFRHOOKPROC lpfnHook;
395     LPCSTR       lpTemplateName;
396 }
397 alias FINDREPLACEA* LPFINDREPLACEA;
398 
399 struct FINDREPLACEW {
400     DWORD        lStructSize = FINDREPLACEW.sizeof;
401     HWND         hwndOwner;
402     HINSTANCE    hInstance;
403     DWORD        Flags;
404     LPWSTR       lpstrFindWhat;
405     LPWSTR       lpstrReplaceWith;
406     WORD         wFindWhatLen;
407     WORD         wReplaceWithLen;
408     LPARAM       lCustData;
409     LPFRHOOKPROC lpfnHook;
410     LPCWSTR      lpTemplateName;
411 }
412 alias FINDREPLACEW* LPFINDREPLACEW;
413 
414 struct OPENFILENAMEA {
415     DWORD         lStructSize = OPENFILENAMEA.sizeof;
416     HWND          hwndOwner;
417     HINSTANCE     hInstance;
418     LPCSTR        lpstrFilter;
419     LPSTR         lpstrCustomFilter;
420     DWORD         nMaxCustFilter;
421     DWORD         nFilterIndex;
422     LPSTR         lpstrFile;
423     DWORD         nMaxFile;
424     LPSTR         lpstrFileTitle;
425     DWORD         nMaxFileTitle;
426     LPCSTR        lpstrInitialDir;
427     LPCSTR        lpstrTitle;
428     DWORD         Flags;
429     WORD          nFileOffset;
430     WORD          nFileExtension;
431     LPCSTR        lpstrDefExt;
432     LPARAM        lCustData;
433     LPOFNHOOKPROC lpfnHook;
434     LPCSTR        lpTemplateName;
435 
436     //static if (_WIN32_WINNT >= 0x500) {
437         void          *pvReserved;
438         DWORD         dwReserved;
439         DWORD         FlagsEx;
440     //}
441 }
442 alias OPENFILENAMEA* LPOPENFILENAMEA;
443 
444 struct OPENFILENAMEW {
445     DWORD         lStructSize = OPENFILENAMEW.sizeof;
446     HWND          hwndOwner;
447     HINSTANCE     hInstance;
448     LPCWSTR       lpstrFilter;
449     LPWSTR        lpstrCustomFilter;
450     DWORD         nMaxCustFilter;
451     DWORD         nFilterIndex;
452     LPWSTR        lpstrFile;
453     DWORD         nMaxFile;
454     LPWSTR        lpstrFileTitle;
455     DWORD         nMaxFileTitle;
456     LPCWSTR       lpstrInitialDir;
457     LPCWSTR       lpstrTitle;
458     DWORD         Flags;
459     WORD          nFileOffset;
460     WORD          nFileExtension;
461     LPCWSTR       lpstrDefExt;
462     LPARAM        lCustData;
463     LPOFNHOOKPROC lpfnHook;
464     LPCWSTR       lpTemplateName;
465 
466     //static if (_WIN32_WINNT >= 0x500) {
467         void          *pvReserved;
468         DWORD         dwReserved;
469         DWORD         FlagsEx;
470     //}
471 }
472 alias OPENFILENAMEW* LPOPENFILENAMEW;
473 
474 enum size_t OPENFILENAME_SIZE_VERSION_400 = 76;
475 
476 struct OFNOTIFYA {
477     NMHDR           hdr;
478     LPOPENFILENAMEA lpOFN;
479     LPSTR           pszFile;
480 }
481 alias OFNOTIFYA* LPOFNOTIFYA;
482 
483 struct OFNOTIFYW {
484     NMHDR           hdr;
485     LPOPENFILENAMEW lpOFN;
486     LPWSTR          pszFile;
487 }
488 alias OFNOTIFYW* LPOFNOTIFYW;
489 
490 struct PAGESETUPDLGA {
491     DWORD           lStructSize = PAGESETUPDLGA.sizeof;
492     HWND            hwndOwner;
493     HGLOBAL         hDevMode;
494     HGLOBAL         hDevNames;
495     DWORD           Flags;
496     POINT           ptPaperSize;
497     RECT            rtMinMargin;
498     RECT            rtMargin;
499     HINSTANCE       hInstance;
500     LPARAM          lCustData;
501     LPPAGESETUPHOOK lpfnPageSetupHook;
502     LPPAGEPAINTHOOK lpfnPagePaintHook;
503     LPCSTR          lpPageSetupTemplateName;
504     HGLOBAL         hPageSetupTemplate;
505 }
506 alias PAGESETUPDLGA* LPPAGESETUPDLGA;
507 
508 struct PAGESETUPDLGW {
509     DWORD           lStructSize = PAGESETUPDLGW.sizeof;
510     HWND            hwndOwner;
511     HGLOBAL         hDevMode;
512     HGLOBAL         hDevNames;
513     DWORD           Flags;
514     POINT           ptPaperSize;
515     RECT            rtMinMargin;
516     RECT            rtMargin;
517     HINSTANCE       hInstance;
518     LPARAM          lCustData;
519     LPPAGESETUPHOOK lpfnPageSetupHook;
520     LPPAGEPAINTHOOK lpfnPagePaintHook;
521     LPCWSTR         lpPageSetupTemplateName;
522     HGLOBAL         hPageSetupTemplate;
523 }
524 alias PAGESETUPDLGW* LPPAGESETUPDLGW;
525 
526 align (1) struct PRINTDLGA {
527 align(1):
528     DWORD           lStructSize = PRINTDLGA.sizeof;
529     version (Win64)
530         DWORD       padding1;
531     HWND            hwndOwner;
532     HANDLE          hDevMode;
533     HANDLE          hDevNames;
534     HDC             hDC;
535     DWORD           Flags;
536     WORD            nFromPage;
537     WORD            nToPage;
538     WORD            nMinPage;
539     WORD            nMaxPage;
540     WORD            nCopies;
541     version (Win64)
542         WORD        padding2;
543     HINSTANCE       hInstance;
544     LPARAM          lCustData;
545     LPPRINTHOOKPROC lpfnPrintHook;
546     LPSETUPHOOKPROC lpfnSetupHook;
547     LPCSTR          lpPrintTemplateName;
548     LPCSTR          lpSetupTemplateName;
549     HANDLE          hPrintTemplate;
550     HANDLE          hSetupTemplate;
551 }
552 alias PRINTDLGA* LPPRINTDLGA;
553 
554 align (1) struct PRINTDLGW {
555 align(1):
556     DWORD           lStructSize = PRINTDLGW.sizeof;
557     version (Win64)
558         DWORD       padding1;
559     HWND            hwndOwner;
560     HANDLE          hDevMode;
561     HANDLE          hDevNames;
562     HDC             hDC;
563     DWORD           Flags;
564     WORD            nFromPage;
565     WORD            nToPage;
566     WORD            nMinPage;
567     WORD            nMaxPage;
568     WORD            nCopies;
569     version (Win64)
570         WORD        padding2;
571     HINSTANCE       hInstance;
572     LPARAM          lCustData;
573     LPPRINTHOOKPROC lpfnPrintHook;
574     LPSETUPHOOKPROC lpfnSetupHook;
575     LPCWSTR         lpPrintTemplateName;
576     LPCWSTR         lpSetupTemplateName;
577     HANDLE          hPrintTemplate;
578     HANDLE          hSetupTemplate;
579 }
580 alias PRINTDLGW* LPPRINTDLGW;
581 
582 //static if (_WIN32_WINNT >= 0x500) {
583     import win32.unknwn; // for LPUNKNOWN
584     import win32.prsht;  // for HPROPSHEETPAGE
585 
586     struct PRINTPAGERANGE {
587         DWORD  nFromPage;
588         DWORD  nToPage;
589     }
590     alias PRINTPAGERANGE* LPPRINTPAGERANGE;
591 
592     struct PRINTDLGEXA {
593         DWORD            lStructSize = PRINTDLGEXA.sizeof;
594         HWND             hwndOwner;
595         HGLOBAL          hDevMode;
596         HGLOBAL          hDevNames;
597         HDC              hDC;
598         DWORD            Flags;
599         DWORD            Flags2;
600         DWORD            ExclusionFlags;
601         DWORD            nPageRanges;
602         DWORD            nMaxPageRanges;
603         LPPRINTPAGERANGE lpPageRanges;
604         DWORD            nMinPage;
605         DWORD            nMaxPage;
606         DWORD            nCopies;
607         HINSTANCE        hInstance;
608         LPCSTR           lpPrintTemplateName;
609         LPUNKNOWN        lpCallback;
610         DWORD            nPropertyPages;
611         HPROPSHEETPAGE*  lphPropertyPages;
612         DWORD            nStartPage;
613         DWORD            dwResultAction;
614     }
615     alias PRINTDLGEXA* LPPRINTDLGEXA;
616 
617     struct PRINTDLGEXW {
618         DWORD            lStructSize = PRINTDLGEXW.sizeof;
619         HWND             hwndOwner;
620         HGLOBAL          hDevMode;
621         HGLOBAL          hDevNames;
622         HDC              hDC;
623         DWORD            Flags;
624         DWORD            Flags2;
625         DWORD            ExclusionFlags;
626         DWORD            nPageRanges;
627         DWORD            nMaxPageRanges;
628         LPPRINTPAGERANGE lpPageRanges;
629         DWORD            nMinPage;
630         DWORD            nMaxPage;
631         DWORD            nCopies;
632         HINSTANCE        hInstance;
633         LPCWSTR          lpPrintTemplateName;
634         LPUNKNOWN        lpCallback;
635         DWORD            nPropertyPages;
636         HPROPSHEETPAGE*  lphPropertyPages;
637         DWORD            nStartPage;
638         DWORD            dwResultAction;
639     }
640     alias PRINTDLGEXW* LPPRINTDLGEXW;
641 
642 //} // _WIN32_WINNT >= 0x500
643 
644 extern (Windows) nothrow @nogc {
645     BOOL ChooseColorA(LPCHOOSECOLORA);
646     BOOL ChooseColorW(LPCHOOSECOLORW);
647     BOOL ChooseFontA(LPCHOOSEFONTA);
648     BOOL ChooseFontW(LPCHOOSEFONTW);
649     DWORD CommDlgExtendedError();
650     HWND FindTextA(LPFINDREPLACEA);
651     HWND FindTextW(LPFINDREPLACEW);
652     short GetFileTitleA(LPCSTR, LPSTR, WORD);
653     short GetFileTitleW(LPCWSTR, LPWSTR, WORD);
654     BOOL GetOpenFileNameA(LPOPENFILENAMEA);
655     BOOL GetOpenFileNameW(LPOPENFILENAMEW);
656     BOOL GetSaveFileNameA(LPOPENFILENAMEA);
657     BOOL GetSaveFileNameW(LPOPENFILENAMEW);
658     BOOL PageSetupDlgA(LPPAGESETUPDLGA);
659     BOOL PageSetupDlgW(LPPAGESETUPDLGW);
660     BOOL PrintDlgA(LPPRINTDLGA);
661     BOOL PrintDlgW(LPPRINTDLGW);
662     HWND ReplaceTextA(LPFINDREPLACEA);
663     HWND ReplaceTextW(LPFINDREPLACEW);
664 
665     //static if (_WIN32_WINNT >= 0x500) {
666         HRESULT PrintDlgExA(LPPRINTDLGEXA);
667         HRESULT PrintDlgExW(LPPRINTDLGEXW);
668     //}
669 }
670 
671 version (Unicode) {
672     alias CHOOSECOLORW CHOOSECOLOR;
673     alias CHOOSEFONTW CHOOSEFONT;
674     alias FINDREPLACEW FINDREPLACE;
675     alias OPENFILENAMEW OPENFILENAME;
676     alias OFNOTIFYW OFNOTIFY;
677     alias PAGESETUPDLGW PAGESETUPDLG;
678     alias PRINTDLGW PRINTDLG;
679 
680     alias ChooseColorW ChooseColor;
681     alias ChooseFontW ChooseFont;
682     alias FindTextW FindText;
683     alias GetFileTitleW GetFileTitle;
684     alias GetOpenFileNameW GetOpenFileName;
685     alias GetSaveFileNameW GetSaveFileName;
686     alias PageSetupDlgW PageSetupDlg;
687     alias PrintDlgW PrintDlg;
688     alias ReplaceTextW ReplaceText;
689 
690     //static if (_WIN32_WINNT >= 0x500) {
691         alias PRINTDLGEXW PRINTDLGEX;
692         alias PrintDlgExW PrintDlgEx;
693     //}
694 
695 } else { // UNICODE
696 
697     alias CHOOSECOLORA CHOOSECOLOR;
698     alias CHOOSEFONTA CHOOSEFONT;
699     alias FINDREPLACEA FINDREPLACE;
700     alias OPENFILENAMEA OPENFILENAME;
701     alias OFNOTIFYA OFNOTIFY;
702     alias PAGESETUPDLGA PAGESETUPDLG;
703     alias PRINTDLGA PRINTDLG;
704 
705     alias ChooseColorA ChooseColor;
706     alias ChooseFontA ChooseFont;
707     alias FindTextA FindText;
708     alias GetFileTitleA GetFileTitle;
709     alias GetOpenFileNameA GetOpenFileName;
710     alias GetSaveFileNameA GetSaveFileName;
711     alias PageSetupDlgA PageSetupDlg;
712     alias PrintDlgA PrintDlg;
713     alias ReplaceTextA ReplaceText;
714 
715     //static if (_WIN32_WINNT >= 0x500) {
716         alias PRINTDLGEXA PRINTDLGEX;
717         alias PrintDlgExA PrintDlgEx;
718     //}
719 
720 } // UNICODE
721 
722 alias CHOOSECOLOR* LPCHOOSECOLOR;
723 alias CHOOSEFONT* LPCHOOSEFONT;
724 alias FINDREPLACE* LPFINDREPLACE;
725 alias OPENFILENAME* LPOPENFILENAME;
726 alias OFNOTIFY* LPOFNOTIFY;
727 alias PAGESETUPDLG* LPPAGESETUPDLG;
728 alias PRINTDLG* LPPRINTDLG;
729 //static if (_WIN32_WINNT >= 0x500) {
730     alias PRINTDLGEX* LPPRINTDLGEX;
731 //}