ReactOS 0.4.16-dev-122-g325d74c
wordpad.c
Go to the documentation of this file.
1/*
2 * Wordpad implementation
3 *
4 * Copyright 2004 by Krzysztof Foltman
5 * Copyright 2007-2008 by Alexander N. Sørnes <alex@thehandofagony.com>
6 * Copyright 2020 Katayama Hirofumi MZ <katayama.hirofumi.mz@gmail.com>
7 *
8 * This library is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU Lesser General Public
10 * License as published by the Free Software Foundation; either
11 * version 2.1 of the License, or (at your option) any later version.
12 *
13 * This library is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 * Lesser General Public License for more details.
17 *
18 * You should have received a copy of the GNU Lesser General Public
19 * License along with this library; if not, write to the Free Software
20 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
21 */
22
23#define WIN32_LEAN_AND_MEAN
24
25#include <stdio.h>
26#include <assert.h>
27#include <windef.h>
28#include <winbase.h>
29#include <wingdi.h>
30#include <winuser.h>
31#include <richedit.h>
32#include <commctrl.h>
33#include <commdlg.h>
34#include <shellapi.h>
35#include <shlobj.h>
36#include <wine/unicode.h>
37
38#include "wordpad.h"
39
40#ifdef NONAMELESSUNION
41# define U(x) (x).u
42# define U2(x) (x).u2
43# define U3(x) (x).u3
44#else
45# define U(x) (x)
46# define U2(x) (x)
47# define U3(x) (x)
48#endif
49
50/* use LoadString */
51static const WCHAR wszAppTitle[] = {'W','o','r','d','p','a','d',0};
52
53static const WCHAR wszMainWndClass[] = {'W','O','R','D','P','A','D','T','O','P',0};
54
55static const WCHAR stringFormat[] = {'%','2','d','\0'};
56
57const WCHAR wszPreviewWndClass[] = {'P','r','t','P','r','e','v','i','e','w',0};
59
64
66
67static DWORD wordWrap[2];
68static DWORD barState[2];
70
79
81
82typedef enum
83{
88
89typedef struct
90{
91 int endPos;
93 WCHAR findBuffer[128];
95
96/* Load string resources */
97static void DoLoadStrings(void)
98{
100 static const WCHAR files_rtf[] = {'*','.','r','t','f','\0'};
101 static const WCHAR files_txt[] = {'*','.','t','x','t','\0'};
102 static const WCHAR files_all[] = {'*','.','*','\0'};
103
105
107 p += lstrlenW(p) + 1;
108 lstrcpyW(p, files_rtf);
109 p += lstrlenW(p) + 1;
111 p += lstrlenW(p) + 1;
112 lstrcpyW(p, files_txt);
113 p += lstrlenW(p) + 1;
115 p += lstrlenW(p) + 1;
116 lstrcpyW(p, files_txt);
117 p += lstrlenW(p) + 1;
119 p += lstrlenW(p) + 1;
120 lstrcpyW(p, files_all);
121 p += lstrlenW(p) + 1;
122 *p = '\0';
123
126
129
134}
135
136/* Show a message box with resource strings */
137static int MessageBoxWithResStringW(HWND hWnd, LPCWSTR lpText, LPCWSTR lpCaption, UINT uType)
138{
140
141 params.cbSize = sizeof(params);
142 params.hwndOwner = hWnd;
143 params.hInstance = GetModuleHandleW(0);
144 params.lpszText = lpText;
145 params.lpszCaption = lpCaption;
146 params.dwStyle = uType;
147 params.lpszIcon = NULL;
148 params.dwContextHelpId = 0;
149 params.lpfnMsgBoxCallback = NULL;
150 params.dwLanguageId = 0;
152}
153
154
155static void AddButton(HWND hwndToolBar, int nImage, int nCommand)
156{
158
159 ZeroMemory(&button, sizeof(button));
160 button.iBitmap = nImage;
161 button.idCommand = nCommand;
162 button.fsState = TBSTATE_ENABLED;
163 button.fsStyle = BTNS_BUTTON;
164 button.dwData = 0;
165 button.iString = -1;
166 SendMessageW(hwndToolBar, TB_ADDBUTTONSW, 1, (LPARAM)&button);
167}
168
169static void AddSeparator(HWND hwndToolBar)
170{
172
173 ZeroMemory(&button, sizeof(button));
174 button.iBitmap = -1;
175 button.idCommand = 0;
176 button.fsState = 0;
177 button.fsStyle = BTNS_SEP;
178 button.dwData = 0;
179 button.iString = -1;
180 SendMessageW(hwndToolBar, TB_ADDBUTTONSW, 1, (LPARAM)&button);
181}
182
184{
186 DWORD read;
187
188 if(!ReadFile(hFile, buffer, cb, &read, 0))
189 return 1;
190
191 *pcb = read;
192
193 return 0;
194}
195
197{
198 DWORD written;
199 int ret;
201
202 ret = WriteFile(hFile, buffer, cb, &written, 0);
203
204 if(!ret || (cb != written))
205 return 1;
206
207 *pcb = cb;
208
209 return 0;
210}
211
213{
215
216 while(pos > path)
217 {
218 if(*pos == '\\' || *pos == '/')
219 {
220 pos++;
221 break;
222 }
223 pos--;
224 }
225 return pos;
226}
227
228static void set_caption(LPCWSTR wszNewFileName)
229{
230 static const WCHAR wszSeparator[] = {' ','-',' '};
231 WCHAR *wszCaption;
232 SIZE_T length = 0;
233
234 if(!wszNewFileName)
235 wszNewFileName = wszDefaultFileName;
236 else
237 wszNewFileName = file_basename((LPWSTR)wszNewFileName);
238
240 lstrlenW(wszNewFileName)*sizeof(WCHAR)+sizeof(wszSeparator)+sizeof(wszAppTitle));
241
242 if(!wszCaption)
243 return;
244
245 memcpy(wszCaption, wszNewFileName, lstrlenW(wszNewFileName)*sizeof(WCHAR));
246 length += lstrlenW(wszNewFileName);
247 memcpy(wszCaption + length, wszSeparator, sizeof(wszSeparator));
248 length += sizeof(wszSeparator) / sizeof(WCHAR);
249 memcpy(wszCaption + length, wszAppTitle, sizeof(wszAppTitle));
250
251 SetWindowTextW(hMainWnd, wszCaption);
252
253 HeapFree(GetProcessHeap(), 0, wszCaption);
254}
255
256static BOOL validate_endptr(LPCWSTR endptr, UNIT *punit)
257{
258 if(punit != NULL)
259 *punit = UNIT_CM;
260 if(!endptr)
261 return FALSE;
262 if(!*endptr)
263 return TRUE;
264
265 while(*endptr == ' ')
266 endptr++;
267
268 if(punit == NULL)
269 return *endptr == '\0';
270
271 if(!lstrcmpW(endptr, units_cmW))
272 {
273 *punit = UNIT_CM;
274 endptr += lstrlenW(units_cmW);
275 }
276 else if (!lstrcmpW(endptr, units_inW))
277 {
278 *punit = UNIT_INCH;
279 endptr += lstrlenW(units_inW);
280 }
281 else if (!lstrcmpW(endptr, units_inchW))
282 {
283 *punit = UNIT_INCH;
284 endptr += lstrlenW(units_inchW);
285 }
286 else if (!lstrcmpW(endptr, units_ptW))
287 {
288 *punit = UNIT_PT;
289 endptr += lstrlenW(units_ptW);
290 }
291
292 return *endptr == '\0';
293}
294
295static BOOL number_from_string(LPCWSTR string, float *num, UNIT *punit)
296{
297 double ret;
298 WCHAR *endptr;
299
300 *num = 0;
301 errno = 0;
302 ret = wcstod(string, &endptr);
303
304 if (punit != NULL)
305 *punit = UNIT_CM;
306 if((ret == 0 && errno != 0) || endptr == string || !validate_endptr(endptr, punit))
307 {
308 return FALSE;
309 } else
310 {
311 *num = (float)ret;
312 return TRUE;
313 }
314}
315
316static void set_size(float size)
317{
319
320 ZeroMemory(&fmt, sizeof(fmt));
321 fmt.cbSize = sizeof(fmt);
322 fmt.dwMask = CFM_SIZE;
323 fmt.yHeight = (int)(size * 20.0);
325}
326
327static void on_sizelist_modified(HWND hwndSizeList, LPWSTR wszNewFontSize)
328{
329 WCHAR sizeBuffer[MAX_STRING_LEN];
331
332 ZeroMemory(&format, sizeof(format));
333 format.cbSize = sizeof(format);
335
336 wsprintfW(sizeBuffer, stringFormat, format.yHeight / 20);
337 if(lstrcmpW(sizeBuffer, wszNewFontSize))
338 {
339 float size = 0;
340 if(number_from_string(wszNewFontSize, &size, NULL)
341 && size > 0)
342 {
343 set_size(size);
344 } else
345 {
346 SetWindowTextW(hwndSizeList, sizeBuffer);
349 }
350 }
351}
352
353static void add_size(HWND hSizeListWnd, unsigned size)
354{
355 WCHAR buffer[3];
356 COMBOBOXEXITEMW cbItem;
357 cbItem.mask = CBEIF_TEXT;
358 cbItem.iItem = -1;
359
361 cbItem.pszText = buffer;
362 SendMessageW(hSizeListWnd, CBEM_INSERTITEMW, 0, (LPARAM)&cbItem);
363}
364
365static void populate_size_list(HWND hSizeListWnd)
366{
367 HWND hReBarWnd = GetDlgItem(hMainWnd, IDC_REBAR);
368 HWND hFontListWnd = GetDlgItem(hReBarWnd, IDC_FONTLIST);
369 COMBOBOXEXITEMW cbFontItem;
371 HWND hListEditWnd = (HWND)SendMessageW(hSizeListWnd, CBEM_GETEDITCONTROL, 0, 0);
373 static const unsigned choices[] = {8,9,10,11,12,14,16,18,20,22,24,26,28,36,48,72};
374 WCHAR buffer[3];
375 size_t i;
377
378 ZeroMemory(&fmt, sizeof(fmt));
379 fmt.cbSize = sizeof(fmt);
381
382 cbFontItem.mask = CBEIF_LPARAM;
383 cbFontItem.iItem = SendMessageW(hFontListWnd, CB_FINDSTRINGEXACT, -1, (LPARAM)fmt.szFaceName);
384 SendMessageW(hFontListWnd, CBEM_GETITEMW, 0, (LPARAM)&cbFontItem);
385
386 fontStyle = (DWORD)LOWORD(cbFontItem.lParam);
387
388 SendMessageW(hSizeListWnd, CB_RESETCONTENT, 0, 0);
389
390 if((fontStyle & RASTER_FONTTYPE) && cbFontItem.iItem)
391 {
392 add_size(hSizeListWnd, (BYTE)MulDiv(HIWORD(cbFontItem.lParam), 72,
394 } else
395 {
396 for(i = 0; i < sizeof(choices)/sizeof(choices[0]); i++)
397 add_size(hSizeListWnd, choices[i]);
398 }
399
400 wsprintfW(buffer, stringFormat, fmt.yHeight / 20);
401 SendMessageW(hListEditWnd, WM_SETTEXT, 0, (LPARAM)buffer);
402}
403
404static void update_size_list(void)
405{
407 HWND hwndSizeList = GetDlgItem(hReBar, IDC_SIZELIST);
408 HWND hwndSizeListEdit = (HWND)SendMessageW(hwndSizeList, CBEM_GETEDITCONTROL, 0, 0);
409 WCHAR fontSize[MAX_STRING_LEN], sizeBuffer[MAX_STRING_LEN];
411
412 ZeroMemory(&fmt, sizeof(fmt));
413 fmt.cbSize = sizeof(fmt);
414
416
417 SendMessageW(hwndSizeListEdit, WM_GETTEXT, MAX_PATH, (LPARAM)fontSize);
418 wsprintfW(sizeBuffer, stringFormat, fmt.yHeight / 20);
419
420 if(lstrcmpW(fontSize, sizeBuffer))
421 SendMessageW(hwndSizeListEdit, WM_SETTEXT, 0, (LPARAM)sizeBuffer);
422}
423
424static void update_font_list(void)
425{
427 HWND hFontList = GetDlgItem(hReBar, IDC_FONTLIST);
428 HWND hFontListEdit = (HWND)SendMessageW(hFontList, CBEM_GETEDITCONTROL, 0, 0);
431
432 ZeroMemory(&fmt, sizeof(fmt));
433 fmt.cbSize = sizeof(fmt);
434
436 if (!SendMessageW(hFontListEdit, WM_GETTEXT, MAX_PATH, (LPARAM)fontName)) return;
437
438 if(lstrcmpW(fontName, fmt.szFaceName))
439 {
440 SendMessageW(hFontListEdit, WM_SETTEXT, 0, (LPARAM)fmt.szFaceName);
442 } else
443 {
445 }
446}
447
448static void clear_formatting(void)
449{
450 PARAFORMAT2 pf;
451
452 pf.cbSize = sizeof(pf);
454 pf.wAlignment = PFA_LEFT;
456}
457
459{
460 int number = 0;
461
462 if(format == SF_TEXT)
463 {
464 number = 1;
465 } else if (format == (SF_TEXT | SF_UNICODE))
466 {
467 number = 2;
468 }
469 return number;
470}
471
473{
475
476 return flags[format];
477}
478
479static void set_font(LPCWSTR wszFaceName)
480{
481 HWND hReBarWnd = GetDlgItem(hMainWnd, IDC_REBAR);
482 HWND hSizeListWnd = GetDlgItem(hReBarWnd, IDC_SIZELIST);
483 HWND hFontListWnd = GetDlgItem(hReBarWnd, IDC_FONTLIST);
484 HWND hFontListEditWnd = (HWND)SendMessageW(hFontListWnd, CBEM_GETEDITCONTROL, 0, 0);
486
487 ZeroMemory(&fmt, sizeof(fmt));
488
489 fmt.cbSize = sizeof(fmt);
490 fmt.dwMask = CFM_FACE;
491
492 lstrcpyW(fmt.szFaceName, wszFaceName);
493
495
496 populate_size_list(hSizeListWnd);
497
498 SendMessageW(hFontListEditWnd, WM_SETTEXT, 0, (LPARAM)wszFaceName);
499}
500
501static void set_default_font(void)
502{
503 static const WCHAR richTextFont[] = {'T','i','m','e','s',' ','N','e','w',' ',
504 'R','o','m','a','n',0};
505 static const WCHAR plainTextFont[] = {'C','o','u','r','i','e','r',' ','N','e','w',0};
508
509 ZeroMemory(&fmt, sizeof(fmt));
510
511 fmt.cbSize = sizeof(fmt);
513 fmt.dwEffects = 0;
514
515 if(fileFormat & SF_RTF)
516 font = richTextFont;
517 else
518 font = plainTextFont;
519
520 lstrcpyW(fmt.szFaceName, font);
521
523}
524
525static void on_fontlist_modified(LPWSTR wszNewFaceName)
526{
528 ZeroMemory(&format, sizeof(format));
529 format.cbSize = sizeof(format);
531
532 if(lstrcmpW(format.szFaceName, wszNewFaceName))
533 set_font(wszNewFaceName);
534}
535
536static void add_font(LPCWSTR fontName, DWORD fontType, HWND hListWnd, const NEWTEXTMETRICEXW *ntmc)
537{
538 COMBOBOXEXITEMW cbItem;
540 int fontHeight = 0;
541
542 cbItem.mask = CBEIF_TEXT;
543 cbItem.pszText = buffer;
544 cbItem.cchTextMax = MAX_STRING_LEN;
545 cbItem.iItem = 0;
546
547 while(SendMessageW(hListWnd, CBEM_GETITEMW, 0, (LPARAM)&cbItem))
548 {
549 if(lstrcmpiW(cbItem.pszText, fontName) <= 0)
550 cbItem.iItem++;
551 else
552 break;
553 }
554 cbItem.pszText = HeapAlloc( GetProcessHeap(), 0, (lstrlenW(fontName) + 1)*sizeof(WCHAR) );
555 lstrcpyW( cbItem.pszText, fontName );
556
557 cbItem.mask |= CBEIF_LPARAM;
558 if(fontType & RASTER_FONTTYPE)
560
561 cbItem.lParam = MAKELONG(fontType,fontHeight);
562 SendMessageW(hListWnd, CBEM_INSERTITEMW, 0, (LPARAM)&cbItem);
563 HeapFree( GetProcessHeap(), 0, cbItem.pszText );
564}
565
566static void dialog_choose_font(void)
567{
569 LOGFONTW lf;
572
573 ZeroMemory(&cf, sizeof(cf));
574 cf.lStructSize = sizeof(cf);
575 cf.hwndOwner = hMainWnd;
576 cf.lpLogFont = &lf;
578
579 ZeroMemory(&fmt, sizeof(fmt));
580 fmt.cbSize = sizeof(fmt);
581
583 lstrcpyW(cf.lpLogFont->lfFaceName, fmt.szFaceName);
584 cf.lpLogFont->lfItalic = (fmt.dwEffects & CFE_ITALIC) != 0;
585 cf.lpLogFont->lfWeight = (fmt.dwEffects & CFE_BOLD) ? FW_BOLD : FW_NORMAL;
586 cf.lpLogFont->lfUnderline = (fmt.dwEffects & CFE_UNDERLINE) != 0;
587 cf.lpLogFont->lfStrikeOut = (fmt.dwEffects & CFE_STRIKEOUT) != 0;
588 cf.lpLogFont->lfHeight = -MulDiv(fmt.yHeight / 20, GetDeviceCaps(hDC, LOGPIXELSY), 72);
589 cf.rgbColors = fmt.crTextColor;
590
591 if(ChooseFontW(&cf))
592 {
593 ZeroMemory(&fmt, sizeof(fmt));
594 fmt.cbSize = sizeof(fmt);
596 fmt.yHeight = cf.iPointSize * 2;
597
598 if(cf.nFontType & BOLD_FONTTYPE)
599 fmt.dwEffects |= CFE_BOLD;
600 if(cf.nFontType & ITALIC_FONTTYPE)
601 fmt.dwEffects |= CFE_ITALIC;
602 if(cf.lpLogFont->lfUnderline)
603 fmt.dwEffects |= CFE_UNDERLINE;
604 if(cf.lpLogFont->lfStrikeOut)
605 fmt.dwEffects |= CFE_STRIKEOUT;
606
607 fmt.crTextColor = cf.rgbColors;
608
610 set_font(cf.lpLogFont->lfFaceName);
611 }
612}
613
614
615static int CALLBACK enum_font_proc(const LOGFONTW *lpelfe, const TEXTMETRICW *lpntme,
616 DWORD FontType, LPARAM lParam)
617{
618 HWND hListWnd = (HWND) lParam;
619
620 if (lpelfe->lfFaceName[0] == '@') return 1; /* ignore vertical fonts */
621
622 if(SendMessageW(hListWnd, CB_FINDSTRINGEXACT, -1, (LPARAM)lpelfe->lfFaceName) == CB_ERR)
623 {
624
625 add_font(lpelfe->lfFaceName, FontType, hListWnd, (const NEWTEXTMETRICEXW*)lpntme);
626 }
627
628 return 1;
629}
630
631static void populate_font_list(HWND hListWnd)
632{
634 LOGFONTW fontinfo;
635 HWND hListEditWnd = (HWND)SendMessageW(hListWnd, CBEM_GETEDITCONTROL, 0, 0);
637
638 fontinfo.lfCharSet = DEFAULT_CHARSET;
639 *fontinfo.lfFaceName = '\0';
640 fontinfo.lfPitchAndFamily = 0;
641
643 (LPARAM)hListWnd, 0);
644
645 ZeroMemory(&fmt, sizeof(fmt));
646 fmt.cbSize = sizeof(fmt);
648 SendMessageW(hListEditWnd, WM_SETTEXT, 0, (LPARAM)fmt.szFaceName);
649}
650
651static void update_window(void)
652{
653 RECT rect;
654
656
658}
659
660static BOOL is_bar_visible(int bandId)
661{
662 return barState[reg_formatindex(fileFormat)] & (1 << bandId);
663}
664
665static void store_bar_state(int bandId, BOOL show)
666{
667 int formatIndex = reg_formatindex(fileFormat);
668
669 if(show)
670 barState[formatIndex] |= (1 << bandId);
671 else
672 barState[formatIndex] &= ~(1 << bandId);
673}
674
675static void set_toolbar_state(int bandId, BOOL show)
676{
677 HWND hwndReBar = GetDlgItem(hMainWnd, IDC_REBAR);
678
679 SendMessageW(hwndReBar, RB_SHOWBAND, SendMessageW(hwndReBar, RB_IDTOINDEX, bandId, 0), show);
680
681 if(bandId == BANDID_TOOLBAR)
682 {
683 REBARBANDINFOW rbbinfo;
684 int index = SendMessageW(hwndReBar, RB_IDTOINDEX, BANDID_FONTLIST, 0);
685
687 rbbinfo.fMask = RBBIM_STYLE;
688
689 SendMessageW(hwndReBar, RB_GETBANDINFOW, index, (LPARAM)&rbbinfo);
690
691 if(!show)
692 rbbinfo.fStyle &= ~RBBS_BREAK;
693 else
694 rbbinfo.fStyle |= RBBS_BREAK;
695
696 SendMessageW(hwndReBar, RB_SETBANDINFOW, index, (LPARAM)&rbbinfo);
697 }
698
699 if(bandId == BANDID_TOOLBAR || bandId == BANDID_FORMATBAR || bandId == BANDID_RULER)
700 store_bar_state(bandId, show);
701}
702
703static void set_statusbar_state(BOOL show)
704{
706
709}
710
711static void set_bar_states(void)
712{
719
721}
722
724{
727
730
732
733 SetMenu(hMainWnd, hMenu);
735
737}
738
740{
742
746}
747
749{
751
752 switch(Code)
753 {
756 break;
757
758 default:
760 }
762}
763
764static void DoOpenFile(LPCWSTR szOpenFileName)
765{
768 char fileStart[5];
769 DWORD readOut;
771
775 {
777 return;
778 }
779
780 ReadFile(hFile, fileStart, 5, &readOut, NULL);
782
783 if(readOut >= 2 && (BYTE)fileStart[0] == 0xff && (BYTE)fileStart[1] == 0xfe)
784 {
787 } else if(readOut >= 5)
788 {
789 static const char header[] = "{\\rtf";
790 static const BYTE STG_magic[] = { 0xd0,0xcf,0x11,0xe0 };
791
792 if(!memcmp(header, fileStart, 5))
793 format = SF_RTF;
794 else if (!memcmp(STG_magic, fileStart, sizeof(STG_magic)))
795 {
799 return;
800 }
801 }
802
803 es.dwCookie = (DWORD_PTR)hFile;
804 es.pfnCallback = stream_in;
805
809
811
813
814 set_caption(szOpenFileName);
815 if (szOpenFileName[0])
816 SHAddToRecentDocs(SHARD_PATHW, szOpenFileName);
817
818 lstrcpyW(wszFileName, szOpenFileName);
820 registry_set_filelist(szOpenFileName, hMainWnd);
822}
823
825{
827
828 switch(Code)
829 {
832 break;
833
834 default:
836 }
838}
839
840static BOOL DoSaveFile(LPCWSTR wszSaveFileName, WPARAM format)
841{
844 LRESULT ret;
845
846#ifdef __REACTOS__
847 /* Use OPEN_ALWAYS instead of CREATE_ALWAYS in order to succeed
848 * even if the file has HIDDEN or SYSTEM attributes */
851#else
852 hFile = CreateFileW(wszSaveFileName, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS,
854#endif
855
857 {
859 return FALSE;
860 }
861
862 if(format == (SF_TEXT | SF_UNICODE))
863 {
864 static const BYTE unicode[] = {0xff,0xfe};
865 DWORD writeOut;
866 WriteFile(hFile, &unicode, sizeof(unicode), &writeOut, 0);
867
868 if(writeOut != sizeof(unicode))
869 {
871 return FALSE;
872 }
873 }
874
875 stream.dwCookie = (DWORD_PTR)hFile;
876 stream.pfnCallback = stream_out;
877
879
880#ifdef __REACTOS__
881 /* Truncate the file and close it */
883#endif
885
887
888 if(!ret)
889 {
891 gt.flags = GTL_DEFAULT;
892 gt.codepage = 1200;
893
895 return FALSE;
896 }
897
898 lstrcpyW(wszFileName, wszSaveFileName);
900 if (wszFileName[0])
902
905
906 return TRUE;
907}
908
910{
912
913 WCHAR wszFile[MAX_PATH] = {'\0'};
914 static const WCHAR wszDefExt[] = {'r','t','f','\0'};
915
916 ZeroMemory(&sfn, sizeof(sfn));
917
918 sfn.lStructSize = sizeof(sfn);
924 sfn.lpstrDefExt = wszDefExt;
926
927 while(GetSaveFileNameW(&sfn))
928 {
930 {
933 continue;
934 }
936 }
937 return FALSE;
938}
939
941{
942 if(!wszFileName[0])
943 {
945 gt.flags = GTL_NUMCHARS;
946 gt.codepage = 1200;
948 return TRUE;
949 }
950
952 {
953 return TRUE;
954 } else
955 {
956 LPWSTR displayFileName;
957 WCHAR *text;
958 int ret;
959
960 if(!wszFileName[0])
961 displayFileName = wszDefaultFileName;
962 else
963 displayFileName = file_basename(wszFileName);
964
966 (lstrlenW(displayFileName)+lstrlenW(wszSaveChanges))*sizeof(WCHAR));
967
968 if(!text)
969 return FALSE;
970
971 wsprintfW(text, wszSaveChanges, displayFileName);
972
974
976
977 switch(ret)
978 {
979 case IDNO:
980 return TRUE;
981
982 case IDYES:
983 if(wszFileName[0])
985 return DialogSaveFile();
986
987 default:
988 return FALSE;
989 }
990 }
991}
992
993static void DialogOpenFile(void)
994{
996
997 WCHAR wszFile[MAX_PATH] = {'\0'};
998 static const WCHAR wszDefExt[] = {'r','t','f','\0'};
999
1000 ZeroMemory(&ofn, sizeof(ofn));
1001
1002 ofn.lStructSize = sizeof(ofn);
1008 ofn.lpstrDefExt = wszDefExt;
1010
1011 if(GetOpenFileNameW(&ofn))
1012 {
1015 }
1016}
1017
1018static void dialog_about(void)
1019{
1022}
1023
1025{
1026 switch(message)
1027 {
1028 case WM_INITDIALOG:
1029 {
1031 int wrap = -1;
1032 char id[4];
1034
1035 sprintf(id, "%d\n", (int)ps->lParam);
1036 SetWindowTextA(hIdWnd, id);
1037 if(wordWrap[ps->lParam] == ID_WORDWRAP_NONE)
1039 else if(wordWrap[ps->lParam] == ID_WORDWRAP_WINDOW)
1041 else if(wordWrap[ps->lParam] == ID_WORDWRAP_MARGIN)
1043
1044 if(wrap != -1)
1047
1048 if(barState[ps->lParam] & (1 << BANDID_TOOLBAR))
1050 if(barState[ps->lParam] & (1 << BANDID_FORMATBAR))
1052 if(barState[ps->lParam] & (1 << BANDID_RULER))
1054 if(barState[ps->lParam] & (1 << BANDID_STATUSBAR))
1056 }
1057 break;
1058
1059 case WM_COMMAND:
1060 switch(LOWORD(wParam))
1061 {
1062 case IDC_PAGEFMT_WN:
1063 case IDC_PAGEFMT_WW:
1064 case IDC_PAGEFMT_WM:
1066 LOWORD(wParam));
1067 break;
1068
1069 case IDC_PAGEFMT_TB:
1070 case IDC_PAGEFMT_FB:
1071 case IDC_PAGEFMT_RU:
1072 case IDC_PAGEFMT_SB:
1075 break;
1076 }
1077 break;
1078 case WM_NOTIFY:
1079 {
1081 if(header->code == PSN_APPLY)
1082 {
1084 char sid[4];
1085 int id;
1086
1087 GetWindowTextA(hIdWnd, sid, 4);
1088 id = atoi(sid);
1095
1097 barState[id] |= (1 << BANDID_TOOLBAR);
1098 else
1099 barState[id] &= ~(1 << BANDID_TOOLBAR);
1100
1102 barState[id] |= (1 << BANDID_FORMATBAR);
1103 else
1104 barState[id] &= ~(1 << BANDID_FORMATBAR);
1105
1107 barState[id] |= (1 << BANDID_RULER);
1108 else
1109 barState[id] &= ~(1 << BANDID_RULER);
1110
1112 barState[id] |= (1 << BANDID_STATUSBAR);
1113 else
1114 barState[id] &= ~(1 << BANDID_STATUSBAR);
1115 }
1116 }
1117 break;
1118 }
1119 return FALSE;
1120}
1121
1122static void dialog_viewproperties(void)
1123{
1124 PROPSHEETPAGEW psp[2];
1125 PROPSHEETHEADERW psh;
1126 size_t i;
1129
1130 psp[0].dwSize = sizeof(PROPSHEETPAGEW);
1131 psp[0].dwFlags = PSP_USETITLE;
1132 U(psp[0]).pszTemplate = MAKEINTRESOURCEW(IDD_FORMATOPTS);
1133 psp[0].pfnDlgProc = formatopts_proc;
1134 psp[0].hInstance = hInstance;
1135 psp[0].lParam = reg_formatindex(SF_TEXT);
1136 psp[0].pfnCallback = NULL;
1138 for(i = 1; i < sizeof(psp)/sizeof(psp[0]); i++)
1139 {
1140 psp[i].dwSize = psp[0].dwSize;
1141 psp[i].dwFlags = psp[0].dwFlags;
1142 U(psp[i]).pszTemplate = U(psp[0]).pszTemplate;
1143 psp[i].pfnDlgProc = psp[0].pfnDlgProc;
1144 psp[i].hInstance = psp[0].hInstance;
1146 psp[i].pfnCallback = psp[0].pfnCallback;
1148 }
1149
1150 psh.dwSize = sizeof(psh);
1152 psh.hwndParent = hMainWnd;
1153 psh.hInstance = hInstance;
1155 psh.nPages = sizeof(psp)/sizeof(psp[0]);
1156 U3(psh).ppsp = ppsp;
1157 U(psh).pszIcon = MAKEINTRESOURCEW(IDI_WORDPAD);
1158
1159 if(fileFormat & SF_RTF)
1160 U2(psh).nStartPage = 1;
1161 else
1162 U2(psh).nStartPage = 0;
1163 PropertySheetW(&psh);
1166}
1167
1169{
1171 BOOL opt_print = FALSE;
1172
1173 /* skip white space */
1174 while (*cmdline == ' ') cmdline++;
1175
1176 /* skip executable name */
1177 delimiter = (*cmdline == '"' ? '"' : ' ');
1178
1179 if (*cmdline == delimiter) cmdline++;
1180 while (*cmdline && *cmdline != delimiter) cmdline++;
1181 if (*cmdline == delimiter) cmdline++;
1182
1183 while (*cmdline)
1184 {
1185 while (isspace(*cmdline)) cmdline++;
1186
1187 if (*cmdline == '-' || *cmdline == '/')
1188 {
1189 if (!cmdline[2] || isspace(cmdline[2]))
1190 {
1191 switch (cmdline[1])
1192 {
1193 case 'P':
1194 case 'p':
1195 opt_print = TRUE;
1196 cmdline += 2;
1197 continue;
1198 }
1199 }
1200 /* a filename starting by / */
1201 }
1202 break;
1203 }
1204
1205 if (*cmdline)
1206 {
1207 /* file name is passed on the command line */
1208 if (cmdline[0] == '"')
1209 {
1210 cmdline++;
1211 cmdline[lstrlenW(cmdline) - 1] = 0;
1212 }
1215 }
1216
1217 if (opt_print)
1219}
1220
1222{
1223 if(pFr->Flags & FR_DIALOGTERM)
1224 {
1225 hFindWnd = 0;
1226 pFr->Flags = FR_FINDNEXT;
1227 return 0;
1228 }
1229
1230 if(pFr->Flags & FR_FINDNEXT || pFr->Flags & FR_REPLACE || pFr->Flags & FR_REPLACEALL)
1231 {
1232 FINDREPLACE_custom *custom_data = (FINDREPLACE_custom*)pFr->lCustData;
1233 DWORD flags;
1234 FINDTEXTEXW ft;
1235 CHARRANGE sel;
1236 LRESULT ret = -1;
1237 HMENU hMenu = GetMenu(hMainWnd);
1239
1240 mi.cbSize = sizeof(mi);
1241 mi.fMask = MIIM_DATA;
1242 mi.dwItemData = 1;
1244
1245 /* Make sure find field is saved. */
1246 if (pFr->lpstrFindWhat != custom_data->findBuffer)
1247 {
1248 lstrcpynW(custom_data->findBuffer, pFr->lpstrFindWhat,
1249 sizeof(custom_data->findBuffer) / sizeof(WCHAR));
1250 pFr->lpstrFindWhat = custom_data->findBuffer;
1251 }
1252
1253 SendMessageW(hEditorWnd, EM_GETSEL, (WPARAM)&sel.cpMin, (LPARAM)&sel.cpMax);
1254 if(custom_data->endPos == -1) {
1255 custom_data->endPos = sel.cpMin;
1256 custom_data->wrapped = FALSE;
1257 }
1258
1259 flags = FR_DOWN | (pFr->Flags & (FR_MATCHCASE | FR_WHOLEWORD));
1260 ft.lpstrText = pFr->lpstrFindWhat;
1261
1262 /* Only replace the existing selection if it is an exact match. */
1263 if (sel.cpMin != sel.cpMax &&
1264 (pFr->Flags & FR_REPLACE || pFr->Flags & FR_REPLACEALL))
1265 {
1266 ft.chrg = sel;
1268 if (ft.chrgText.cpMin == sel.cpMin && ft.chrgText.cpMax == sel.cpMax) {
1270 SendMessageW(hEditorWnd, EM_GETSEL, (WPARAM)&sel.cpMin, (LPARAM)&sel.cpMax);
1271 }
1272 }
1273
1274 /* Search from the start of the selection, but exclude the first character
1275 * from search if there is a selection. */
1276 ft.chrg.cpMin = sel.cpMin;
1277 if (sel.cpMin != sel.cpMax)
1278 ft.chrg.cpMin++;
1279
1280 /* Search to the end, then wrap around and search from the start. */
1281 if (!custom_data->wrapped) {
1282 ft.chrg.cpMax = -1;
1284 if (ret == -1) {
1285 custom_data->wrapped = TRUE;
1286 ft.chrg.cpMin = 0;
1287 }
1288 }
1289
1290 if (ret == -1) {
1291 ft.chrg.cpMax = custom_data->endPos + lstrlenW(pFr->lpstrFindWhat) - 1;
1292 if (ft.chrg.cpMax > ft.chrg.cpMin)
1294 }
1295
1296 if (ret == -1) {
1297 custom_data->endPos = -1;
1302 } else {
1303 SendMessageW(hEditorWnd, EM_SETSEL, ft.chrgText.cpMin, ft.chrgText.cpMax);
1305
1306 if (pFr->Flags & FR_REPLACEALL)
1307 return handle_findmsg(pFr);
1308 }
1309 }
1310
1311 return 0;
1312}
1313
1315{
1316 static WCHAR selBuffer[128];
1317 static WCHAR replaceBuffer[128];
1318 static FINDREPLACE_custom custom_data;
1319 static const WCHAR endl = '\r';
1320 FINDTEXTW ft;
1321
1322 /* Allow only one search/replace dialog to open */
1323 if(hFindWnd != NULL)
1324 {
1326 return;
1327 }
1328
1329 ZeroMemory(fr, sizeof(FINDREPLACEW));
1330 fr->lStructSize = sizeof(FINDREPLACEW);
1331 fr->hwndOwner = hMainWnd;
1332 fr->Flags = FR_HIDEUPDOWN;
1333 /* Find field is filled with the selected text if it is non-empty
1334 * and stays within the same paragraph, otherwise the previous
1335 * find field is used. */
1337 (LPARAM)&ft.chrg.cpMax);
1338 ft.lpstrText = &endl;
1339 if (ft.chrg.cpMin != ft.chrg.cpMax &&
1341 {
1342 /* Use a temporary buffer for the selected text so that the saved
1343 * find field is only overwritten when a find/replace is clicked. */
1344 GETTEXTEX gt = {sizeof(selBuffer), GT_SELECTION, 1200, NULL, NULL};
1345 SendMessageW(hEditorWnd, EM_GETTEXTEX, (WPARAM)&gt, (LPARAM)selBuffer);
1346 fr->lpstrFindWhat = selBuffer;
1347 } else {
1348 fr->lpstrFindWhat = custom_data.findBuffer;
1349 }
1350 fr->lpstrReplaceWith = replaceBuffer;
1351 custom_data.endPos = -1;
1352 custom_data.wrapped = FALSE;
1353 fr->lCustData = (LPARAM)&custom_data;
1354 fr->wFindWhatLen = sizeof(custom_data.findBuffer);
1355 fr->wReplaceWithLen = sizeof(replaceBuffer);
1356
1357 if(replace)
1358 hFindWnd = ReplaceTextW(fr);
1359 else
1360 hFindWnd = FindTextW(fr);
1361}
1362
1363static int units_to_twips(UNIT unit, float number)
1364{
1365 int twips = 0;
1366
1367 switch(unit)
1368 {
1369 case UNIT_CM:
1370 twips = (int)(number * 1000.0 / (float)CENTMM_PER_INCH * (float)TWIPS_PER_INCH);
1371 break;
1372
1373 case UNIT_INCH:
1374 twips = (int)(number * (float)TWIPS_PER_INCH);
1375 break;
1376
1377 case UNIT_PT:
1378 twips = (int)(number * (0.0138 * (float)TWIPS_PER_INCH));
1379 break;
1380 }
1381
1382 return twips;
1383}
1384
1386{
1387 static const WCHAR space[] = {' ', 0};
1390}
1391
1393{
1394 static const WCHAR fmt[] = {'%','.','2','f',' ','%','s','\0'};
1395 float converted = (float)number / (float)TWIPS_PER_INCH *(float)CENTMM_PER_INCH / 1000.0;
1396
1397 sprintfW(buffer, fmt, converted, units_cmW);
1398}
1399
1401{
1402 COMBOBOXEXITEMW cbItem;
1403 COMBOBOXINFO cbInfo;
1404 HWND hCombo, hList;
1405 int idx, result;
1406
1407 hCombo = (HWND)SendMessageW(hComboEx, CBEM_GETCOMBOCONTROL, 0, 0);
1408 if (!hCombo)
1409 return FALSE;
1410 cbInfo.cbSize = sizeof(COMBOBOXINFO);
1411 result = SendMessageW(hCombo, CB_GETCOMBOBOXINFO, 0, (LPARAM)&cbInfo);
1412 if (!result)
1413 return FALSE;
1414 hList = cbInfo.hwndList;
1416 if (idx < 0)
1417 return FALSE;
1418
1419 ZeroMemory(&cbItem, sizeof(cbItem));
1420 cbItem.mask = CBEIF_TEXT;
1421 cbItem.iItem = idx;
1422 cbItem.pszText = wszBuffer;
1423 cbItem.cchTextMax = bufferLength-1;
1424 result = SendMessageW(hComboEx, CBEM_GETITEMW, 0, (LPARAM)&cbItem);
1425
1426 return result != 0;
1427}
1428
1430{
1431 switch(message)
1432 {
1433 case WM_INITDIALOG:
1434 {
1436 SYSTEMTIME st;
1437 HWND hListWnd = GetDlgItem(hWnd, IDC_DATETIME);
1438 GetLocalTime(&st);
1439
1442 SendMessageW(hListWnd, LB_ADDSTRING, 0, (LPARAM)&buffer);
1445 SendMessageW(hListWnd, LB_ADDSTRING, 0, (LPARAM)&buffer);
1447 SendMessageW(hListWnd, LB_ADDSTRING, 0, (LPARAM)&buffer);
1448
1449 SendMessageW(hListWnd, LB_SETSEL, TRUE, 0);
1450 }
1451 break;
1452
1453 case WM_COMMAND:
1454 switch(LOWORD(wParam))
1455 {
1456 case IDC_DATETIME:
1457 if (HIWORD(wParam) != LBN_DBLCLK)
1458 break;
1459 /* Fall through */
1460
1461 case IDOK:
1462 {
1463 LRESULT index;
1464 HWND hListWnd = GetDlgItem(hWnd, IDC_DATETIME);
1465
1466 index = SendMessageW(hListWnd, LB_GETCURSEL, 0, 0);
1467
1468 if(index != LB_ERR)
1469 {
1471 SendMessageW(hListWnd, LB_GETTEXT, index, (LPARAM)&buffer);
1473 }
1474 }
1475 /* Fall through */
1476
1477 case IDCANCEL:
1479 return TRUE;
1480 }
1481 }
1482 return FALSE;
1483}
1484
1486{
1487 switch(message)
1488 {
1489 case WM_INITDIALOG:
1490 {
1493 HWND hListWnd = GetDlgItem(hWnd, IDC_NEWFILE);
1494
1496 SendMessageW(hListWnd, LB_ADDSTRING, 0, (LPARAM)&buffer);
1498 SendMessageW(hListWnd, LB_ADDSTRING, 0, (LPARAM)&buffer);
1500 SendMessageW(hListWnd, LB_ADDSTRING, 0, (LPARAM)&buffer);
1501
1502 SendMessageW(hListWnd, LB_SETSEL, TRUE, 0);
1503 }
1504 break;
1505
1506 case WM_COMMAND:
1507 switch(LOWORD(wParam))
1508 {
1509 case IDOK:
1510 {
1511 LRESULT index;
1512 HWND hListWnd = GetDlgItem(hWnd, IDC_NEWFILE);
1513 index = SendMessageW(hListWnd, LB_GETCURSEL, 0, 0);
1514
1515 if(index != LB_ERR)
1517 }
1518 return TRUE;
1519
1520 case IDCANCEL:
1522 return TRUE;
1523 }
1524 }
1525 return FALSE;
1526}
1527
1529{
1530 static const WORD ALIGNMENT_VALUES[] = {PFA_LEFT, PFA_RIGHT, PFA_CENTER};
1531
1532 switch(message)
1533 {
1534 case WM_INITDIALOG:
1535 {
1538 HWND hListWnd = GetDlgItem(hWnd, IDC_PARA_ALIGN);
1539 HWND hLeftWnd = GetDlgItem(hWnd, IDC_PARA_LEFT);
1540 HWND hRightWnd = GetDlgItem(hWnd, IDC_PARA_RIGHT);
1541 HWND hFirstWnd = GetDlgItem(hWnd, IDC_PARA_FIRST);
1542 PARAFORMAT2 pf;
1543 int index = 0;
1544
1547 SendMessageW(hListWnd, CB_ADDSTRING, 0, (LPARAM)buffer);
1550 SendMessageW(hListWnd, CB_ADDSTRING, 0, (LPARAM)buffer);
1553 SendMessageW(hListWnd, CB_ADDSTRING, 0, (LPARAM)buffer);
1554
1555 pf.cbSize = sizeof(pf);
1559
1560 if(pf.wAlignment == PFA_RIGHT)
1561 index ++;
1562 else if(pf.wAlignment == PFA_CENTER)
1563 index += 2;
1564
1565 SendMessageW(hListWnd, CB_SETCURSEL, index, 0);
1566
1568 SetWindowTextW(hLeftWnd, buffer);
1570 SetWindowTextW(hRightWnd, buffer);
1572 SetWindowTextW(hFirstWnd, buffer);
1573 }
1574 break;
1575
1576 case WM_COMMAND:
1577 switch(LOWORD(wParam))
1578 {
1579 case IDOK:
1580 {
1581 HWND hListWnd = GetDlgItem(hWnd, IDC_PARA_ALIGN);
1582 HWND hLeftWnd = GetDlgItem(hWnd, IDC_PARA_LEFT);
1583 HWND hRightWnd = GetDlgItem(hWnd, IDC_PARA_RIGHT);
1584 HWND hFirstWnd = GetDlgItem(hWnd, IDC_PARA_FIRST);
1586 int index;
1587 float num;
1588 int ret = 0;
1589 PARAFORMAT pf;
1590 UNIT unit;
1591
1592 index = SendMessageW(hListWnd, CB_GETCURSEL, 0, 0);
1593 pf.wAlignment = ALIGNMENT_VALUES[index];
1594
1597 ret++;
1601 ret++;
1605 ret++;
1607
1608 if(ret != 3)
1609 {
1612 return FALSE;
1613 } else
1614 {
1615 if (pf.dxOffset + pf.dxStartIndent < 0
1616 && pf.dxStartIndent < 0)
1617 {
1618 /* The first line is before the left edge, so
1619 * make sure it is at the left edge. */
1620 pf.dxOffset = -pf.dxStartIndent;
1621 } else if (pf.dxOffset < 0) {
1622 /* The second and following lines are before
1623 * the left edge, so set it to be at the left
1624 * edge, and adjust the first line since it
1625 * is relative to it. */
1626 pf.dxStartIndent = max(pf.dxStartIndent + pf.dxOffset, 0);
1627 pf.dxOffset = 0;
1628 }
1629 /* Internally the dxStartIndent is the absolute
1630 * offset for the first line and dxOffset is
1631 * to it value as opposed how it is displayed with
1632 * the first line being the relative value.
1633 * These two lines make the adjustments. */
1635 pf.dxOffset = pf.dxOffset - pf.dxStartIndent;
1636
1637 pf.cbSize = sizeof(pf);
1641 }
1642 }
1643 /* Fall through */
1644
1645 case IDCANCEL:
1647 return TRUE;
1648 }
1649 }
1650 return FALSE;
1651}
1652
1654{
1655 switch(message)
1656 {
1657 case WM_INITDIALOG:
1658 {
1660 PARAFORMAT pf;
1662 int i;
1663
1664 pf.cbSize = sizeof(pf);
1665 pf.dwMask = PFM_TABSTOPS;
1668
1669 for(i = 0; i < pf.cTabCount; i++)
1670 {
1673 }
1675 }
1676 break;
1677
1678 case WM_COMMAND:
1679 switch(LOWORD(wParam))
1680 {
1681 case IDC_TABSTOPS:
1682 {
1684 HWND hAddWnd = GetDlgItem(hWnd, ID_TAB_ADD);
1685 HWND hDelWnd = GetDlgItem(hWnd, ID_TAB_DEL);
1686 HWND hEmptyWnd = GetDlgItem(hWnd, ID_TAB_EMPTY);
1687
1689 EnableWindow(hAddWnd, TRUE);
1690 else
1691 EnableWindow(hAddWnd, FALSE);
1692
1693 if(SendMessageW(hTabWnd, CB_GETCOUNT, 0, 0))
1694 {
1695 EnableWindow(hEmptyWnd, TRUE);
1696
1698 EnableWindow(hDelWnd, FALSE);
1699 else
1700 EnableWindow(hDelWnd, TRUE);
1701 } else
1702 {
1703 EnableWindow(hEmptyWnd, FALSE);
1704 }
1705 }
1706 break;
1707
1708 case ID_TAB_ADD:
1709 {
1712 UNIT unit;
1713
1716
1718 {
1719 float number = 0;
1720 int item_count = SendMessageW(hTabWnd, CB_GETCOUNT, 0, 0);
1721
1723 {
1726 } else if (item_count >= MAX_TAB_STOPS) {
1729 } else {
1730 int i;
1731 float next_number = -1;
1732 int next_number_in_twips = -1;
1733 int insert_number = units_to_twips(unit, number);
1734
1735 /* linear search for position to insert the string */
1736 for(i = 0; i < item_count; i++)
1737 {
1739 number_from_string(buffer, &next_number, &unit);
1740 next_number_in_twips = units_to_twips(unit, next_number);
1741 if (insert_number <= next_number_in_twips)
1742 break;
1743 }
1744 if (insert_number != next_number_in_twips)
1745 {
1746 number_with_units(buffer, insert_number);
1749 }
1750 }
1751 }
1753 }
1754 break;
1755
1756 case ID_TAB_DEL:
1757 {
1759 LRESULT ret;
1761 if(ret != CB_ERR)
1763 }
1764 break;
1765
1766 case ID_TAB_EMPTY:
1767 {
1771 }
1772 break;
1773
1774 case IDOK:
1775 {
1777 int i;
1779 PARAFORMAT pf;
1780 float number;
1781 UNIT unit;
1782
1783 pf.cbSize = sizeof(pf);
1784 pf.dwMask = PFM_TABSTOPS;
1785
1786 for(i = 0; SendMessageW(hTabWnd, CB_GETLBTEXT, i,
1787 (LPARAM)&buffer) != CB_ERR &&
1788 i < MAX_TAB_STOPS; i++)
1789 {
1792 }
1793 pf.cTabCount = i;
1795 }
1796 /* Fall through */
1797 case IDCANCEL:
1799 return TRUE;
1800 }
1801 }
1802 return FALSE;
1803}
1804
1806{
1807 HWND hToolBarWnd, hFormatBarWnd, hReBarWnd, hFontListWnd, hSizeListWnd, hRulerWnd;
1809 HANDLE hDLL;
1811 int nStdBitmaps = 0;
1812 REBARINFO rbi;
1813 REBARBANDINFOW rbb;
1814 static const WCHAR wszRichEditDll[] = {'R','I','C','H','E','D','2','0','.','D','L','L','\0'};
1815 static const WCHAR wszRichEditText[] = {'R','i','c','h','E','d','i','t',' ','t','e','x','t','\0'};
1816
1818
1822
1823 rbi.cbSize = sizeof(rbi);
1824 rbi.fMask = 0;
1825 rbi.himl = NULL;
1826 if(!SendMessageW(hReBarWnd, RB_SETBARINFO, 0, (LPARAM)&rbi))
1827 return -1;
1828
1832 NULL, 0,
1833 24, 24, 16, 16, sizeof(TBBUTTON));
1834
1835 ab.hInst = HINST_COMMCTRL;
1836 ab.nID = IDB_STD_SMALL_COLOR;
1837 nStdBitmaps = SendMessageW(hToolBarWnd, TB_ADDBITMAP, 0, (LPARAM)&ab);
1838
1839 AddButton(hToolBarWnd, nStdBitmaps+STD_FILENEW, ID_FILE_NEW);
1840 AddButton(hToolBarWnd, nStdBitmaps+STD_FILEOPEN, ID_FILE_OPEN);
1841 AddButton(hToolBarWnd, nStdBitmaps+STD_FILESAVE, ID_FILE_SAVE);
1842 AddSeparator(hToolBarWnd);
1843 AddButton(hToolBarWnd, nStdBitmaps+STD_PRINT, ID_PRINT_QUICK);
1844 AddButton(hToolBarWnd, nStdBitmaps+STD_PRINTPRE, ID_PREVIEW);
1845 AddSeparator(hToolBarWnd);
1846 AddButton(hToolBarWnd, nStdBitmaps+STD_FIND, ID_FIND);
1847 AddSeparator(hToolBarWnd);
1848 AddButton(hToolBarWnd, nStdBitmaps+STD_CUT, ID_EDIT_CUT);
1849 AddButton(hToolBarWnd, nStdBitmaps+STD_COPY, ID_EDIT_COPY);
1850 AddButton(hToolBarWnd, nStdBitmaps+STD_PASTE, ID_EDIT_PASTE);
1851 AddButton(hToolBarWnd, nStdBitmaps+STD_UNDO, ID_EDIT_UNDO);
1852 AddButton(hToolBarWnd, nStdBitmaps+STD_REDOW, ID_EDIT_REDO);
1853 AddSeparator(hToolBarWnd);
1854 AddButton(hToolBarWnd, 0, ID_DATETIME);
1855
1856 SendMessageW(hToolBarWnd, TB_AUTOSIZE, 0, 0);
1857
1861 rbb.cx = 0;
1862 rbb.hwndChild = hToolBarWnd;
1863 rbb.cxMinChild = 0;
1864 rbb.cyChild = rbb.cyMinChild = HIWORD(SendMessageW(hToolBarWnd, TB_GETBUTTONSIZE, 0, 0));
1865 rbb.wID = BANDID_TOOLBAR;
1866
1867 SendMessageW(hReBarWnd, RB_INSERTBANDW, -1, (LPARAM)&rbb);
1868
1869 hFontListWnd = CreateWindowExW(0, WC_COMBOBOXEXW, NULL,
1871 0, 0, 200, 150, hReBarWnd, (HMENU)IDC_FONTLIST, hInstance, NULL);
1872
1873 rbb.hwndChild = hFontListWnd;
1874 rbb.cx = 200;
1875 rbb.wID = BANDID_FONTLIST;
1876
1877 SendMessageW(hReBarWnd, RB_INSERTBANDW, -1, (LPARAM)&rbb);
1878
1879 hSizeListWnd = CreateWindowExW(0, WC_COMBOBOXEXW, NULL,
1881 0, 0, 50, 150, hReBarWnd, (HMENU)IDC_SIZELIST, hInstance, NULL);
1882
1883 rbb.hwndChild = hSizeListWnd;
1884 rbb.cx = 50;
1885 rbb.fStyle ^= RBBS_BREAK;
1886 rbb.wID = BANDID_SIZELIST;
1887
1888 SendMessageW(hReBarWnd, RB_INSERTBANDW, -1, (LPARAM)&rbb);
1889
1890 hFormatBarWnd = CreateToolbarEx(hReBarWnd,
1892 IDC_FORMATBAR, 8, hInstance, IDB_FORMATBAR, NULL, 0, 16, 16, 16, 16, sizeof(TBBUTTON));
1893
1894 AddButton(hFormatBarWnd, 0, ID_FORMAT_BOLD);
1895 AddButton(hFormatBarWnd, 1, ID_FORMAT_ITALIC);
1896 AddButton(hFormatBarWnd, 2, ID_FORMAT_UNDERLINE);
1897 AddButton(hFormatBarWnd, 3, ID_FORMAT_COLOR);
1898 AddSeparator(hFormatBarWnd);
1899 AddButton(hFormatBarWnd, 4, ID_ALIGN_LEFT);
1900 AddButton(hFormatBarWnd, 5, ID_ALIGN_CENTER);
1901 AddButton(hFormatBarWnd, 6, ID_ALIGN_RIGHT);
1902 AddSeparator(hFormatBarWnd);
1903 AddButton(hFormatBarWnd, 7, ID_BULLET);
1904
1905 SendMessageW(hFormatBarWnd, TB_AUTOSIZE, 0, 0);
1906
1907 rbb.hwndChild = hFormatBarWnd;
1908 rbb.wID = BANDID_FORMATBAR;
1909
1910 SendMessageW(hReBarWnd, RB_INSERTBANDW, -1, (LPARAM)&rbb);
1911
1913 0, 0, 200, 10, hReBarWnd, (HMENU)IDC_RULER, hInstance, NULL);
1914
1915
1916 rbb.hwndChild = hRulerWnd;
1917 rbb.wID = BANDID_RULER;
1918 rbb.fStyle |= RBBS_BREAK;
1919
1920 SendMessageW(hReBarWnd, RB_INSERTBANDW, -1, (LPARAM)&rbb);
1921
1922 hDLL = LoadLibraryW(wszRichEditDll);
1923 if(!hDLL)
1924 {
1927 PostQuitMessage(1);
1928 }
1929
1933 0, 0, 1000, 100, hWnd, (HMENU)IDC_EDITOR, hInstance, NULL);
1934
1935 if (!hEditorWnd)
1936 {
1937 fprintf(stderr, "Error code %u\n", GetLastError());
1938 return -1;
1939 }
1941
1945
1947
1948 populate_font_list(hFontListWnd);
1949 populate_size_list(hSizeListWnd);
1950 DoLoadStrings();
1952
1954
1959
1960 return 0;
1961}
1962
1964{
1965 HWND hwndEditor = GetDlgItem(hWnd, IDC_EDITOR);
1966 HWND hwndReBar = GetDlgItem(hWnd, IDC_REBAR);
1967 HWND hwndToolBar = GetDlgItem(hwndReBar, IDC_TOOLBAR);
1968 HWND hwndFormatBar = GetDlgItem(hwndReBar, IDC_FORMATBAR);
1969 int from, to;
1971 PARAFORMAT2 pf;
1972 GETTEXTLENGTHEX gt;
1973
1974 ZeroMemory(&fmt, sizeof(fmt));
1975 fmt.cbSize = sizeof(fmt);
1976
1977 ZeroMemory(&pf, sizeof(pf));
1978 pf.cbSize = sizeof(pf);
1979
1980 gt.flags = GTL_NUMCHARS;
1981 gt.codepage = 1200;
1982
1983 SendMessageW(hwndToolBar, TB_ENABLEBUTTON, ID_FIND,
1984 SendMessageW(hwndEditor, EM_GETTEXTLENGTHEX, (WPARAM)&gt, 0) ? 1 : 0);
1985
1986 SendMessageW(hwndEditor, EM_GETCHARFORMAT, TRUE, (LPARAM)&fmt);
1987
1988 SendMessageW(hwndEditor, EM_GETSEL, (WPARAM)&from, (LPARAM)&to);
1990 SendMessageW(hwndEditor, EM_CANUNDO, 0, 0));
1992 SendMessageW(hwndEditor, EM_CANREDO, 0, 0));
1993 SendMessageW(hwndToolBar, TB_ENABLEBUTTON, ID_EDIT_CUT, from == to ? 0 : 1);
1994 SendMessageW(hwndToolBar, TB_ENABLEBUTTON, ID_EDIT_COPY, from == to ? 0 : 1);
1995
1996 SendMessageW(hwndFormatBar, TB_CHECKBUTTON, ID_FORMAT_BOLD, (fmt.dwMask & CFM_BOLD) &&
1997 (fmt.dwEffects & CFE_BOLD));
1998 SendMessageW(hwndFormatBar, TB_INDETERMINATE, ID_FORMAT_BOLD, !(fmt.dwMask & CFM_BOLD));
1999 SendMessageW(hwndFormatBar, TB_CHECKBUTTON, ID_FORMAT_ITALIC, (fmt.dwMask & CFM_ITALIC) &&
2000 (fmt.dwEffects & CFE_ITALIC));
2001 SendMessageW(hwndFormatBar, TB_INDETERMINATE, ID_FORMAT_ITALIC, !(fmt.dwMask & CFM_ITALIC));
2002 SendMessageW(hwndFormatBar, TB_CHECKBUTTON, ID_FORMAT_UNDERLINE, (fmt.dwMask & CFM_UNDERLINE) &&
2003 (fmt.dwEffects & CFE_UNDERLINE));
2005
2006 SendMessageW(hwndEditor, EM_GETPARAFORMAT, 0, (LPARAM)&pf);
2010
2012 return 0;
2013}
2014
2016{
2017 HWND hwndEditor = GetDlgItem(hWnd, IDC_EDITOR);
2018 HWND hwndReBar = GetDlgItem(hWnd, IDC_REBAR);
2019 NMHDR *pHdr = (NMHDR *)lParam;
2020 HWND hwndFontList = GetDlgItem(hwndReBar, IDC_FONTLIST);
2021 HWND hwndSizeList = GetDlgItem(hwndReBar, IDC_SIZELIST);
2022
2023 if (pHdr->hwndFrom == hwndFontList || pHdr->hwndFrom == hwndSizeList)
2024 {
2025 if (pHdr->code == CBEN_ENDEDITW)
2026 {
2027 NMCBEENDEDITW *endEdit = (NMCBEENDEDITW *)lParam;
2028 if(pHdr->hwndFrom == hwndFontList)
2029 {
2030 on_fontlist_modified(endEdit->szText);
2031 } else if (pHdr->hwndFrom == hwndSizeList)
2032 {
2033 on_sizelist_modified(hwndSizeList,endEdit->szText);
2034 }
2035 }
2036 return 0;
2037 }
2038
2039 if (pHdr->hwndFrom != hwndEditor)
2040 return 0;
2041
2042 if (pHdr->code == EN_SELCHANGE)
2043 {
2044 SELCHANGE *pSC = (SELCHANGE *)lParam;
2045 char buf[128];
2046
2048
2049 sprintf( buf,"selection = %d..%d, line count=%ld",
2050 pSC->chrg.cpMin, pSC->chrg.cpMax,
2051 SendMessageW(hwndEditor, EM_GETLINECOUNT, 0, 0));
2053 SendMessageW(hWnd, WM_USER, 0, 0);
2054 return 1;
2055 }
2056 return 0;
2057}
2058
2059/* Copied from dlls/comdlg32/fontdlg.c */
2060static const COLORREF textcolors[]=
2061{
2062 0x00000000L,0x00000080L,0x00008000L,0x00008080L,
2063 0x00800000L,0x00800080L,0x00808000L,0x00808080L,
2064 0x00c0c0c0L,0x000000ffL,0x0000ff00L,0x0000ffffL,
2065 0x00ff0000L,0x00ff00ffL,0x00ffff00L,0x00FFFFFFL
2066};
2067
2069{
2070 HWND hwndEditor = GetDlgItem(hWnd, IDC_EDITOR);
2071 static FINDREPLACEW findreplace;
2072
2073 if ((HWND)lParam == hwndEditor)
2074 return 0;
2075
2076 switch(LOWORD(wParam))
2077 {
2078
2079 case ID_FILE_EXIT:
2080 PostMessageW(hWnd, WM_CLOSE, 0, 0);
2081 break;
2082
2083 case ID_FILE_NEW:
2084 {
2087
2088 if(ret != ID_NEWFILE_ABORT)
2089 {
2091 {
2092 SETTEXTEX st;
2093
2095 wszFileName[0] = '\0';
2096
2098
2099 st.flags = ST_DEFAULT;
2100 st.codepage = 1200;
2102
2106 }
2107 }
2108 }
2109 break;
2110
2111 case ID_FILE_OPEN:
2113 break;
2114
2115 case ID_FILE_SAVE:
2116 if(wszFileName[0])
2117 {
2119 break;
2120 }
2121 /* Fall through */
2122
2123 case ID_FILE_SAVEAS:
2125 break;
2126
2127 case ID_FILE_RECENT1:
2128 case ID_FILE_RECENT2:
2129 case ID_FILE_RECENT3:
2130 case ID_FILE_RECENT4:
2131 {
2132 HMENU hMenu = GetMenu(hWnd);
2134
2135 mi.cbSize = sizeof(MENUITEMINFOW);
2136 mi.fMask = MIIM_DATA;
2137 if(GetMenuItemInfoW(hMenu, LOWORD(wParam), FALSE, &mi))
2138 DoOpenFile((LPWSTR)mi.dwItemData);
2139 }
2140 break;
2141
2142 case ID_FIND:
2143 dialog_find(&findreplace, FALSE);
2144 break;
2145
2146 case ID_FIND_NEXT:
2147 handle_findmsg(&findreplace);
2148 break;
2149
2150 case ID_REPLACE:
2151 dialog_find(&findreplace, TRUE);
2152 break;
2153
2154 case ID_FONTSETTINGS:
2156 break;
2157
2158 case ID_PRINT:
2161 break;
2162
2163 case ID_PRINT_QUICK:
2166 break;
2167
2168 case ID_PREVIEW:
2169 {
2171 DWORD tmp = barState[index];
2174 barState[index] = tmp;
2176
2178
2179 SetMenu(hWnd, NULL);
2180 InvalidateRect(0, 0, TRUE);
2181 }
2182 break;
2183
2184 case ID_PRINTSETUP:
2187 break;
2188
2189 case ID_FORMAT_BOLD:
2190 case ID_FORMAT_ITALIC:
2192 {
2194 int effects = CFE_BOLD;
2195
2196 ZeroMemory(&fmt, sizeof(fmt));
2197 fmt.cbSize = sizeof(fmt);
2199
2200 fmt.dwMask = CFM_BOLD;
2201
2203 {
2204 effects = CFE_ITALIC;
2205 fmt.dwMask = CFM_ITALIC;
2206 } else if (LOWORD(wParam) == ID_FORMAT_UNDERLINE)
2207 {
2208 effects = CFE_UNDERLINE;
2209 fmt.dwMask = CFM_UNDERLINE;
2210 }
2211
2212 fmt.dwEffects ^= effects;
2213
2215 break;
2216 }
2217
2218 case ID_FORMAT_COLOR:
2219 {
2220 HWND hReBarWnd = GetDlgItem(hWnd, IDC_REBAR);
2221 HWND hFormatBarWnd = GetDlgItem(hReBarWnd, IDC_FORMATBAR);
2222 HMENU hPop;
2223 RECT itemrc;
2224 POINT pt;
2225 int mid;
2226 int itemidx = SendMessageW(hFormatBarWnd, TB_COMMANDTOINDEX, ID_FORMAT_COLOR, 0);
2227
2228 SendMessageW(hFormatBarWnd, TB_GETITEMRECT, itemidx, (LPARAM)&itemrc);
2229 pt.x = itemrc.left;
2230 pt.y = itemrc.bottom;
2231 ClientToScreen(hFormatBarWnd, &pt);
2232 hPop = GetSubMenu(hColorPopupMenu, 0);
2235 pt.x, pt.y, 0, hWnd, 0);
2236 if (mid >= ID_COLOR_FIRST && mid <= ID_COLOR_AUTOMATIC)
2237 {
2239
2240 ZeroMemory(&fmt, sizeof(fmt));
2241 fmt.cbSize = sizeof(fmt);
2243
2244 fmt.dwMask = CFM_COLOR;
2245
2246 if (mid < ID_COLOR_AUTOMATIC) {
2247 fmt.crTextColor = textcolors[mid - ID_COLOR_FIRST];
2248 fmt.dwEffects &= ~CFE_AUTOCOLOR;
2249 } else {
2250 fmt.dwEffects |= CFE_AUTOCOLOR;
2251 }
2252
2254 }
2255 break;
2256 }
2257
2258 case ID_EDIT_CUT:
2259 PostMessageW(hwndEditor, WM_CUT, 0, 0);
2260 break;
2261
2262 case ID_EDIT_COPY:
2263 PostMessageW(hwndEditor, WM_COPY, 0, 0);
2264 break;
2265
2266 case ID_EDIT_PASTE:
2267 PostMessageW(hwndEditor, WM_PASTE, 0, 0);
2268 break;
2269
2270 case ID_EDIT_CLEAR:
2271 PostMessageW(hwndEditor, WM_CLEAR, 0, 0);
2272 break;
2273
2274 case ID_EDIT_SELECTALL:
2275 {
2276 CHARRANGE range = {0, -1};
2277 SendMessageW(hwndEditor, EM_EXSETSEL, 0, (LPARAM)&range);
2278 /* SendMessage(hwndEditor, EM_SETSEL, 0, -1); */
2279 return 0;
2280 }
2281
2282 case ID_EDIT_GETTEXT:
2283 {
2284 int nLen = GetWindowTextLengthW(hwndEditor);
2285 LPWSTR data = HeapAlloc( GetProcessHeap(), 0, (nLen+1)*sizeof(WCHAR) );
2286 TEXTRANGEW tr;
2287
2288 GetWindowTextW(hwndEditor, data, nLen+1);
2290
2292 data = HeapAlloc(GetProcessHeap(), 0, (nLen+1)*sizeof(WCHAR));
2293 tr.chrg.cpMin = 0;
2294 tr.chrg.cpMax = nLen;
2295 tr.lpstrText = data;
2296 SendMessageW(hwndEditor, EM_GETTEXTRANGE, 0, (LPARAM)&tr);
2298 HeapFree( GetProcessHeap(), 0, data );
2299
2300 /* SendMessage(hwndEditor, EM_SETSEL, 0, -1); */
2301 return 0;
2302 }
2303
2304 case ID_EDIT_CHARFORMAT:
2306 {
2308
2309 ZeroMemory(&cf, sizeof(cf));
2310 cf.cbSize = sizeof(cf);
2311 cf.dwMask = 0;
2312 SendMessageW(hwndEditor, EM_GETCHARFORMAT,
2314 return 0;
2315 }
2316
2317 case ID_EDIT_PARAFORMAT:
2318 {
2319 PARAFORMAT2 pf;
2320 ZeroMemory(&pf, sizeof(pf));
2321 pf.cbSize = sizeof(pf);
2322 SendMessageW(hwndEditor, EM_GETPARAFORMAT, 0, (LPARAM)&pf);
2323 return 0;
2324 }
2325
2327 {
2328 CHARRANGE range = {0, -1};
2329 char buf[128];
2330 WCHAR *data = NULL;
2331
2332 SendMessageW(hwndEditor, EM_EXGETSEL, 0, (LPARAM)&range);
2333 data = HeapAlloc(GetProcessHeap(), 0, sizeof(*data) * (range.cpMax-range.cpMin+1));
2334 SendMessageW(hwndEditor, EM_GETSELTEXT, 0, (LPARAM)data);
2335 sprintf(buf, "Start = %d, End = %d", range.cpMin, range.cpMax);
2336 MessageBoxA(hWnd, buf, "Editor", MB_OK);
2339 /* SendMessage(hwndEditor, EM_SETSEL, 0, -1); */
2340 return 0;
2341 }
2342
2343 case ID_EDIT_READONLY:
2344 {
2345 LONG nStyle = GetWindowLongW(hwndEditor, GWL_STYLE);
2346 if (nStyle & ES_READONLY)
2347 SendMessageW(hwndEditor, EM_SETREADONLY, 0, 0);
2348 else
2349 SendMessageW(hwndEditor, EM_SETREADONLY, 1, 0);
2350 return 0;
2351 }
2352
2353 case ID_EDIT_MODIFIED:
2354 if (SendMessageW(hwndEditor, EM_GETMODIFY, 0, 0))
2355 SendMessageW(hwndEditor, EM_SETMODIFY, 0, 0);
2356 else
2357 SendMessageW(hwndEditor, EM_SETMODIFY, 1, 0);
2358 return 0;
2359
2360 case ID_EDIT_UNDO:
2361 SendMessageW(hwndEditor, EM_UNDO, 0, 0);
2362 return 0;
2363
2364 case ID_EDIT_REDO:
2365 SendMessageW(hwndEditor, EM_REDO, 0, 0);
2366 return 0;
2367
2368 case ID_BULLET:
2369 {
2370 PARAFORMAT pf;
2371
2372 pf.cbSize = sizeof(pf);
2373 pf.dwMask = PFM_NUMBERING;
2374 SendMessageW(hwndEditor, EM_GETPARAFORMAT, 0, (LPARAM)&pf);
2375
2376 pf.dwMask |= PFM_OFFSET;
2377
2378 if(pf.wNumbering == PFN_BULLET)
2379 {
2380 pf.wNumbering = 0;
2381 pf.dxOffset = 0;
2382 } else
2383 {
2385 pf.dxOffset = 720;
2386 }
2387
2388 SendMessageW(hwndEditor, EM_SETPARAFORMAT, 0, (LPARAM)&pf);
2389 }
2390 break;
2391
2392 case ID_ALIGN_LEFT:
2393 case ID_ALIGN_CENTER:
2394 case ID_ALIGN_RIGHT:
2395 {
2396 PARAFORMAT2 pf;
2397
2398 pf.cbSize = sizeof(pf);
2399 pf.dwMask = PFM_ALIGNMENT;
2400 switch(LOWORD(wParam)) {
2401 case ID_ALIGN_LEFT: pf.wAlignment = PFA_LEFT; break;
2402 case ID_ALIGN_CENTER: pf.wAlignment = PFA_CENTER; break;
2403 case ID_ALIGN_RIGHT: pf.wAlignment = PFA_RIGHT; break;
2404 }
2405 SendMessageW(hwndEditor, EM_SETPARAFORMAT, 0, (LPARAM)&pf);
2406 break;
2407 }
2408
2409 case ID_BACK_1:
2410 SendMessageW(hwndEditor, EM_SETBKGNDCOLOR, 1, 0);
2411 break;
2412
2413 case ID_BACK_2:
2414 SendMessageW(hwndEditor, EM_SETBKGNDCOLOR, 0, RGB(255,255,192));
2415 break;
2416
2417 case ID_TOGGLE_TOOLBAR:
2419 update_window();
2420 break;
2421
2426 update_window();
2427 break;
2428
2431 update_window();
2432 break;
2433
2434 case ID_TOGGLE_RULER:
2436 update_window();
2437 break;
2438
2439 case ID_DATETIME:
2441 break;
2442
2443 case ID_PARAFORMAT:
2445 break;
2446
2447 case ID_TABSTOPS:
2449 break;
2450
2451 case ID_ABOUT:
2452 dialog_about();
2453 break;
2454
2455 case ID_VIEWPROPERTIES:
2457 break;
2458
2459 case IDC_FONTLIST:
2460 if (HIWORD(wParam) == CBN_SELENDOK)
2461 {
2463 HWND hwndFontList = (HWND)lParam;
2466 }
2467 break;
2468
2469 case IDC_SIZELIST:
2470 if (HIWORD(wParam) == CBN_SELENDOK)
2471 {
2473 HWND hwndSizeList = (HWND)lParam;
2475 on_sizelist_modified(hwndSizeList, buffer);
2476 }
2477 break;
2478
2479 default:
2480 SendMessageW(hwndEditor, WM_COMMAND, wParam, lParam);
2481 break;
2482 }
2483 return 0;
2484}
2485
2487{
2488 HMENU hMenu = (HMENU)wParam;
2489 HWND hwndEditor = GetDlgItem(hWnd, IDC_EDITOR);
2491 PARAFORMAT pf;
2492 int nAlignment = -1;
2493 int selFrom, selTo;
2494 GETTEXTLENGTHEX gt;
2495 LRESULT textLength;
2497
2498 SendMessageW(hEditorWnd, EM_GETSEL, (WPARAM)&selFrom, (LPARAM)&selTo);
2499 EnableMenuItem(hMenu, ID_EDIT_COPY, (selFrom == selTo) ? MF_GRAYED : MF_ENABLED);
2500 EnableMenuItem(hMenu, ID_EDIT_CUT, (selFrom == selTo) ? MF_GRAYED : MF_ENABLED);
2501
2502 pf.cbSize = sizeof(PARAFORMAT);
2503 SendMessageW(hwndEditor, EM_GETPARAFORMAT, 0, (LPARAM)&pf);
2507 SendMessageW(hwndEditor, EM_GETMODIFY, 0, 0) ? MF_CHECKED : MF_UNCHECKED);
2508 if (pf.dwMask & PFM_ALIGNMENT)
2509 nAlignment = pf.wAlignment;
2510 CheckMenuItem(hMenu, ID_ALIGN_LEFT, (nAlignment == PFA_LEFT) ? MF_CHECKED : MF_UNCHECKED);
2511 CheckMenuItem(hMenu, ID_ALIGN_CENTER, (nAlignment == PFA_CENTER) ? MF_CHECKED : MF_UNCHECKED);
2512 CheckMenuItem(hMenu, ID_ALIGN_RIGHT, (nAlignment == PFA_RIGHT) ? MF_CHECKED : MF_UNCHECKED);
2514 EnableMenuItem(hMenu, ID_EDIT_UNDO, SendMessageW(hwndEditor, EM_CANUNDO, 0, 0) ?
2516 EnableMenuItem(hMenu, ID_EDIT_REDO, SendMessageW(hwndEditor, EM_CANREDO, 0, 0) ?
2518
2521
2524
2527
2529
2530 gt.flags = GTL_NUMCHARS;
2531 gt.codepage = 1200;
2532 textLength = SendMessageW(hEditorWnd, EM_GETTEXTLENGTHEX, (WPARAM)&gt, 0);
2533 EnableMenuItem(hMenu, ID_FIND, textLength ? MF_ENABLED : MF_GRAYED);
2534
2535 mi.cbSize = sizeof(mi);
2536 mi.fMask = MIIM_DATA;
2537
2539
2540 EnableMenuItem(hMenu, ID_FIND_NEXT, (textLength && mi.dwItemData) ? MF_ENABLED : MF_GRAYED);
2541
2542 EnableMenuItem(hMenu, ID_REPLACE, textLength ? MF_ENABLED : MF_GRAYED);
2543
2544 return 0;
2545}
2546
2548{
2549 int nStatusSize = 0;
2550 RECT rc;
2552 HWND hwndStatusBar = GetDlgItem(hWnd, IDC_STATUSBAR);
2553 HWND hwndReBar = GetDlgItem(hWnd, IDC_REBAR);
2554 HWND hRulerWnd = GetDlgItem(hwndReBar, IDC_RULER);
2555 int rebarHeight = 0;
2556
2557 if (hwndStatusBar)
2558 {
2559 SendMessageW(hwndStatusBar, WM_SIZE, 0, 0);
2560 if (IsWindowVisible(hwndStatusBar))
2561 {
2562 GetClientRect(hwndStatusBar, &rc);
2563 nStatusSize = rc.bottom - rc.top;
2564 } else
2565 {
2566 nStatusSize = 0;
2567 }
2568 }
2569 if (hwndReBar)
2570 {
2571 rebarHeight = SendMessageW(hwndReBar, RB_GETBARHEIGHT, 0, 0);
2572
2573 MoveWindow(hwndReBar, 0, 0, LOWORD(lParam), rebarHeight, TRUE);
2574 }
2575 if (hwndEditor)
2576 {
2577 GetClientRect(hWnd, &rc);
2578 MoveWindow(hwndEditor, 0, rebarHeight, rc.right, rc.bottom-nStatusSize-rebarHeight, TRUE);
2579 }
2580
2581 redraw_ruler(hRulerWnd);
2582
2584}
2585
2587{
2588 if(msg == ID_FINDMSGSTRING)
2590
2591 switch(msg)
2592 {
2593 case WM_CREATE:
2594 return OnCreate( hWnd );
2595
2596 case WM_USER:
2597 return OnUser( hWnd );
2598
2599 case WM_NOTIFY:
2600 return OnNotify( hWnd, lParam );
2601
2602 case WM_COMMAND:
2603 if(preview_isactive())
2604 {
2605 return preview_command( hWnd, wParam );
2606 }
2607
2608 return OnCommand( hWnd, wParam, lParam );
2609
2610 case WM_DESTROY:
2611 PostQuitMessage(0);
2612 break;
2613
2614 case WM_CLOSE:
2615 if(preview_isactive())
2616 {
2618 } else if(prompt_save_changes())
2619 {
2622 PostQuitMessage(0);
2623 }
2624 break;
2625
2626 case WM_ACTIVATE:
2627 if (LOWORD(wParam))
2629 return 0;
2630
2631 case WM_INITMENUPOPUP:
2632 return OnInitPopupMenu( hWnd, wParam );
2633
2634 case WM_SIZE:
2635 return OnSize( hWnd, wParam, lParam );
2636
2637 case WM_CONTEXTMENU:
2638 return DefWindowProcW(hWnd, msg, wParam, lParam);
2639
2640 case WM_DROPFILES:
2641 {
2643 DragQueryFileW((HDROP)wParam, 0, file, MAX_PATH);
2644 DragFinish((HDROP)wParam);
2645
2648 }
2649 break;
2650 case WM_PAINT:
2651 if(!preview_isactive())
2652 return DefWindowProcW(hWnd, msg, wParam, lParam);
2653
2654 default:
2655 return DefWindowProcW(hWnd, msg, wParam, lParam);
2656 }
2657
2658 return 0;
2659}
2660
2661int CALLBACK WinMain(HINSTANCE hInstance, HINSTANCE hOldInstance, LPSTR szCmdParagraph, int nCmdShow)
2662{
2664 HACCEL hAccel;
2665 WNDCLASSEXW wc;
2666 MSG msg;
2667 RECT rc;
2668 UINT_PTR hPrevRulerProc;
2669 HWND hRulerWnd;
2670 POINTL EditPoint;
2671 DWORD bMaximized;
2672 static const WCHAR wszAccelTable[] = {'M','A','I','N','A','C','C','E','L',
2673 'T','A','B','L','E','\0'};
2674
2675 InitCommonControlsEx(&classes);
2676
2677 switch (GetUserDefaultUILanguage())
2678 {
2681 break;
2682
2683 default:
2684 break;
2685 }
2686
2687 hAccel = LoadAcceleratorsW(hInstance, wszAccelTable);
2688
2689 wc.cbSize = sizeof(wc);
2690 wc.style = 0;
2691 wc.lpfnWndProc = WndProc;
2692 wc.cbClsExtra = 0;
2693 wc.cbWndExtra = 4;
2694 wc.hInstance = hInstance;
2702 RegisterClassExW(&wc);
2703
2704 wc.style = 0;
2706 wc.cbClsExtra = 0;
2707 wc.cbWndExtra = 0;
2708 wc.hInstance = hInstance;
2709 wc.hIcon = NULL;
2710 wc.hIconSm = NULL;
2712 wc.hbrBackground = NULL;
2713 wc.lpszMenuName = NULL;
2715 RegisterClassExW(&wc);
2716
2719 rc.left, rc.top, rc.right-rc.left, rc.bottom-rc.top, NULL, NULL, hInstance, NULL);
2720 registry_read_maximized(&bMaximized);
2721 if ((nCmdShow == SW_SHOWNORMAL || nCmdShow == SW_SHOWDEFAULT)
2722 && bMaximized)
2723 nCmdShow = SW_SHOWMAXIMIZED;
2724 ShowWindow(hMainWnd, nCmdShow);
2725
2732
2735 hPrevRulerProc = SetWindowLongPtrW(hRulerWnd, GWLP_WNDPROC, (UINT_PTR)ruler_proc);
2736 SendMessageW(hRulerWnd, WM_USER, (WPARAM)&EditPoint, hPrevRulerProc);
2737
2739
2740 while(GetMessageW(&msg,0,0,0))
2741 {
2743 continue;
2744
2746 continue;
2749 if (!PeekMessageW(&msg, 0, 0, 0, PM_NOREMOVE))
2751 }
2752
2753 return 0;
2754}
static HDC hDC
Definition: 3dtext.c:33
basic_ostream< _CharT, _Traits > &_STLP_CALL endl(basic_ostream< _CharT, _Traits > &__os)
Definition: _ostream.h:357
#define isspace(c)
Definition: acclib.h:69
int memcmp(void *Buffer1, void *Buffer2, ACPI_SIZE Count)
Definition: utclib.c:112
#define read
Definition: acwin.h:96
int fontHeight
Definition: appswitch.c:47
#define msg(x)
Definition: auth_time.c:54
HWND hWnd
Definition: settings.c:17
#define MAX_STRING_LEN
Definition: precomp.h:36
#define IDC_STATUSBAR
Definition: resource.h:12
#define index(s, c)
Definition: various.h:29
#define ID_EDIT_COPY
Definition: resource.h:48
#define ID_FILE_EXIT
Definition: resource.h:46
#define ID_EDIT_PASTE
Definition: resource.h:49
#define ID_FILE_OPEN
Definition: resource.h:41
#define ID_FILE_SAVEAS
Definition: resource.h:43
#define ID_FILE_NEW
Definition: resource.h:40
#define ID_FILE_SAVE
Definition: resource.h:42
#define IDM_MAINMENU
Definition: resources.h:3
void redraw_ruler(HWND hRulerWnd)
Definition: print.c:288
void print_quick(HWND hMainWnd, LPWSTR wszFileName)
Definition: print.c:537
LRESULT CALLBACK ruler_proc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
Definition: print.c:410
void get_default_printer_opts(void)
Definition: print.c:521
void target_device(HWND hMainWnd, DWORD wordWrap)
Definition: print.c:209
void dialog_printsetup(HWND hMainWnd)
Definition: print.c:498
void init_preview(HWND hMainWnd, LPWSTR wszFileName)
Definition: print.c:735
BOOL preview_isactive(void)
Definition: print.c:779
void dialog_print(HWND hMainWnd, LPWSTR wszFileName)
Definition: print.c:549
LRESULT preview_command(HWND hWnd, WPARAM wParam)
Definition: print.c:1203
void close_preview(HWND hMainWnd)
Definition: print.c:751
int reg_formatindex(WPARAM format)
Definition: registry.c:330
void registry_set_filelist(LPCWSTR newFile, HWND hMainWnd)
Definition: registry.c:269
void registry_read_formatopts_all(DWORD barState[], DWORD wordWrap[])
Definition: registry.c:398
void registry_set_formatopts_all(DWORD barState[], DWORD wordWrap[])
Definition: registry.c:419
void registry_read_winrect(RECT *rc)
Definition: registry.c:111
void registry_read_maximized(DWORD *bMaximized)
Definition: registry.c:124
void registry_read_options(void)
Definition: registry.c:335
void registry_set_options(HWND hMainWnd)
Definition: registry.c:83
void registry_read_filelist(HWND hMainWnd)
Definition: registry.c:217
static void dialog_about(void)
Definition: wordpad.c:1018
static void DoOpenFile(LPCWSTR szOpenFileName)
Definition: wordpad.c:764
static void DoLoadStrings(void)
Definition: wordpad.c:97
static BOOL is_bar_visible(int bandId)
Definition: wordpad.c:660
static void set_toolbar_state(int bandId, BOOL show)
Definition: wordpad.c:675
static const WCHAR wszMainWndClass[]
Definition: wordpad.c:53
static BOOL validate_endptr(LPCWSTR endptr, UNIT *punit)
Definition: wordpad.c:256
static void dialog_choose_font(void)
Definition: wordpad.c:566
static HMENU hColorPopupMenu
Definition: wordpad.c:63
static void populate_font_list(HWND hListWnd)
Definition: wordpad.c:631
static void set_statusbar_state(BOOL show)
Definition: wordpad.c:703
static void clear_formatting(void)
Definition: wordpad.c:448
static void ShowOpenError(DWORD Code)
Definition: wordpad.c:748
static LRESULT OnCreate(HWND hWnd)
Definition: wordpad.c:1805
static void number_with_units(LPWSTR buffer, int number)
Definition: wordpad.c:1392
static void update_size_list(void)
Definition: wordpad.c:404
static void set_bar_states(void)
Definition: wordpad.c:711
static int CALLBACK enum_font_proc(const LOGFONTW *lpelfe, const TEXTMETRICW *lpntme, DWORD FontType, LPARAM lParam)
Definition: wordpad.c:615
#define U(x)
Definition: wordpad.c:45
static void append_current_units(LPWSTR buffer)
Definition: wordpad.c:1385
#define U3(x)
Definition: wordpad.c:47
static LRESULT OnSize(HWND hWnd, WPARAM wParam, LPARAM lParam)
Definition: wordpad.c:2547
static INT_PTR CALLBACK newfile_proc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
Definition: wordpad.c:1485
static int fileformat_number(WPARAM format)
Definition: wordpad.c:458
static void update_window(void)
Definition: wordpad.c:651
static WCHAR wszFileName[MAX_PATH]
Definition: wordpad.c:71
static void AddButton(HWND hwndToolBar, int nImage, int nCommand)
Definition: wordpad.c:155
static WCHAR wszDefaultFileName[MAX_STRING_LEN]
Definition: wordpad.c:73
static BOOL prompt_save_changes(void)
Definition: wordpad.c:940
static WCHAR units_ptW[MAX_STRING_LEN]
Definition: wordpad.c:78
static void set_font(LPCWSTR wszFaceName)
Definition: wordpad.c:479
static HWND hFindWnd
Definition: wordpad.c:62
static INT_PTR CALLBACK tabstops_proc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
Definition: wordpad.c:1653
static DWORD wordWrap[2]
Definition: wordpad.c:67
static WCHAR wszFilter[MAX_STRING_LEN *4+6 *3+5]
Definition: wordpad.c:72
static DWORD barState[2]
Definition: wordpad.c:68
static UINT ID_FINDMSGSTRING
Definition: wordpad.c:65
static HWND hMainWnd
Definition: wordpad.c:60
static void preview_exit(HWND hMainWnd)
Definition: wordpad.c:723
#define U2(x)
Definition: wordpad.c:46
static BOOL get_comboexlist_selection(HWND hComboEx, LPWSTR wszBuffer, UINT bufferLength)
Definition: wordpad.c:1400
static HWND hEditorWnd
Definition: wordpad.c:61
static WCHAR units_inchW[MAX_STRING_LEN]
Definition: wordpad.c:77
static WCHAR wszSaveChanges[MAX_STRING_LEN]
Definition: wordpad.c:74
static void set_fileformat(WPARAM format)
Definition: wordpad.c:739
static WPARAM fileFormat
Definition: wordpad.c:69
static INT_PTR CALLBACK datetime_proc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
Definition: wordpad.c:1429
static void dialog_viewproperties(void)
Definition: wordpad.c:1122
int CALLBACK WinMain(HINSTANCE hInstance, HINSTANCE hOldInstance, LPSTR szCmdParagraph, int nCmdShow)
Definition: wordpad.c:2661
static BOOL number_from_string(LPCWSTR string, float *num, UNIT *punit)
Definition: wordpad.c:295
static void update_font_list(void)
Definition: wordpad.c:424
static LRESULT OnCommand(HWND hWnd, WPARAM wParam, LPARAM lParam)
Definition: wordpad.c:2068
static void add_size(HWND hSizeListWnd, unsigned size)
Definition: wordpad.c:353
static void on_sizelist_modified(HWND hwndSizeList, LPWSTR wszNewFontSize)
Definition: wordpad.c:327
static INT_PTR CALLBACK paraformat_proc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
Definition: wordpad.c:1528
const WCHAR wszPreviewWndClass[]
Definition: wordpad.c:57
static void ShowWriteError(DWORD Code)
Definition: wordpad.c:824
static void set_default_font(void)
Definition: wordpad.c:501
static LRESULT OnUser(HWND hWnd)
Definition: wordpad.c:1963
static void dialog_find(LPFINDREPLACEW fr, BOOL replace)
Definition: wordpad.c:1314
static void AddSeparator(HWND hwndToolBar)
Definition: wordpad.c:169
static void store_bar_state(int bandId, BOOL show)
Definition: wordpad.c:665
static LRESULT OnInitPopupMenu(HWND hWnd, WPARAM wParam)
Definition: wordpad.c:2486
static const WCHAR stringFormat[]
Definition: wordpad.c:55
static WCHAR units_inW[MAX_STRING_LEN]
Definition: wordpad.c:76
static void DialogOpenFile(void)
Definition: wordpad.c:993
static DWORD CALLBACK stream_out(DWORD_PTR cookie, LPBYTE buffer, LONG cb, LONG *pcb)
Definition: wordpad.c:196
static void add_font(LPCWSTR fontName, DWORD fontType, HWND hListWnd, const NEWTEXTMETRICEXW *ntmc)
Definition: wordpad.c:536
static BOOL DoSaveFile(LPCWSTR wszSaveFileName, WPARAM format)
Definition: wordpad.c:840
static WPARAM fileformat_flags(int format)
Definition: wordpad.c:472
static LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
Definition: wordpad.c:2586
static void on_fontlist_modified(LPWSTR wszNewFaceName)
Definition: wordpad.c:525
static int MessageBoxWithResStringW(HWND hWnd, LPCWSTR lpText, LPCWSTR lpCaption, UINT uType)
Definition: wordpad.c:137
static DWORD CALLBACK stream_in(DWORD_PTR cookie, LPBYTE buffer, LONG cb, LONG *pcb)
Definition: wordpad.c:183
static void populate_size_list(HWND hSizeListWnd)
Definition: wordpad.c:365
LPWSTR file_basename(LPWSTR path)
Definition: wordpad.c:212
static const COLORREF textcolors[]
Definition: wordpad.c:2060
static LRESULT handle_findmsg(LPFINDREPLACEW pFr)
Definition: wordpad.c:1221
UNIT
Definition: wordpad.c:83
@ UNIT_PT
Definition: wordpad.c:86
@ UNIT_INCH
Definition: wordpad.c:85
@ UNIT_CM
Definition: wordpad.c:84
static INT_PTR CALLBACK formatopts_proc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
Definition: wordpad.c:1024
static void set_size(float size)
Definition: wordpad.c:316
static int units_to_twips(UNIT unit, float number)
Definition: wordpad.c:1363
LRESULT CALLBACK preview_proc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
Definition: print.c:1016
static LRESULT OnNotify(HWND hWnd, LPARAM lParam)
Definition: wordpad.c:2015
static const WCHAR wszAppTitle[]
Definition: wordpad.c:51
static WCHAR units_cmW[MAX_STRING_LEN]
Definition: wordpad.c:75
static void HandleCommandLine(LPWSTR cmdline)
Definition: wordpad.c:1168
static BOOL DialogSaveFile(void)
Definition: wordpad.c:909
static void set_caption(LPCWSTR wszNewFileName)
Definition: wordpad.c:228
FT_UInt sid
Definition: cffcmap.c:139
HWND hStatusWnd
Definition: charmap.c:22
HINSTANCE hInstance
Definition: charmap.c:19
#define ID_ABOUT
Definition: charmap.c:17
WPARAM wParam
Definition: combotst.c:138
LPARAM lParam
Definition: combotst.c:139
BOOL WINAPI InitCommonControlsEx(const INITCOMMONCONTROLSEX *lpInitCtrls)
Definition: commctrl.c:900
HWND WINAPI CreateStatusWindowW(LONG style, LPCWSTR text, HWND parent, UINT wid)
Definition: commctrl.c:802
HWND WINAPI CreateToolbarEx(HWND hwnd, DWORD style, UINT wID, INT nBitmaps, HINSTANCE hBMInst, UINT_PTR wBMID, LPCTBBUTTON lpButtons, INT iNumButtons, INT dxButton, INT dyButton, INT dxBitmap, INT dyBitmap, UINT uStructSize)
Definition: commctrl.c:936
#define FR_WHOLEWORD
Definition: commdlg.h:145
#define OFN_OVERWRITEPROMPT
Definition: commdlg.h:116
#define OFN_EXPLORER
Definition: commdlg.h:104
#define CF_EFFECTS
Definition: commdlg.h:68
#define FR_REPLACE
Definition: commdlg.h:142
#define FR_DIALOGTERM
Definition: commdlg.h:126
#define FR_REPLACEALL
Definition: commdlg.h:143
#define CF_INITTOLOGFONTSTRUCT
Definition: commdlg.h:66
#define CF_NOVERTFONTS
Definition: commdlg.h:86
#define BOLD_FONTTYPE
Definition: commdlg.h:90
#define OFN_HIDEREADONLY
Definition: commdlg.h:107
#define OFN_ENABLESIZING
Definition: commdlg.h:101
#define FINDMSGSTRINGW
Definition: commdlg.h:28
#define OFN_FILEMUSTEXIST
Definition: commdlg.h:106
#define FR_MATCHCASE
Definition: commdlg.h:136
#define CF_NOSCRIPTSEL
Definition: commdlg.h:85
#define OFN_PATHMUSTEXIST
Definition: commdlg.h:117
#define ITALIC_FONTTYPE
Definition: commdlg.h:91
#define FR_DOWN
Definition: commdlg.h:127
#define FR_HIDEUPDOWN
Definition: commdlg.h:132
#define CF_SCREENFONTS
Definition: commdlg.h:59
#define FR_FINDNEXT
Definition: commdlg.h:131
#define LF_FACESIZE
Definition: dimm.idl:39
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
unsigned int idx
Definition: utils.c:41
INT_PTR WINAPI PropertySheetW(LPCPROPSHEETHEADERW lppsh)
Definition: propsheet.c:2916
BOOL WINAPI GetOpenFileNameW(OPENFILENAMEW *ofn)
Definition: filedlg.c:4736
BOOL WINAPI GetSaveFileNameW(LPOPENFILENAMEW ofn)
Definition: filedlg.c:4801
HWND WINAPI FindTextW(LPFINDREPLACEW pfr)
Definition: finddlg.c:514
HWND WINAPI ReplaceTextW(LPFINDREPLACEW pfr)
Definition: finddlg.c:548
BOOL WINAPI ChooseFontW(LPCHOOSEFONTW lpChFont)
Definition: fontdlg.c:184
#define CloseHandle
Definition: compat.h:739
#define GetProcessHeap()
Definition: compat.h:736
#define FILE_BEGIN
Definition: compat.h:761
#define OPEN_EXISTING
Definition: compat.h:775
#define ReadFile(a, b, c, d, e)
Definition: compat.h:742
#define SetFilePointer
Definition: compat.h:743
HANDLE HWND
Definition: compat.h:19
#define INVALID_HANDLE_VALUE
Definition: compat.h:731
#define HeapAlloc
Definition: compat.h:733
#define GENERIC_READ
Definition: compat.h:135
#define MAX_PATH
Definition: compat.h:34
#define HeapFree(x, y, z)
Definition: compat.h:735
#define CreateFileW
Definition: compat.h:741
#define FILE_ATTRIBUTE_NORMAL
Definition: compat.h:137
#define CALLBACK
Definition: compat.h:35
#define lstrcpyW
Definition: compat.h:749
#define LoadLibraryW(x)
Definition: compat.h:747
#define ERROR_ACCESS_DENIED
Definition: compat.h:97
#define FILE_SHARE_READ
Definition: compat.h:136
#define HEAP_ZERO_MEMORY
Definition: compat.h:134
#define lstrcpynW
Definition: compat.h:738
#define lstrlenW
Definition: compat.h:750
BOOL WINAPI SetEndOfFile(HANDLE hFile)
Definition: fileinfo.c:1004
BOOL WINAPI WriteFile(IN HANDLE hFile, IN LPCVOID lpBuffer, IN DWORD nNumberOfBytesToWrite OPTIONAL, OUT LPDWORD lpNumberOfBytesWritten, IN LPOVERLAPPED lpOverlapped OPTIONAL)
Definition: rw.c:24
HMODULE WINAPI GetModuleHandleW(LPCWSTR lpModuleName)
Definition: loader.c:838
LPWSTR WINAPI GetCommandLineW(VOID)
Definition: proc.c:2019
VOID WINAPI GetLocalTime(OUT LPSYSTEMTIME lpSystemTime)
Definition: time.c:286
int WINAPI lstrcmpW(LPCWSTR str1, LPCWSTR str2)
Definition: locale.c:4242
LANGID WINAPI GetUserDefaultUILanguage(void)
Definition: locale.c:1374
int WINAPI lstrcmpiW(LPCWSTR str1, LPCWSTR str2)
Definition: locale.c:4261
const WCHAR * text
Definition: package.c:1794
void WINAPI DragFinish(HDROP h)
Definition: shellole.c:538
UINT WINAPI DragQueryFileW(HDROP hDrop, UINT lFile, LPWSTR lpszwFile, UINT lLength)
Definition: shellole.c:622
void WINAPI DragAcceptFiles(HWND hWnd, BOOL b)
Definition: shellole.c:522
unsigned int(__cdecl typeof(jpeg_read_scanlines))(struct jpeg_decompress_struct *
Definition: typeof.h:31
static const WCHAR Message[]
Definition: register.c:74
#define assert(x)
Definition: debug.h:53
#define pt(x, y)
Definition: drawing.c:79
#define RGB(r, g, b)
Definition: precomp.h:71
#define wrap(journal, var)
Definition: recovery.c:207
OPENFILENAMEW sfn
Definition: eventvwr.c:101
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
unsigned short WORD
Definition: ntddk_ex.h:93
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950
GLsizeiptr size
Definition: glext.h:5919
GLuint buffer
Definition: glext.h:5915
GLenum const GLvoid GLbitfield fontStyle
Definition: glext.h:11715
GLuint index
Definition: glext.h:6031
GLenum GLint * range
Definition: glext.h:7539
GLenum const GLfloat * params
Definition: glext.h:5645
GLenum GLuint GLenum GLsizei const GLchar * buf
Definition: glext.h:7751
GLbitfield flags
Definition: glext.h:7161
GLuint GLsizei GLsizei * length
Definition: glext.h:6040
GLfloat GLfloat p
Definition: glext.h:8902
GLuint GLuint num
Definition: glext.h:9618
GLuint64EXT * result
Definition: glext.h:11304
GLenum const GLvoid * fontName
Definition: glext.h:11715
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
#define es
Definition: i386-dis.c:440
#define stderr
Definition: stdio.h:100
_Check_return_opt_ _CRTIMP int __cdecl fprintf(_Inout_ FILE *_File, _In_z_ _Printf_format_string_ const char *_Format,...)
_Check_return_ int __cdecl atoi(_In_z_ const char *_Str)
_Check_return_ double __cdecl wcstod(_In_z_ const wchar_t *_Str, _Out_opt_ _Deref_post_z_ wchar_t **_EndPtr)
INT WINAPI GetTimeFormatW(LCID lcid, DWORD dwFlags, const SYSTEMTIME *lpTime, LPCWSTR lpFormat, LPWSTR lpTimeStr, INT cchOut)
Definition: lcformat.c:1093
INT WINAPI GetDateFormatW(LCID lcid, DWORD dwFlags, const SYSTEMTIME *lpTime, LPCWSTR lpFormat, LPWSTR lpDateStr, INT cchOut)
Definition: lcformat.c:993
HWND hList
Definition: livecd.c:10
LPWSTR WINAPI lstrcatW(LPWSTR lpString1, LPCWSTR lpString2)
Definition: lstring.c:274
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
#define CREATE_ALWAYS
Definition: disk.h:72
#define OPEN_ALWAYS
Definition: disk.h:70
HACCEL hAccel
Definition: main.c:47
#define sprintf(buf, format,...)
Definition: sprintf.c:55
HDC hdc
Definition: main.c:9
UCHAR ab[sizeof("Hello World!") -1]
Definition: fdi.c:106
DWORD button
Definition: button.c:166
static HDC
Definition: imagelist.c:88
static HICON
Definition: imagelist.c:80
static unsigned int number
Definition: dsound.c:1479
static HMODULE MODULEINFO DWORD cb
Definition: module.c:33
const char * delimiter
Definition: string.c:1566
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
HWND hTabWnd
Definition: msconfig.c:22
unsigned __int3264 UINT_PTR
Definition: mstsclib_h.h:274
_In_ HANDLE hFile
Definition: mswsock.h:90
INT WINAPI MulDiv(INT nNumber, INT nNumerator, INT nDenominator)
Definition: muldiv.c:25
Definition: mk_font.cpp:20
unsigned int UINT
Definition: ndis.h:50
#define STRING_ALL_FILES
Definition: notepad_res.h:68
#define STRING_TEXT_FILES_TXT
Definition: notepad_res.h:69
#define DWORD
Definition: nt_native.h:44
#define GENERIC_WRITE
Definition: nt_native.h:90
#define LOCALE_USER_DEFAULT
HRESULT setup_richedit_olecallback(HWND hEditorWnd)
Definition: olecallback.c:203
#define LOWORD(l)
Definition: pedump.c:82
#define WS_CHILD
Definition: pedump.c:617
#define WS_OVERLAPPEDWINDOW
Definition: pedump.c:637
#define ES_READONLY
Definition: pedump.c:675
#define ES_AUTOVSCROLL
Definition: pedump.c:671
#define ES_WANTRETURN
Definition: pedump.c:676
#define WS_BORDER
Definition: pedump.c:625
#define ES_NOHIDESEL
Definition: pedump.c:673
#define WS_VSCROLL
Definition: pedump.c:627
#define WS_VISIBLE
Definition: pedump.c:620
long LONG
Definition: pedump.c:60
#define WS_CLIPSIBLINGS
Definition: pedump.c:618
#define WS_HSCROLL
Definition: pedump.c:628
#define WS_CLIPCHILDREN
Definition: pedump.c:619
#define ES_MULTILINE
Definition: pedump.c:667
png_const_structrp png_const_inforp int * unit
Definition: png.h:2159
#define PSP_USETITLE
Definition: prsht.h:26
#define PSN_APPLY
Definition: prsht.h:117
struct _PROPSHEETPAGEW PROPSHEETPAGEW
#define PSH_PROPSHEETPAGE
Definition: prsht.h:43
struct _PROPSHEETPAGEW * LPPROPSHEETPAGEW
#define PSH_USEICONID
Definition: prsht.h:42
const PROPSHEETPAGEW * LPCPROPSHEETPAGEW
Definition: prsht.h:245
#define PSH_NOAPPLYNOW
Definition: prsht.h:47
#define STD_COPY
Definition: commctrl.h:1072
#define RB_SETBANDINFOW
Definition: commctrl.h:1584
#define BTNS_BUTTON
Definition: commctrl.h:998
#define RB_GETBARHEIGHT
Definition: commctrl.h:1608
#define RBBS_BREAK
Definition: commctrl.h:1489
#define REBARBANDINFOW_V6_SIZE
Definition: commctrl.h:1542
#define TB_AUTOSIZE
Definition: commctrl.h:1137
#define STD_PRINT
Definition: commctrl.h:1085
#define STD_FILENEW
Definition: commctrl.h:1077
#define ICC_USEREX_CLASSES
Definition: commctrl.h:68
#define REBARCLASSNAMEW
Definition: commctrl.h:1463
#define RBBIM_CHILDSIZE
Definition: commctrl.h:1507
#define RB_INSERTBANDW
Definition: commctrl.h:1583
#define CBEN_ENDEDITW
Definition: commctrl.h:3881
#define TBSTYLE_TOOLTIPS
Definition: commctrl.h:989
#define BTNS_SEP
Definition: commctrl.h:999
#define CBEM_GETITEMW
Definition: commctrl.h:3848
#define HINST_COMMCTRL
Definition: commctrl.h:1063
#define STD_PASTE
Definition: commctrl.h:1073
#define RBBIM_CHILD
Definition: commctrl.h:1506
#define CBEM_GETCOMBOCONTROL
Definition: commctrl.h:3837
#define TB_CHECKBUTTON
Definition: commctrl.h:1043
#define STD_PRINTPRE
Definition: commctrl.h:1080
#define TB_GETBUTTONSIZE
Definition: commctrl.h:1160
#define WC_COMBOBOXEXW
Definition: commctrl.h:3786
#define CBEIF_TEXT
Definition: commctrl.h:3791
#define STD_FILEOPEN
Definition: commctrl.h:1078
#define RBBS_NOGRIPPER
Definition: commctrl.h:1497
#define RB_GETBANDINFOW
Definition: commctrl.h:1609
#define TB_ENABLEBUTTON
Definition: commctrl.h:1042
#define RBBS_CHILDEDGE
Definition: commctrl.h:1491
#define STD_CUT
Definition: commctrl.h:1071
#define STD_FILESAVE
Definition: commctrl.h:1079
#define RB_SHOWBAND
Definition: commctrl.h:1618
#define CCS_NODIVIDER
Definition: commctrl.h:2253
#define CCS_TOP
Definition: commctrl.h:2247
#define STD_UNDO
Definition: commctrl.h:1074
#define RB_IDTOINDEX
Definition: commctrl.h:1588
#define TB_GETITEMRECT
Definition: commctrl.h:1133
#define STD_REDOW
Definition: commctrl.h:1075
#define TBSTATE_ENABLED
Definition: commctrl.h:974
#define RBBIM_ID
Definition: commctrl.h:1510
#define CBEM_INSERTITEMW
Definition: commctrl.h:3846
#define RBS_VARHEIGHT
Definition: commctrl.h:1471
#define ICC_COOL_CLASSES
Definition: commctrl.h:69
#define CCS_NOPARENTALIGN
Definition: commctrl.h:2251
#define TB_INDETERMINATE
Definition: commctrl.h:1046
#define CBEIF_LPARAM
Definition: commctrl.h:3796
#define TB_ADDBUTTONSW
Definition: commctrl.h:1266
#define CCS_NOMOVEY
Definition: commctrl.h:2248
#define ICC_BAR_CLASSES
Definition: commctrl.h:60
#define RBBIM_STYLE
Definition: commctrl.h:1502
#define RB_SETBARINFO
Definition: commctrl.h:1578
#define RBBIM_SIZE
Definition: commctrl.h:1508
#define STD_FIND
Definition: commctrl.h:1083
#define WC_STATICW
Definition: commctrl.h:4685
#define TB_COMMANDTOINDEX
Definition: commctrl.h:1111
#define TB_ADDBITMAP
Definition: commctrl.h:1056
#define IDB_STD_SMALL_COLOR
Definition: commctrl.h:1064
#define CBEM_GETEDITCONTROL
Definition: commctrl.h:3838
#define sprintfW
Definition: unicode.h:64
INT replace(TCHAR source[MAX_PATH], TCHAR dest[MAX_PATH], DWORD dwFlags, BOOL *doMore)
Definition: replace.c:38
#define MAX_TAB_STOPS
Definition: richedit.h:218
#define EM_CANREDO
Definition: richedit.h:118
#define EM_SCROLLCARET
Definition: richedit.h:81
#define PFA_RIGHT
Definition: richedit.h:922
#define PFA_CENTER
Definition: richedit.h:923
#define EM_REDO
Definition: richedit.h:117
#define PFM_NUMBERING
Definition: richedit.h:843
#define CFM_STRIKEOUT
Definition: richedit.h:335
#define EM_GETSELTEXT
Definition: richedit.h:95
#define ST_DEFAULT
Definition: richedit.h:1070
#define CFE_STRIKEOUT
Definition: richedit.h:409
#define CFE_BOLD
Definition: richedit.h:406
#define PFA_LEFT
Definition: richedit.h:921
#define CFE_AUTOCOLOR
Definition: richedit.h:414
#define EM_STREAMIN
Definition: richedit.h:106
#define EM_SETEVENTMASK
Definition: richedit.h:102
#define GTL_DEFAULT
Definition: richedit.h:1054
static const WCHAR RICHEDIT_CLASS20W[]
Definition: richedit.h:50
#define SF_RTF
Definition: richedit.h:721
#define CFE_ITALIC
Definition: richedit.h:407
#define SCF_SELECTION
Definition: richedit.h:235
#define PFM_OFFSET
Definition: richedit.h:840
#define EM_SETBKGNDCOLOR
Definition: richedit.h:100
#define EM_SETTEXTEX
Definition: richedit.h:131
#define EM_POSFROMCHAR
Definition: richedit.h:77
#define SCF_DEFAULT
Definition: richedit.h:234
#define EM_GETCHARFORMAT
Definition: richedit.h:91
#define EN_SELCHANGE
Definition: richedit.h:193
#define GTL_NUMCHARS
Definition: richedit.h:1058
#define EM_SETCHARFORMAT
Definition: richedit.h:101
#define WM_CONTEXTMENU
Definition: richedit.h:64
#define ENM_SELCHANGE
Definition: richedit.h:478
#define EM_GETPARAFORMAT
Definition: richedit.h:94
#define PFM_RIGHTINDENT
Definition: richedit.h:839
#define CFE_UNDERLINE
Definition: richedit.h:408
#define PFN_BULLET
Definition: richedit.h:905
#define CFM_ITALIC
Definition: richedit.h:333
#define EM_GETTEXTRANGE
Definition: richedit.h:108
#define CFM_SIZE
Definition: richedit.h:362
#define EM_FINDTEXTW
Definition: richedit.h:147
#define EM_EXSETSEL
Definition: richedit.h:88
#define GT_SELECTION
Definition: richedit.h:1038
#define PFM_ALIGNMENT
Definition: richedit.h:841
#define SF_TEXT
Definition: richedit.h:720
#define PFM_TABSTOPS
Definition: richedit.h:842
#define EM_GETTEXTLENGTHEX
Definition: richedit.h:129
#define SF_UNICODE
Definition: richedit.h:724
#define CFM_BOLD
Definition: richedit.h:332
#define ES_SELECTIONBAR
Definition: richedit.h:230
#define CFM_FACE
Definition: richedit.h:360
#define WM_NOTIFY
Definition: richedit.h:61
#define EM_GETTEXTEX
Definition: richedit.h:128
#define EM_SETPARAFORMAT
Definition: richedit.h:104
#define CFM_UNDERLINE
Definition: richedit.h:334
#define CFM_COLOR
Definition: richedit.h:361
#define EM_FINDTEXTEXW
Definition: richedit.h:148
#define PFM_STARTINDENT
Definition: richedit.h:838
#define EM_EXGETSEL
Definition: richedit.h:85
struct _paraformat PARAFORMAT
#define EM_STREAMOUT
Definition: richedit.h:107
#define errno
Definition: errno.h:18
#define MAKELANGID(p, s)
Definition: nls.h:15
#define LANG_HEBREW
Definition: nls.h:67
#define SUBLANG_DEFAULT
Definition: nls.h:168
BOOL WINAPI ShellAboutW(HWND hWnd, LPCWSTR szApp, LPCWSTR szOtherStuff, HICON hIcon)
void WINAPI SHAddToRecentDocs(UINT uFlags, LPCVOID pv)
Definition: shellord.c:1005
#define SHARD_PATHW
Definition: shlobj.h:1176
OPENFILENAME ofn
Definition: sndrec32.cpp:56
HWND hwndStatus
Definition: solitaire.cpp:14
CardRegion * from
Definition: spigame.cpp:19
& rect
Definition: startmenu.cpp:1413
TCHAR * cmdline
Definition: stretchblt.cpp:32
DWORD Flags
Definition: commdlg.h:319
HWND hwndOwner
Definition: commdlg.h:317
WORD wReplaceWithLen
Definition: commdlg.h:323
WORD wFindWhatLen
Definition: commdlg.h:322
LPWSTR lpstrReplaceWith
Definition: commdlg.h:321
DWORD lStructSize
Definition: commdlg.h:316
LPWSTR lpstrFindWhat
Definition: commdlg.h:320
LPARAM lCustData
Definition: commdlg.h:324
WCHAR findBuffer[128]
Definition: wordpad.c:93
WCHAR lfFaceName[LF_FACESIZE]
Definition: dimm.idl:72
BYTE lfCharSet
Definition: dimm.idl:67
BYTE lfPitchAndFamily
Definition: dimm.idl:71
WCHAR szText[CBEMAXSTRLEN]
Definition: commctrl.h:3919
HINSTANCE hInstance
Definition: prsht.h:296
DWORD dwSize
Definition: prsht.h:293
DWORD dwFlags
Definition: prsht.h:294
HWND hwndParent
Definition: prsht.h:295
LPCWSTR pszCaption
Definition: prsht.h:301
DLGPROC pfnDlgProc
Definition: prsht.h:226
DWORD dwSize
Definition: prsht.h:214
DWORD dwFlags
Definition: prsht.h:215
LPARAM lParam
Definition: prsht.h:227
LPCWSTR pszTitle
Definition: prsht.h:225
HINSTANCE hInstance
Definition: prsht.h:216
LPCWSTR lpszClassName
Definition: winuser.h:3229
LPCWSTR lpszMenuName
Definition: winuser.h:3228
HBRUSH hbrBackground
Definition: winuser.h:3227
WNDPROC lpfnWndProc
Definition: winuser.h:3221
UINT cbSize
Definition: winuser.h:3219
int cbWndExtra
Definition: winuser.h:3223
HCURSOR hCursor
Definition: winuser.h:3226
HICON hIconSm
Definition: winuser.h:3230
HINSTANCE hInstance
Definition: winuser.h:3224
UINT style
Definition: winuser.h:3220
int cbClsExtra
Definition: winuser.h:3222
HICON hIcon
Definition: winuser.h:3225
LONG cpMax
Definition: richedit.h:501
LONG cpMin
Definition: richedit.h:500
CHARRANGE chrg
Definition: richedit.h:586
LPCWSTR lpstrText
Definition: richedit.h:587
WORD wAlignment
Definition: richedit.h:673
LONG dxRightIndent
Definition: richedit.h:671
DWORD dwMask
Definition: richedit.h:667
LONG dxOffset
Definition: richedit.h:672
UINT cbSize
Definition: richedit.h:666
WORD wNumbering
Definition: richedit.h:668
LONG dxStartIndent
Definition: richedit.h:670
DWORD dwMask
Definition: richedit.h:654
LONG dxOffset
Definition: richedit.h:659
WORD wAlignment
Definition: richedit.h:660
LONG dxRightIndent
Definition: richedit.h:658
UINT cbSize
Definition: richedit.h:653
LONG dxStartIndent
Definition: richedit.h:657
SHORT cTabCount
Definition: richedit.h:661
WORD wNumbering
Definition: richedit.h:655
LONG rgxTabs[MAX_TAB_STOPS]
Definition: richedit.h:662
CHARRANGE chrg
Definition: richedit.h:686
UINT codepage
Definition: richedit.h:1066
DWORD flags
Definition: richedit.h:1065
CHARRANGE chrg
Definition: richedit.h:514
LPWSTR lpstrText
Definition: richedit.h:515
Definition: cookie.c:34
Definition: fci.c:127
Definition: dsound.c:943
Definition: format.c:58
Definition: tftpd.h:60
Definition: parse.h:23