ReactOS  0.4.13-dev-52-g0efcfec
dialog.c
Go to the documentation of this file.
1 /*
2  * Notepad (dialog.c)
3  *
4  * Copyright 1998,99 Marcel Baur <mbaur@g26.ethz.ch>
5  * Copyright 2002 Sylvain Petreolle <spetreolle@yahoo.fr>
6  * Copyright 2002 Andriy Palamarchuk
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 Street, Fifth Floor, Boston, MA 02110-1301 USA
21  */
22 
23 #include "notepad.h"
24 
25 #include <assert.h>
26 #include <commctrl.h>
27 #include <strsafe.h>
28 
30 
31 static const TCHAR helpfile[] = _T("notepad.hlp");
32 static const TCHAR empty_str[] = _T("");
33 static const TCHAR szDefaultExt[] = _T("txt");
34 static const TCHAR txt_files[] = _T("*.txt");
35 
37 
39 {
41  if (error != NO_ERROR)
42  {
43  LPTSTR lpMsgBuf = NULL;
45 
47 
49  NULL,
50  error,
51  0,
52  (LPTSTR) &lpMsgBuf,
53  0,
54  NULL);
55 
56  MessageBox(NULL, lpMsgBuf, szTitle, MB_OK | MB_ICONERROR);
57  LocalFree(lpMsgBuf);
58  }
59 }
60 
66 void UpdateWindowCaption(BOOL clearModifyAlert)
67 {
68  TCHAR szCaption[MAX_STRING_LEN];
69  TCHAR szNotepad[MAX_STRING_LEN];
70  TCHAR szFilename[MAX_STRING_LEN];
71 
72  /* Load the name of the application */
73  LoadString(Globals.hInstance, STRING_NOTEPAD, szNotepad, ARRAY_SIZE(szNotepad));
74 
75  /* Determine if the file has been saved or if this is a new file */
76  if (Globals.szFileTitle[0] != 0)
77  StringCchCopy(szFilename, ARRAY_SIZE(szFilename), Globals.szFileTitle);
78  else
79  LoadString(Globals.hInstance, STRING_UNTITLED, szFilename, ARRAY_SIZE(szFilename));
80 
81  /* When a file is being opened or created, there is no need to have the edited flag shown
82  when the new or opened file has not been edited yet */
83  if (clearModifyAlert)
84  StringCbPrintf(szCaption, ARRAY_SIZE(szCaption), _T("%s - %s"), szFilename, szNotepad);
85  else
86  {
87  BOOL isModified = (SendMessage(Globals.hEdit, EM_GETMODIFY, 0, 0) ? TRUE : FALSE);
88 
89  /* Update the caption based upon if the user has modified the contents of the file or not */
90  StringCbPrintf(szCaption, ARRAY_SIZE(szCaption), _T("%s%s - %s"),
91  (isModified ? _T("*") : _T("")), szFilename, szNotepad);
92  }
93 
94  /* Update the window caption */
95  SetWindowText(Globals.hMainWnd, szCaption);
96 }
97 
98 int DIALOG_StringMsgBox(HWND hParent, int formatId, LPCTSTR szString, DWORD dwFlags)
99 {
100  TCHAR szMessage[MAX_STRING_LEN];
101  TCHAR szResource[MAX_STRING_LEN];
102 
103  /* Load and format szMessage */
104  LoadString(Globals.hInstance, formatId, szResource, ARRAY_SIZE(szResource));
105  _sntprintf(szMessage, ARRAY_SIZE(szMessage), szResource, szString);
106 
107  /* Load szCaption */
109  LoadString(Globals.hInstance, STRING_ERROR, szResource, ARRAY_SIZE(szResource));
110  else
111  LoadString(Globals.hInstance, STRING_NOTEPAD, szResource, ARRAY_SIZE(szResource));
112 
113  /* Display Modal Dialog */
114  // if (hParent == NULL)
115  // hParent = Globals.hMainWnd;
116  return MessageBox(hParent, szMessage, szResource, dwFlags);
117 }
118 
119 static void AlertFileNotFound(LPCTSTR szFileName)
120 {
122 }
123 
124 static int AlertFileNotSaved(LPCTSTR szFileName)
125 {
126  TCHAR szUntitled[MAX_STRING_LEN];
127 
128  LoadString(Globals.hInstance, STRING_UNTITLED, szUntitled, ARRAY_SIZE(szUntitled));
129 
131  szFileName[0] ? szFileName : szUntitled,
133 }
134 
135 static void AlertPrintError(void)
136 {
137  TCHAR szUntitled[MAX_STRING_LEN];
138 
139  LoadString(Globals.hInstance, STRING_UNTITLED, szUntitled, ARRAY_SIZE(szUntitled));
140 
142  Globals.szFileName[0] ? Globals.szFileName : szUntitled,
144 }
145 
152 {
154  HANDLE hFile;
155 
156  hFile = FindFirstFile(szFilename, &entry);
157  FindClose(hFile);
158 
159  return (hFile != INVALID_HANDLE_VALUE);
160 }
161 
163 {
164  LPCTSTR s;
165 
166  s = _tcsrchr(szFilename, _T('\\'));
167  if (s)
168  szFilename = s;
169  return _tcsrchr(szFilename, _T('.')) != NULL;
170 }
171 
173 {
174  DWORD dwStart = 0;
175  DWORD dwEnd = 0;
176 
177  SendMessage(hWnd, EM_GETSEL, (WPARAM)&dwStart, (LPARAM)&dwEnd);
178 
179  return dwEnd - dwStart;
180 }
181 
183 {
184  DWORD dwStart = 0;
185  DWORD dwEnd = 0;
186  DWORD dwSize;
187  HRESULT hResult;
188  LPTSTR lpTemp;
189 
190  if (!lpString)
191  {
192  return 0;
193  }
194 
195  SendMessage(hWnd, EM_GETSEL, (WPARAM)&dwStart, (LPARAM)&dwEnd);
196 
197  if (dwStart == dwEnd)
198  {
199  return 0;
200  }
201 
203  lpTemp = HeapAlloc(GetProcessHeap(), 0, dwSize * sizeof(TCHAR));
204  if (!lpTemp)
205  {
206  return 0;
207  }
208 
209  dwSize = GetWindowText(hWnd, lpTemp, dwSize);
210 
211  if (!dwSize)
212  {
213  HeapFree(GetProcessHeap(), 0, lpTemp);
214  return 0;
215  }
216 
217  hResult = StringCchCopyN(lpString, nMaxCount, lpTemp + dwStart, dwEnd - dwStart);
218  HeapFree(GetProcessHeap(), 0, lpTemp);
219 
220  switch (hResult)
221  {
222  case S_OK:
223  {
224  return dwEnd - dwStart;
225  }
226 
228  {
229  return nMaxCount - 1;
230  }
231 
232  default:
233  {
234  return 0;
235  }
236  }
237 }
238 
239 static RECT
241 {
242  int iLogPixelsX, iLogPixelsY;
243  int iHorzRes, iVertRes;
244  int iPhysPageX, iPhysPageY, iPhysPageW, iPhysPageH;
245  RECT rcPrintRect;
246 
247  iPhysPageX = GetDeviceCaps(hdc, PHYSICALOFFSETX);
248  iPhysPageY = GetDeviceCaps(hdc, PHYSICALOFFSETY);
249  iPhysPageW = GetDeviceCaps(hdc, PHYSICALWIDTH);
250  iPhysPageH = GetDeviceCaps(hdc, PHYSICALHEIGHT);
251  iLogPixelsX = GetDeviceCaps(hdc, LOGPIXELSX);
252  iLogPixelsY = GetDeviceCaps(hdc, LOGPIXELSY);
253  iHorzRes = GetDeviceCaps(hdc, HORZRES);
254  iVertRes = GetDeviceCaps(hdc, VERTRES);
255 
256  rcPrintRect.left = (margins.left * iLogPixelsX / 2540) - iPhysPageX;
257  rcPrintRect.top = (margins.top * iLogPixelsY / 2540) - iPhysPageY;
258  rcPrintRect.right = iHorzRes - (((margins.left * iLogPixelsX / 2540) - iPhysPageX) + ((margins.right * iLogPixelsX / 2540) - (iPhysPageW - iPhysPageX - iHorzRes)));
259  rcPrintRect.bottom = iVertRes - (((margins.top * iLogPixelsY / 2540) - iPhysPageY) + ((margins.bottom * iLogPixelsY / 2540) - (iPhysPageH - iPhysPageY - iVertRes)));
260 
261  return rcPrintRect;
262 }
263 
265 {
266  BOOL bRet = TRUE;
267  HANDLE hFile;
268  LPTSTR pTemp;
269  DWORD size;
270 
274  {
275  ShowLastError();
276  return FALSE;
277  }
278 
279  size = GetWindowTextLength(Globals.hEdit) + 1;
280  pTemp = HeapAlloc(GetProcessHeap(), 0, size * sizeof(*pTemp));
281  if (!pTemp)
282  {
284  ShowLastError();
285  return FALSE;
286  }
287  size = GetWindowText(Globals.hEdit, pTemp, size);
288 
289  if (size)
290  {
291  if (!WriteText(hFile, (LPWSTR)pTemp, size, Globals.encFile, Globals.iEoln))
292  {
293  ShowLastError();
294  bRet = FALSE;
295  }
296  else
297  {
299  bRet = TRUE;
300  }
301  }
302 
304  HeapFree(GetProcessHeap(), 0, pTemp);
305  return bRet;
306 }
307 
314 {
315  int nResult;
316 
317  if (SendMessage(Globals.hEdit, EM_GETMODIFY, 0, 0))
318  {
319  /* prompt user to save changes */
320  nResult = AlertFileNotSaved(Globals.szFileName);
321  switch (nResult)
322  {
323  case IDYES:
324  if(!DIALOG_FileSave())
325  return FALSE;
326  break;
327 
328  case IDNO:
329  break;
330 
331  case IDCANCEL:
332  return FALSE;
333 
334  default:
335  return FALSE;
336  }
337  }
338 
341 
342  return TRUE;
343 }
344 
346 {
347  static const TCHAR dotlog[] = _T(".LOG");
348  HANDLE hFile;
349  LPTSTR pszText = NULL;
350  DWORD dwTextLen;
351  TCHAR log[5];
352 
353  /* Close any files and prompt to save changes */
354  if (!DoCloseFile())
355  return;
356 
360  {
361  ShowLastError();
362  goto done;
363  }
364 
365  if (!ReadText(hFile, (LPWSTR *)&pszText, &dwTextLen, &Globals.encFile, &Globals.iEoln))
366  {
367  ShowLastError();
368  goto done;
369  }
370  SetWindowText(Globals.hEdit, pszText);
371 
373  SendMessage(Globals.hEdit, EM_EMPTYUNDOBUFFER, 0, 0);
374  SetFocus(Globals.hEdit);
375 
376  /* If the file starts with .LOG, add a time/date at the end and set cursor after
377  * See http://support.microsoft.com/?kbid=260563
378  */
379  if (GetWindowText(Globals.hEdit, log, ARRAY_SIZE(log)) && !_tcscmp(log, dotlog))
380  {
381  static const TCHAR lf[] = _T("\r\n");
386  }
387 
388  SetFileName(szFileName);
391 done:
394  if (pszText)
395  HeapFree(GetProcessHeap(), 0, pszText);
396 }
397 
399 {
400  /* Close any files and prompt to save changes */
401  if (DoCloseFile()) {
403  SendMessage(Globals.hEdit, EM_EMPTYUNDOBUFFER, 0, 0);
404  SetFocus(Globals.hEdit);
406  }
407 }
408 
410 {
411  OPENFILENAME openfilename;
413 
414  ZeroMemory(&openfilename, sizeof(openfilename));
415 
416  if (Globals.szFileName[0] == 0)
418  else
419  _tcscpy(szPath, Globals.szFileName);
420 
421  openfilename.lStructSize = sizeof(openfilename);
422  openfilename.hwndOwner = Globals.hMainWnd;
423  openfilename.hInstance = Globals.hInstance;
424  openfilename.lpstrFilter = Globals.szFilter;
425  openfilename.lpstrFile = szPath;
426  openfilename.nMaxFile = ARRAY_SIZE(szPath);
428  openfilename.lpstrDefExt = szDefaultExt;
429 
430  if (GetOpenFileName(&openfilename)) {
431  if (FileExists(openfilename.lpstrFile))
432  DoOpenFile(openfilename.lpstrFile);
433  else
434  AlertFileNotFound(openfilename.lpstrFile);
435  }
436 }
437 
439 {
440  if (Globals.szFileName[0] == 0)
441  {
442  return DIALOG_FileSaveAs();
443  }
444  else if (DoSaveFile())
445  {
447  return TRUE;
448  }
449  return FALSE;
450 }
451 
452 static UINT_PTR
453 CALLBACK
455 {
456  TCHAR szText[128];
457  HWND hCombo;
458 
460 
461  switch(msg)
462  {
463  case WM_INITDIALOG:
464  hCombo = GetDlgItem(hDlg, ID_ENCODING);
465 
467  SendMessage(hCombo, CB_ADDSTRING, 0, (LPARAM) szText);
468 
470  SendMessage(hCombo, CB_ADDSTRING, 0, (LPARAM) szText);
471 
473  SendMessage(hCombo, CB_ADDSTRING, 0, (LPARAM) szText);
474 
476  SendMessage(hCombo, CB_ADDSTRING, 0, (LPARAM) szText);
477 
478  SendMessage(hCombo, CB_SETCURSEL, Globals.encFile, 0);
479 
480  hCombo = GetDlgItem(hDlg, ID_EOLN);
481 
483  SendMessage(hCombo, CB_ADDSTRING, 0, (LPARAM) szText);
484 
486  SendMessage(hCombo, CB_ADDSTRING, 0, (LPARAM) szText);
487 
489  SendMessage(hCombo, CB_ADDSTRING, 0, (LPARAM) szText);
490 
491  SendMessage(hCombo, CB_SETCURSEL, Globals.iEoln, 0);
492  break;
493 
494  case WM_NOTIFY:
495  if (((NMHDR *) lParam)->code == CDN_FILEOK)
496  {
497  hCombo = GetDlgItem(hDlg, ID_ENCODING);
498  if (hCombo)
499  Globals.encFile = (ENCODING) SendMessage(hCombo, CB_GETCURSEL, 0, 0);
500 
501  hCombo = GetDlgItem(hDlg, ID_EOLN);
502  if (hCombo)
503  Globals.iEoln = (int) SendMessage(hCombo, CB_GETCURSEL, 0, 0);
504  }
505  break;
506  }
507  return 0;
508 }
509 
511 {
512  OPENFILENAME saveas;
514 
515  ZeroMemory(&saveas, sizeof(saveas));
516 
517  if (Globals.szFileName[0] == 0)
519  else
520  _tcscpy(szPath, Globals.szFileName);
521 
522  saveas.lStructSize = sizeof(OPENFILENAME);
523  saveas.hwndOwner = Globals.hMainWnd;
524  saveas.hInstance = Globals.hInstance;
525  saveas.lpstrFilter = Globals.szFilter;
526  saveas.lpstrFile = szPath;
527  saveas.nMaxFile = ARRAY_SIZE(szPath);
530  saveas.lpstrDefExt = szDefaultExt;
533 
534  if (GetSaveFileName(&saveas))
535  {
536  /* HACK: Because in ROS, Save-As boxes don't check the validity
537  * of file names and thus, here, szPath can be invalid !! We only
538  * see its validity when we call DoSaveFile()... */
540  if (DoSaveFile())
541  {
543  return TRUE;
544  }
545  else
546  {
547  SetFileName(_T(""));
548  return FALSE;
549  }
550  }
551  else
552  {
553  return FALSE;
554  }
555 }
556 
558 {
559  DOCINFO di;
560  TEXTMETRIC tm;
561  PRINTDLG printer;
562  SIZE szMetric;
563  int border;
564  int xLeft, yTop, pagecount, dopage, copycount;
565  unsigned int i;
566  LOGFONT hdrFont;
567  HFONT font, old_font=0;
568  DWORD size;
569  LPTSTR pTemp;
570  static const TCHAR times_new_roman[] = _T("Times New Roman");
571  RECT rcPrintRect;
572 
573  /* Get a small font and print some header info on each page */
574  ZeroMemory(&hdrFont, sizeof(hdrFont));
575  hdrFont.lfHeight = 100;
576  hdrFont.lfWeight = FW_BOLD;
577  hdrFont.lfCharSet = ANSI_CHARSET;
580  hdrFont.lfQuality = PROOF_QUALITY;
582  _tcscpy(hdrFont.lfFaceName, times_new_roman);
583 
584  font = CreateFontIndirect(&hdrFont);
585 
586  /* Get Current Settings */
587  ZeroMemory(&printer, sizeof(printer));
588  printer.lStructSize = sizeof(printer);
589  printer.hwndOwner = Globals.hMainWnd;
590  printer.hInstance = Globals.hInstance;
591 
592  /* Set some default flags */
593  printer.Flags = PD_RETURNDC | PD_SELECTION;
594 
595  /* Disable the selection radio button if there is no text selected */
596  if (!GetSelectionTextLength(Globals.hEdit))
597  {
598  printer.Flags = printer.Flags | PD_NOSELECTION;
599  }
600 
601  printer.nFromPage = 0;
602  printer.nMinPage = 1;
603  /* we really need to calculate number of pages to set nMaxPage and nToPage */
604  printer.nToPage = (WORD)-1;
605  printer.nMaxPage = (WORD)-1;
606 
607  /* Let commdlg manage copy settings */
608  printer.nCopies = (WORD)PD_USEDEVMODECOPIES;
609 
610  printer.hDevMode = Globals.hDevMode;
611  printer.hDevNames = Globals.hDevNames;
612 
613  if (!PrintDlg(&printer))
614  {
616  return;
617  }
618 
619  Globals.hDevMode = printer.hDevMode;
620  Globals.hDevNames = printer.hDevNames;
621 
622  assert(printer.hDC != 0);
623 
624  /* initialize DOCINFO */
625  di.cbSize = sizeof(DOCINFO);
626  di.lpszDocName = Globals.szFileTitle;
627  di.lpszOutput = NULL;
628  di.lpszDatatype = NULL;
629  di.fwType = 0;
630 
631  if (StartDoc(printer.hDC, &di) <= 0)
632  {
634  return;
635  }
636 
637 
638  /* Get the file text */
639  if (printer.Flags & PD_SELECTION)
640  {
641  size = GetSelectionTextLength(Globals.hEdit) + 1;
642  }
643  else
644  {
645  size = GetWindowTextLength(Globals.hEdit) + 1;
646  }
647 
648  pTemp = HeapAlloc(GetProcessHeap(), 0, size * sizeof(TCHAR));
649  if (!pTemp)
650  {
651  EndDoc(printer.hDC);
653  ShowLastError();
654  return;
655  }
656 
657  if (printer.Flags & PD_SELECTION)
658  {
659  size = GetSelectionText(Globals.hEdit, pTemp, size);
660  }
661  else
662  {
663  size = GetWindowText(Globals.hEdit, pTemp, size);
664  }
665 
666  /* Get the current printing area */
667  rcPrintRect = GetPrintingRect(printer.hDC, Globals.lMargins);
668 
669  /* Ensure that each logical unit maps to one pixel */
670  SetMapMode(printer.hDC, MM_TEXT);
671 
672  /* Needed to get the correct height of a text line */
673  GetTextMetrics(printer.hDC, &tm);
674 
675  border = 15;
676  for (copycount=1; copycount <= printer.nCopies; copycount++) {
677  i = 0;
678  pagecount = 1;
679  do {
680  /* Don't start a page if none of the conditions below are true */
681  dopage = 0;
682 
683  /* The user wants to print the current selection */
684  if (printer.Flags & PD_SELECTION)
685  {
686  dopage = 1;
687  }
688 
689  /* The user wants to print the entire document */
690  if (!(printer.Flags & PD_PAGENUMS) && !(printer.Flags & PD_SELECTION))
691  {
692  dopage = 1;
693  }
694 
695  /* The user wants to print a specified range of pages */
696  if ((pagecount >= printer.nFromPage && pagecount <= printer.nToPage))
697  {
698  dopage = 1;
699  }
700 
701  old_font = SelectObject(printer.hDC, font);
702 
703  if (dopage) {
704  if (StartPage(printer.hDC) <= 0) {
705  SelectObject(printer.hDC, old_font);
706  EndDoc(printer.hDC);
707  DeleteDC(printer.hDC);
708  HeapFree(GetProcessHeap(), 0, pTemp);
710  AlertPrintError();
711  return;
712  }
713 
714  SetViewportOrgEx(printer.hDC, rcPrintRect.left, rcPrintRect.top, NULL);
715 
716  /* Write a rectangle and header at the top of each page */
717  Rectangle(printer.hDC, border, border, rcPrintRect.right - border, border + tm.tmHeight * 2);
718  /* I don't know what's up with this TextOut command. This comes out
719  kind of mangled.
720  */
721  TextOut(printer.hDC,
722  border * 2,
723  border + tm.tmHeight / 2,
724  Globals.szFileTitle,
725  lstrlen(Globals.szFileTitle));
726  }
727 
728  /* The starting point for the main text */
729  xLeft = 0;
730  yTop = border + tm.tmHeight * 4;
731 
732  SelectObject(printer.hDC, old_font);
733 
734  /* Since outputting strings is giving me problems, output the main
735  * text one character at a time. */
736  do {
737  if (pTemp[i] == '\n') {
738  xLeft = 0;
739  yTop += tm.tmHeight;
740  }
741  else if (pTemp[i] != '\r') {
742  if (dopage)
743  TextOut(printer.hDC, xLeft, yTop, &pTemp[i], 1);
744 
745  /* We need to get the width for each individual char, since a proportional font may be used */
746  GetTextExtentPoint32(printer.hDC, &pTemp[i], 1, &szMetric);
747  xLeft += szMetric.cx;
748 
749  /* Insert a line break if the current line does not fit into the printing area */
750  if (xLeft > rcPrintRect.right)
751  {
752  xLeft = 0;
753  yTop = yTop + tm.tmHeight;
754  }
755  }
756  } while (i++ < size && yTop < rcPrintRect.bottom);
757 
758  if (dopage)
759  EndPage(printer.hDC);
760  pagecount++;
761  } while (i < size);
762  }
763 
764  if (old_font != 0)
765  SelectObject(printer.hDC, old_font);
766  EndDoc(printer.hDC);
767  DeleteDC(printer.hDC);
768  HeapFree(GetProcessHeap(), 0, pTemp);
770 }
771 
773 {
775 }
776 
778 {
779  SendMessage(Globals.hEdit, EM_UNDO, 0, 0);
780 }
781 
783 {
784  SendMessage(Globals.hEdit, WM_CUT, 0, 0);
785 }
786 
788 {
789  SendMessage(Globals.hEdit, WM_COPY, 0, 0);
790 }
791 
793 {
794  SendMessage(Globals.hEdit, WM_PASTE, 0, 0);
795 }
796 
798 {
799  SendMessage(Globals.hEdit, WM_CLEAR, 0, 0);
800 }
801 
803 {
804  SendMessage(Globals.hEdit, EM_SETSEL, 0, (LPARAM)-1);
805 }
806 
808 {
809  SYSTEMTIME st;
811  TCHAR szText[MAX_STRING_LEN * 2 + 2];
812 
813  GetLocalTime(&st);
814 
817  _tcscat(szText, _T(" "));
821 }
822 
824 {
825  RECT rc;
826  RECT rcstatus;
827  BOOL bStatusBarVisible;
828 
829  /* Check if status bar object already exists. */
830  if (Globals.hStatusBar == NULL)
831  {
832  /* Try to create the status bar */
834  NULL,
837 
838  if (Globals.hStatusBar == NULL)
839  {
840  ShowLastError();
841  return;
842  }
843 
844  /* Load the string for formatting column/row text output */
845  LoadString(Globals.hInstance, STRING_LINE_COLUMN, Globals.szStatusBarLineCol, MAX_PATH - 1);
846 
847  /* Set the status bar for single-text output */
848  SendMessage(Globals.hStatusBar, SB_SIMPLE, (WPARAM)TRUE, (LPARAM)0);
849  }
850 
851  /* Set status bar visiblity according to the settings. */
852  if ((Globals.bWrapLongLines != FALSE) || (Globals.bShowStatusBar == FALSE))
853  {
854  bStatusBarVisible = FALSE;
855  ShowWindow(Globals.hStatusBar, SW_HIDE);
856  }
857  else
858  {
859  bStatusBarVisible = TRUE;
860  ShowWindow(Globals.hStatusBar, SW_SHOW);
861  SendMessage(Globals.hStatusBar, WM_SIZE, 0, 0);
862  }
863 
864  /* Set check state in show status bar item. */
865  if (bStatusBarVisible)
866  {
868  }
869  else
870  {
872  }
873 
874  /* Update menu mar with the previous changes */
876 
877  /* Sefety test is edit control exists */
878  if (Globals.hEdit != NULL)
879  {
880  /* Retrieve the sizes of the controls */
882  GetClientRect(Globals.hStatusBar, &rcstatus);
883 
884  /* If status bar is currently visible, update dimensions of edit control */
885  if (bStatusBarVisible)
886  rc.bottom -= (rcstatus.bottom - rcstatus.top);
887 
888  /* Resize edit control to right size. */
889  MoveWindow(Globals.hEdit,
890  rc.left,
891  rc.top,
892  rc.right - rc.left,
893  rc.bottom - rc.top,
894  TRUE);
895  }
896 
897  /* Update content with current row/column text */
899 }
900 
902 {
903  DWORD dwStyle;
904  int iSize;
905  LPTSTR pTemp = NULL;
906  BOOL bModified = FALSE;
907 
908  iSize = 0;
909 
910  /* If the edit control already exists, try to save its content */
911  if (Globals.hEdit != NULL)
912  {
913  /* number of chars currently written into the editor. */
914  iSize = GetWindowTextLength(Globals.hEdit);
915  if (iSize)
916  {
917  /* Allocates temporary buffer. */
918  pTemp = HeapAlloc(GetProcessHeap(), 0, (iSize + 1) * sizeof(TCHAR));
919  if (!pTemp)
920  {
921  ShowLastError();
922  return;
923  }
924 
925  /* Recover the text into the control. */
926  GetWindowText(Globals.hEdit, pTemp, iSize + 1);
927 
928  if (SendMessage(Globals.hEdit, EM_GETMODIFY, 0, 0))
929  bModified = TRUE;
930  }
931 
932  /* Restore original window procedure */
934 
935  /* Destroy the edit control */
936  DestroyWindow(Globals.hEdit);
937  }
938 
939  /* Update wrap status into the main menu and recover style flags */
940  if (Globals.bWrapLongLines)
941  {
942  dwStyle = EDIT_STYLE_WRAP;
944  } else {
945  dwStyle = EDIT_STYLE;
947  }
948 
949  /* Update previous changes */
951 
952  /* Create the new edit control */
954  EDIT_CLASS,
955  NULL,
956  dwStyle,
962  NULL,
964  NULL);
965 
966  if (Globals.hEdit == NULL)
967  {
968  if (pTemp)
969  {
970  HeapFree(GetProcessHeap(), 0, pTemp);
971  }
972 
973  ShowLastError();
974  return;
975  }
976 
978  SendMessage(Globals.hEdit, EM_LIMITTEXT, 0, 0);
979 
980  /* If some text was previously saved, restore it. */
981  if (iSize != 0)
982  {
983  SetWindowText(Globals.hEdit, pTemp);
984  HeapFree(GetProcessHeap(), 0, pTemp);
985 
986  if (bModified)
987  SendMessage(Globals.hEdit, EM_SETMODIFY, TRUE, 0);
988  }
989 
990  /* Sub-class a new window callback for row/column detection. */
991  Globals.EditProc = (WNDPROC)SetWindowLongPtr(Globals.hEdit,
992  GWLP_WNDPROC,
994 
995  /* Create/update status bar */
997 
998  /* Finally shows new edit control and set focus into it. */
999  ShowWindow(Globals.hEdit, SW_SHOW);
1000  SetFocus(Globals.hEdit);
1001 }
1002 
1004 {
1005  Globals.bWrapLongLines = !Globals.bWrapLongLines;
1006 
1007  if (Globals.bWrapLongLines)
1008  {
1010  }
1011  else
1012  {
1014  }
1015 
1017 }
1018 
1020 {
1021  CHOOSEFONT cf;
1022  LOGFONT lf = Globals.lfFont;
1023 
1024  ZeroMemory( &cf, sizeof(cf) );
1025  cf.lStructSize = sizeof(cf);
1026  cf.hwndOwner = Globals.hMainWnd;
1027  cf.lpLogFont = &lf;
1029 
1030  if (ChooseFont(&cf))
1031  {
1032  HFONT currfont = Globals.hFont;
1033 
1034  Globals.hFont = CreateFontIndirect(&lf);
1035  Globals.lfFont = lf;
1037  if (currfont != NULL)
1038  DeleteObject(currfont);
1039  }
1040 }
1041 
1043 
1045 {
1046  if (Globals.hFindReplaceDlg != NULL)
1047  {
1048  SetFocus(Globals.hFindReplaceDlg);
1049  return;
1050  }
1051 
1052  ZeroMemory(&Globals.find, sizeof(Globals.find));
1053  Globals.find.lStructSize = sizeof(Globals.find);
1054  Globals.find.hwndOwner = Globals.hMainWnd;
1056  Globals.find.lpstrFindWhat = Globals.szFindText;
1057  Globals.find.wFindWhatLen = ARRAY_SIZE(Globals.szFindText);
1058  Globals.find.lpstrReplaceWith = Globals.szReplaceText;
1059  Globals.find.wReplaceWithLen = ARRAY_SIZE(Globals.szReplaceText);
1060  Globals.find.Flags = FR_DOWN;
1061 
1062  /* We only need to create the modal FindReplace dialog which will */
1063  /* notify us of incoming events using hMainWnd Window Messages */
1064 
1065  Globals.hFindReplaceDlg = pfnProc(&Globals.find);
1066  assert(Globals.hFindReplaceDlg != NULL);
1067 }
1068 
1070 {
1072 }
1073 
1075 {
1076  if (Globals.find.lpstrFindWhat != NULL)
1078  else
1079  DIALOG_Search();
1080 }
1081 
1083 {
1085 }
1086 
1087 static INT_PTR
1088 CALLBACK
1090 {
1091  BOOL bResult = FALSE;
1092  HWND hTextBox;
1093  TCHAR szText[32];
1094 
1095  switch(uMsg) {
1096  case WM_INITDIALOG:
1097  hTextBox = GetDlgItem(hwndDialog, ID_LINENUMBER);
1099  SetWindowText(hTextBox, szText);
1100  break;
1101  case WM_COMMAND:
1102  if (HIWORD(wParam) == BN_CLICKED)
1103  {
1104  if (LOWORD(wParam) == IDOK)
1105  {
1106  hTextBox = GetDlgItem(hwndDialog, ID_LINENUMBER);
1107  GetWindowText(hTextBox, szText, ARRAY_SIZE(szText));
1109  bResult = TRUE;
1110  }
1111  else if (LOWORD(wParam) == IDCANCEL)
1112  {
1113  EndDialog(hwndDialog, 0);
1114  bResult = TRUE;
1115  }
1116  }
1117  break;
1118  }
1119 
1120  return bResult;
1121 }
1122 
1124 {
1125  INT_PTR nLine;
1126  LPTSTR pszText;
1127  int nLength, i;
1128  DWORD dwStart, dwEnd;
1129 
1131  pszText = (LPTSTR) HeapAlloc(GetProcessHeap(), 0, (nLength + 1) * sizeof(*pszText));
1132  if (!pszText)
1133  return;
1134 
1135  /* Retrieve current text */
1136  GetWindowText(Globals.hEdit, pszText, nLength + 1);
1137  SendMessage(Globals.hEdit, EM_GETSEL, (WPARAM) &dwStart, (LPARAM) &dwEnd);
1138 
1139  nLine = 1;
1140  for (i = 0; (i < (int) dwStart) && pszText[i]; i++)
1141  {
1142  if (pszText[i] == '\n')
1143  nLine++;
1144  }
1145 
1148  Globals.hMainWnd,
1150  nLine);
1151 
1152  if (nLine >= 1)
1153  {
1154  for (i = 0; pszText[i] && (nLine > 1) && (i < nLength - 1); i++)
1155  {
1156  if (pszText[i] == '\n')
1157  nLine--;
1158  }
1159  SendMessage(Globals.hEdit, EM_SETSEL, i, i);
1160  SendMessage(Globals.hEdit, EM_SCROLLCARET, 0, 0);
1161  }
1162  HeapFree(GetProcessHeap(), 0, pszText);
1163 }
1164 
1166 {
1167  int line, col;
1168  TCHAR buff[MAX_PATH];
1169  DWORD dwStart, dwSize;
1170 
1171  SendMessage(Globals.hEdit, EM_GETSEL, (WPARAM)&dwStart, (LPARAM)&dwSize);
1172  line = SendMessage(Globals.hEdit, EM_LINEFROMCHAR, (WPARAM)dwStart, 0);
1173  col = dwStart - SendMessage(Globals.hEdit, EM_LINEINDEX, (WPARAM)line, 0);
1174 
1175  _stprintf(buff, Globals.szStatusBarLineCol, line + 1, col + 1);
1177 }
1178 
1180 {
1181  Globals.bShowStatusBar = !Globals.bShowStatusBar;
1182 
1184 }
1185 
1187 {
1189 }
1190 
1192 {
1193  TCHAR szNotepad[MAX_STRING_LEN];
1194  TCHAR szNotepadAuthors[MAX_STRING_LEN];
1195 
1197 
1198  LoadString(Globals.hInstance, STRING_NOTEPAD, szNotepad, ARRAY_SIZE(szNotepad));
1199  LoadString(Globals.hInstance, STRING_NOTEPAD_AUTHORS, szNotepadAuthors, ARRAY_SIZE(szNotepadAuthors));
1200 
1201  ShellAbout(Globals.hMainWnd, szNotepad, szNotepadAuthors, notepadIcon);
1202  DeleteObject(notepadIcon);
1203 }
1204 
1205 /***********************************************************************
1206  *
1207  * DIALOG_FilePageSetup
1208  */
1210 {
1212 
1213  ZeroMemory(&page, sizeof(page));
1214  page.lStructSize = sizeof(page);
1215  page.hwndOwner = Globals.hMainWnd;
1217  page.hInstance = Globals.hInstance;
1218  page.rtMargin = Globals.lMargins;
1219  page.hDevMode = Globals.hDevMode;
1220  page.hDevNames = Globals.hDevNames;
1221  page.lpPageSetupTemplateName = MAKEINTRESOURCE(DIALOG_PAGESETUP);
1222  page.lpfnPageSetupHook = DIALOG_PAGESETUP_Hook;
1223 
1224  PageSetupDlg(&page);
1225 
1226  Globals.hDevMode = page.hDevMode;
1227  Globals.hDevNames = page.hDevNames;
1228  Globals.lMargins = page.rtMargin;
1229 }
1230 
1231 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
1232  *
1233  * DIALOG_PAGESETUP_Hook
1234  */
1235 
1237 {
1238  switch (msg)
1239  {
1240  case WM_COMMAND:
1241  if (HIWORD(wParam) == BN_CLICKED)
1242  {
1243  switch (LOWORD(wParam))
1244  {
1245  case IDOK:
1246  /* save user input and close dialog */
1247  GetDlgItemText(hDlg, 0x141, Globals.szHeader, ARRAY_SIZE(Globals.szHeader));
1248  GetDlgItemText(hDlg, 0x143, Globals.szFooter, ARRAY_SIZE(Globals.szFooter));
1249  return FALSE;
1250 
1251  case IDCANCEL:
1252  /* discard user input and close dialog */
1253  return FALSE;
1254 
1255  case IDHELP:
1256  {
1257  /* FIXME: Bring this to work */
1258  static const TCHAR sorry[] = _T("Sorry, no help available");
1259  static const TCHAR help[] = _T("Help");
1261  return TRUE;
1262  }
1263 
1264  default:
1265  break;
1266  }
1267  }
1268  break;
1269 
1270  case WM_INITDIALOG:
1271  /* fetch last user input prior to display dialog */
1272  SetDlgItemText(hDlg, 0x141, Globals.szHeader);
1273  SetDlgItemText(hDlg, 0x143, Globals.szFooter);
1274  break;
1275  }
1276 
1277  return FALSE;
1278 }
#define MB_ICONMASK
Definition: winuser.h:813
#define EM_LIMITTEXT
Definition: winuser.h:1961
static UINT_PTR CALLBACK DIALOG_PAGESETUP_Hook(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam)
Definition: dialog.c:1236
#define OFN_FILEMUSTEXIST
Definition: commdlg.h:106
static IClassFactory * cf
void UpdateWindowCaption(BOOL clearModifyAlert)
Definition: dialog.c:66
#define OFN_EXPLORER
Definition: commdlg.h:104
VOID DIALOG_Search(VOID)
Definition: dialog.c:1069
#define STRING_LINE_COLUMN
Definition: notepad_res.h:99
#define MAKEINTRESOURCE
Definition: winuser.h:591
#define STRING_LF
Definition: notepad_res.h:96
#define HORZRES
Definition: wingdi.h:715
#define LOGPIXELSX
Definition: wingdi.h:717
BOOL WINAPI SetViewportOrgEx(_In_ HDC, _In_ int, _In_ int, _Out_opt_ LPPOINT)
Definition: coord.c:648
static HICON
Definition: imagelist.c:84
#define MF_DISABLED
Definition: winuser.h:130
#define PD_NOSELECTION
Definition: commdlg.h:149
#define TRUE
Definition: types.h:120
static UINT_PTR CALLBACK DIALOG_FileSaveAs_Hook(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam)
Definition: dialog.c:454
const CHAR * LPCTSTR
Definition: xmlstorage.h:193
#define IDOK
Definition: winuser.h:824
#define CloseHandle
Definition: compat.h:398
WORD nMaxPage
Definition: commdlg.h:474
BOOL WINAPI DrawMenuBar(_In_ HWND)
#define VARIABLE_PITCH
Definition: wingdi.h:444
static const TCHAR empty_str[]
Definition: dialog.c:32
#define STRING_ANSI
Definition: notepad_res.h:90
#define MF_BYCOMMAND
Definition: winuser.h:202
VOID DoOpenFile(LPCTSTR szFileName)
Definition: dialog.c:345
#define PSD_ENABLEPAGESETUPTEMPLATE
Definition: commdlg.h:184
#define PageSetupDlg
Definition: commdlg.h:667
#define WM_CUT
Definition: winuser.h:1822
#define error(str)
Definition: mkdosfs.c:1605
#define IDYES
Definition: winuser.h:829
VOID DIALOG_FileExit(VOID)
Definition: dialog.c:772
BOOL WINAPI Rectangle(_In_ HDC, _In_ int, _In_ int, _In_ int, _In_ int)
HWND hwndOwner
Definition: commdlg.h:330
#define STRING_UTF8
Definition: notepad_res.h:93
Definition: mk_font.cpp:20
static BOOL DoSaveFile(VOID)
Definition: dialog.c:264
int _tcscmp(const _TCHAR *s1, const _TCHAR *s2)
Definition: tcscmp.h:8
#define UNREFERENCED_PARAMETER(P)
Definition: ntbasedef.h:323
#define SW_HIDE
Definition: winuser.h:762
#define PSD_MARGINS
Definition: commdlg.h:173
VOID DIALOG_EditSelectAll(VOID)
Definition: dialog.c:802
#define LOCALE_USER_DEFAULT
uint8_t entry
Definition: isohybrid.c:63
static HDC
Definition: imagelist.c:92
#define CALLBACK
Definition: compat.h:27
_In_ DWORD nLength
Definition: wincon.h:461
HWND hWnd
Definition: settings.c:17
LONG top
Definition: windef.h:292
HANDLE HWND
Definition: compat.h:13
HGDIOBJ WINAPI SelectObject(_In_ HDC, _In_ HGDIOBJ)
Definition: dc.c:1497
#define WM_PASTE
Definition: winuser.h:1824
#define INVALID_HANDLE_VALUE
Definition: compat.h:391
_TCHAR * _tcscpy(_TCHAR *to, const _TCHAR *from)
Definition: tcscpy.h:8
#define assert(x)
Definition: debug.h:53
#define StringCchCopyN
Definition: strsafe.h:227
DWORD WINAPI GetLastError(VOID)
Definition: except.c:1059
#define ZeroMemory
Definition: winbase.h:1635
BOOL WINAPI DeleteObject(_In_ HGDIOBJ)
LPCSTR lpstrDefExt
Definition: commdlg.h:345
#define MAX_STRING_LEN
Definition: precomp.h:36
HWND WINAPI SetFocus(_In_opt_ HWND)
BYTE lfCharSet
Definition: dimm.idl:50
WORD nCopies
Definition: commdlg.h:475
static void AlertFileNotFound(LPCTSTR szFileName)
Definition: dialog.c:119
UINT_PTR WPARAM
Definition: windef.h:207
#define WS_CHILD
Definition: pedump.c:617
BOOL WriteText(HANDLE hFile, LPCWSTR pszText, DWORD dwTextLen, ENCODING encFile, int iEoln)
Definition: text.c:319
LPCSTR lpTemplateName
Definition: commdlg.h:348
LONG left
Definition: windef.h:291
#define FILE_SHARE_WRITE
Definition: nt_native.h:681
BOOL WINAPI ShowWindow(_In_ HWND, _In_ int)
VOID DIALOG_EditCopy(VOID)
Definition: dialog.c:787
int32_t INT_PTR
Definition: typedefs.h:62
BOOL NOTEPAD_FindNext(FINDREPLACE *pFindReplace, BOOL bReplace, BOOL bShowAlert)
Definition: main.c:138
BOOL HasFileExtension(LPCTSTR szFilename)
Definition: dialog.c:162
#define GetTextMetrics
Definition: wingdi.h:4452
#define CMD_GOTO
Definition: notepad_res.h:55
#define WM_CLEAR
Definition: winuser.h:1825
LONG right
Definition: windef.h:293
#define NO_ERROR
Definition: dderror.h:5
BOOL WINAPI DestroyWindow(_In_ HWND)
#define STRSAFE_E_INSUFFICIENT_BUFFER
Definition: strsafe.h:103
#define PROOF_QUALITY
Definition: wingdi.h:437
#define SetWindowLongPtr
Definition: treelist.c:70
#define GetOpenFileName
Definition: commdlg.h:665
#define CB_GETCURSEL
Definition: winuser.h:1904
WPARAM wParam
Definition: combotst.c:138
CHAR * LPTSTR
Definition: xmlstorage.h:192
int WINAPI EndPage(_In_ HDC)
#define FILE_SHARE_READ
Definition: compat.h:125
static RECT GetPrintingRect(HDC hdc, RECT margins)
Definition: dialog.c:240
BYTE lfOutPrecision
Definition: dimm.idl:51
#define ID_ENCODING
Definition: notepad_res.h:28
WORD nMinPage
Definition: commdlg.h:473
#define GetWindowText
Definition: winuser.h:5664
#define STRING_NOTEPAD_AUTHORS
Definition: notepad_res.h:104
DWORD nMaxFile
Definition: commdlg.h:337
#define IDHELP
Definition: resource_2.h:8
#define EM_GETSEL
Definition: winuser.h:1958
int WINAPI StartPage(_In_ HDC)
#define MB_ICONEXCLAMATION
Definition: winuser.h:779
#define ChooseFont
Definition: commdlg.h:662
#define PHYSICALHEIGHT
Definition: wingdi.h:735
#define GetSaveFileName
Definition: commdlg.h:666
BOOL ReadText(HANDLE hFile, LPWSTR *ppszText, DWORD *pdwTextLen, ENCODING *pencFile, int *piEoln)
Definition: text.c:51
#define PrintDlg
Definition: commdlg.h:668
CLIPBOARD_GLOBALS Globals
Definition: clipbrd.c:13
#define CMD_STATUSBAR
Definition: notepad_res.h:60
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
BOOL WINAPI EnableMenuItem(_In_ HMENU, _In_ UINT, _In_ UINT)
LPOFNHOOKPROC lpfnHook
Definition: commdlg.h:347
#define STRING_NOTEPAD
Definition: notepad_res.h:74
static const WCHAR szText[]
Definition: dialog.c:139
#define DIALOG_PAGESETUP
Definition: notepad_res.h:25
#define WM_COPY
Definition: winuser.h:1823
BOOL FileExists(LPCTSTR szFilename)
Definition: dialog.c:151
unsigned int BOOL
Definition: ntddk_ex.h:94
int WINAPI SetMapMode(_In_ HDC, _In_ int)
#define CreateStatusWindow
Definition: commctrl.h:1905
#define CF_SCREENFONTS
Definition: commdlg.h:59
LONG lfHeight
Definition: dimm.idl:42
#define GENERIC_WRITE
Definition: nt_native.h:90
#define CLIP_DEFAULT_PRECIS
Definition: wingdi.h:425
BOOL DoCloseFile(VOID)
Definition: dialog.c:313
#define OFN_ENABLEHOOK
Definition: commdlg.h:99
#define STRING_NOTSAVED
Definition: notepad_res.h:84
#define FORMAT_MESSAGE_ALLOCATE_BUFFER
Definition: winbase.h:400
#define SB_SIMPLEID
Definition: precomp.h:15
VOID DIALOG_EditDelete(VOID)
Definition: dialog.c:797
#define OFN_ENABLETEMPLATE
Definition: commdlg.h:102
#define CreateWindowEx
Definition: winuser.h:5621
#define CW_USEDEFAULT
Definition: winuser.h:225
#define SB_SIMPLE
Definition: commctrl.h:1930
#define CB_ADDSTRING
Definition: winuser.h:1897
VOID DIALOG_FilePageSetup(void)
Definition: dialog.c:1209
LONG lfWeight
Definition: dimm.idl:46
WORD nFromPage
Definition: commdlg.h:471
smooth NULL
Definition: ftsmooth.c:416
#define MB_ICONQUESTION
Definition: winuser.h:783
VOID DoCreateStatusBar(VOID)
Definition: dialog.c:823
#define MB_YESNOCANCEL
Definition: winuser.h:812
int GetSelectionText(HWND hWnd, LPTSTR lpString, int nMaxCount)
Definition: dialog.c:182
LONG cx
Definition: windef.h:319
#define PD_SELECTION
Definition: commdlg.h:147
LONG_PTR LPARAM
Definition: windef.h:208
Definition: parser.c:48
#define PD_RETURNDC
Definition: commdlg.h:155
Definition: module.h:566
VOID WINAPI GetLocalTime(OUT LPSYSTEMTIME lpSystemTime)
Definition: time.c:276
#define STRING_UNICODE_BE
Definition: notepad_res.h:92
HINSTANCE hInstance
Definition: commdlg.h:331
BYTE lfPitchAndFamily
Definition: dimm.idl:54
static const TCHAR szDefaultExt[]
Definition: dialog.c:33
OPENFILENAMEA OPENFILENAME
Definition: commdlg.h:657
#define FindFirstFile
Definition: winbase.h:3596
#define SW_SHOW
Definition: winuser.h:769
VOID DIALOG_SelectFont(VOID)
Definition: dialog.c:1019
VOID DIALOG_GoTo(VOID)
Definition: dialog.c:1123
#define FORMAT_MESSAGE_FROM_SYSTEM
Definition: winbase.h:404
VOID DIALOG_SearchNext(VOID)
Definition: dialog.c:1074
#define STRING_CRLF
Definition: notepad_res.h:95
VOID DoCreateEditWindow(VOID)
Definition: dialog.c:901
#define STRING_PRINTERROR
Definition: notepad_res.h:100
#define PostMessage
Definition: winuser.h:5698
#define OFN_PATHMUSTEXIST
Definition: commdlg.h:117
r l[0]
Definition: byte_order.h:167
static VOID SetFileName(PCONSOLE_CHILDFRM_WND Info, PWSTR pFileName)
Definition: console.c:177
#define MF_CHECKED
Definition: winuser.h:132
#define DIALOG_ENCODING
Definition: notepad_res.h:27
char TCHAR
Definition: xmlstorage.h:189
#define DIALOG_GOTO
Definition: notepad_res.h:30
#define _T(x)
Definition: vfdio.h:22
DWORD fwType
Definition: wingdi.h:1658
VOID ShowLastError(VOID)
Definition: dialog.c:38
GLsizeiptr size
Definition: glext.h:5919
LPCSTR lpszOutput
Definition: wingdi.h:1656
#define GetDlgItemText
Definition: winuser.h:5651
#define GetProcessHeap()
Definition: compat.h:395
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
#define PHYSICALOFFSETY
Definition: wingdi.h:737
#define STRING_UNTITLED
Definition: notepad_res.h:78
#define WM_SIZE
Definition: winuser.h:1593
LONG HRESULT
Definition: typedefs.h:77
#define EDIT_CLASS
Definition: main.h:32
VOID DIALOG_EditPaste(VOID)
Definition: dialog.c:792
VOID DIALOG_FileOpen(VOID)
Definition: dialog.c:409
#define CDN_FILEOK
Definition: commdlg.h:38
#define StringCbPrintf
Definition: strsafe.h:544
#define MF_ENABLED
Definition: winuser.h:128
#define WM_CLOSE
Definition: winuser.h:1603
GLint GLint GLsizei GLsizei GLsizei GLint border
Definition: gl.h:1546
#define MAX_PATH
Definition: compat.h:26
DWORD lStructSize
Definition: commdlg.h:329
#define EM_GETMODIFY
Definition: winuser.h:1955
VOID DIALOG_StatusBarUpdateCaretPos(VOID)
Definition: dialog.c:1165
#define WINAPI
Definition: msvc.h:8
#define EM_SETSEL
Definition: winuser.h:1979
#define ReplaceText
Definition: commdlg.h:669
VOID DIALOG_FilePrint(VOID)
Definition: dialog.c:557
unsigned short WORD
Definition: ntddk_ex.h:93
#define OUT_DEFAULT_PRECIS
Definition: wingdi.h:414
#define BN_CLICKED
Definition: winuser.h:1886
unsigned long DWORD
Definition: ntddk_ex.h:95
HGLOBAL hDevMode
Definition: commdlg.h:467
DWORD WINAPI CheckMenuItem(_In_ HMENU, _In_ UINT, _In_ UINT)
#define ShellAbout
Definition: shellapi.h:688
unsigned __int3264 UINT_PTR
Definition: mstsclib_h.h:274
#define OPEN_ALWAYS
Definition: disk.h:70
#define SetDlgItemText
Definition: winuser.h:5715
#define ID_EOLN
Definition: notepad_res.h:29
TCHAR szTitle[MAX_LOADSTRING]
Definition: magnifier.c:36
#define PD_PAGENUMS
Definition: commdlg.h:148
#define FormatMessage
Definition: winbase.h:3609
#define DialogBoxParam
Definition: winuser.h:5630
LPCSTR lpszDatatype
Definition: wingdi.h:1657
char line[200]
Definition: main.c:97
#define FILE_ATTRIBUTE_NORMAL
Definition: compat.h:126
#define EM_UNDO
Definition: winuser.h:1982
int DIALOG_StringMsgBox(HWND hParent, int formatId, LPCTSTR szString, DWORD dwFlags)
Definition: dialog.c:98
#define EM_EMPTYUNDOBUFFER
Definition: winuser.h:1946
#define StringCchCopy
Definition: strsafe.h:139
HDC hdc
Definition: main.c:9
#define PD_USEDEVMODECOPIES
Definition: commdlg.h:165
static const TCHAR txt_files[]
Definition: dialog.c:34
#define SB_SETTEXT
Definition: commctrl.h:1921
HWND(WINAPI * FINDPROC)(LPFINDREPLACE lpfr)
Definition: dialog.c:1042
_In_ PCCERT_CONTEXT _In_ DWORD dwFlags
Definition: wincrypt.h:1175
static const WCHAR szDate[]
Definition: http.c:99
#define MB_ICONERROR
Definition: winuser.h:781
int WINAPI GetDeviceCaps(_In_opt_ HDC, _In_ int)
const DOCKBAR PVOID HWND hParent
Definition: tooldock.h:22
#define _sntprintf
Definition: xmlstorage.h:201
#define OFN_HIDEREADONLY
Definition: commdlg.h:107
GLdouble s
Definition: gl.h:2039
#define MessageBox
Definition: winuser.h:5688
#define HELP_INDEX
Definition: winuser.h:2364
#define GENERIC_READ
Definition: compat.h:124
#define CB_SETCURSEL
Definition: winuser.h:1922
#define EM_SETMODIFY
Definition: winuser.h:1974
Definition: time.h:76
#define FF_ROMAN
Definition: wingdi.h:449
#define WM_COMMAND
Definition: winuser.h:1716
int cbSize
Definition: wingdi.h:1654
#define MF_UNCHECKED
Definition: winuser.h:204
_In_ HANDLE hFile
Definition: mswsock.h:90
BOOL WINAPI MoveWindow(_In_ HWND, _In_ int, _In_ int, _In_ int, _In_ int, _In_ BOOL)
static RECT margins
Definition: print.c:55
#define GWLP_WNDPROC
Definition: treelist.c:66
BYTE lfQuality
Definition: dimm.idl:53
HWND hwndOwner
Definition: commdlg.h:466
LRESULT(CALLBACK * WNDPROC)(HWND, UINT, WPARAM, LPARAM)
Definition: winuser.h:2859
#define PHYSICALOFFSETX
Definition: wingdi.h:736
#define GetTimeFormat
Definition: winnls.h:1186
#define _stprintf
Definition: utility.h:124
BOOL WINAPI GetClientRect(_In_ HWND, _Out_ LPRECT)
ENCODING
Definition: more.c:155
#define PHYSICALWIDTH
Definition: wingdi.h:734
#define S_OK
Definition: intsafe.h:59
#define CREATE_ALWAYS
Definition: disk.h:72
#define lstrlen
Definition: winbase.h:3690
LRESULT CALLBACK EDIT_WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
Definition: main.c:304
#define FW_BOLD
Definition: wingdi.h:377
BOOL WINAPI EndDialog(HWND hwnd, INT_PTR retval)
Definition: dialog.c:2015
#define WS_EX_CLIENTEDGE
Definition: winuser.h:384
HINSTANCE hInstance
Definition: commdlg.h:476
VOID DIALOG_EditUndo(VOID)
Definition: dialog.c:777
BOOL WINAPI DeleteDC(_In_ HDC)
IN OUT PVCB OUT PDIRENT OUT PBCB IN BOOLEAN CreateFile
Definition: fatprocs.h:904
#define EM_LINEFROMCHAR
Definition: winuser.h:1962
LPSTR lpstrFile
Definition: commdlg.h:336
LPCWSTR szPath
Definition: env.c:35
static VOID DIALOG_SearchDialog(FINDPROC pfnProc)
Definition: dialog.c:1044
#define GetDateFormat
Definition: winnls.h:1181
#define ARRAY_SIZE(a)
Definition: main.h:24
HLOCAL NTAPI LocalFree(HLOCAL hMem)
Definition: heapmem.c:1577
LPCSTR lpszDocName
Definition: wingdi.h:1655
BYTE lfClipPrecision
Definition: dimm.idl:52
HGLOBAL hDevNames
Definition: commdlg.h:468
#define FindText
Definition: commdlg.h:663
#define IDI_NPICON
Definition: notepad_res.h:32
#define OFN_OVERWRITEPROMPT
Definition: commdlg.h:116
#define DATE_LONGDATE
Definition: winnls.h:194
int CDECL _ttoi(const _TCHAR *str)
Definition: atoi.c:10
__int3264 LONG_PTR
Definition: mstsclib_h.h:276
#define STRING_ERROR
Definition: notepad_res.h:75
#define SetWindowText
Definition: winuser.h:5723
LPCSTR lpstrFilter
Definition: commdlg.h:332
#define ID_LINENUMBER
Definition: notepad_res.h:31
#define CreateFontIndirect
Definition: wingdi.h:4422
unsigned int UINT
Definition: ndis.h:50
#define MB_OK
Definition: winuser.h:784
#define VERTRES
Definition: wingdi.h:716
#define STRING_NOTFOUND
Definition: notepad_res.h:86
static const TCHAR helpfile[]
Definition: dialog.c:31
VOID DIALOG_Replace(VOID)
Definition: dialog.c:1082
#define WM_SETFONT
Definition: winuser.h:1632
VOID DIALOG_EditCut(VOID)
Definition: dialog.c:782
#define FR_DOWN
Definition: commdlg.h:127
DWORD lStructSize
Definition: commdlg.h:465
static DWORD *static HFONT(WINAPI *pCreateFontIndirectExA)(const ENUMLOGFONTEXDVA *)
#define msg(x)
Definition: auth_time.c:54
VOID NOTEPAD_EnableSearchMenu()
Definition: main.c:32
BOOL DIALOG_FileSaveAs(VOID)
Definition: dialog.c:510
WORD nToPage
Definition: commdlg.h:472
#define STRING_UNICODE
Definition: notepad_res.h:91
#define MM_TEXT
Definition: wingdi.h:872
#define GetTextExtentPoint32
Definition: wingdi.h:4450
#define SendMessage
Definition: winuser.h:5709
_TCHAR * _tcscat(_TCHAR *s, const _TCHAR *append)
Definition: tcscat.h:8
_TCHAR * _tcsrchr(const _TCHAR *s, _XINT c)
Definition: tcsrchr.h:4
#define EM_LINEINDEX
Definition: winuser.h:1963
HWND WINAPI GetDlgItem(HWND hDlg, int nIDDlgItem)
Definition: dialog.c:2113
#define HIWORD(l)
Definition: typedefs.h:246
#define EDIT_STYLE_WRAP
Definition: main.h:28
#define TextOut
Definition: wingdi.h:4461
#define EDIT_STYLE
Definition: main.h:30
#define GetWindowTextLength
Definition: winuser.h:5665
CHAR lfFaceName[LF_FACESIZE]
Definition: dimm.idl:55
VOID DIALOG_HelpAboutNotepad(VOID)
Definition: dialog.c:1191
LONG bottom
Definition: windef.h:294
#define LOGPIXELSY
Definition: wingdi.h:718
VOID DIALOG_FileNew(VOID)
Definition: dialog.c:398
DWORD Flags
Definition: commdlg.h:470
#define StartDoc
Definition: wingdi.h:4460
VOID DIALOG_EditWrap(VOID)
Definition: dialog.c:1003
#define LoadIcon
Definition: winuser.h:5679
#define IDNO
Definition: winuser.h:830
static void AlertPrintError(void)
Definition: dialog.c:135
int GetSelectionTextLength(HWND hWnd)
Definition: dialog.c:172
#define MF_GRAYED
Definition: winuser.h:129
#define ANSI_CHARSET
Definition: wingdi.h:382
WCHAR * LPWSTR
Definition: xmlstorage.h:184
#define IDCANCEL
Definition: winuser.h:825
#define CF_NOVERTFONTS
Definition: commdlg.h:86
#define PSD_ENABLEPAGESETUPHOOK
Definition: commdlg.h:183
LONG_PTR LRESULT
Definition: windef.h:209
VOID DIALOG_HelpContents(VOID)
Definition: dialog.c:1186
VOID DIALOG_EditTimeDate(VOID)
Definition: dialog.c:807
HINSTANCE hInstance
Definition: precomp.h:43
VOID DIALOG_ViewStatusBar(VOID)
Definition: dialog.c:1179
#define WS_VISIBLE
Definition: pedump.c:620
#define CMD_STATUSBAR_WND_ID
Definition: notepad_res.h:61
HDC hDC
Definition: commdlg.h:469
int help
Definition: sort.c:20
#define WM_INITDIALOG
Definition: winuser.h:1715
#define WS_EX_STATICEDGE
Definition: winuser.h:403
LPARAM lParam
Definition: combotst.c:139
_In_ int nMaxCount
Definition: winuser.h:4746
#define LOWORD(l)
Definition: pedump.c:82
static unsigned char buff[32768]
Definition: fatten.c:17
#define STRING_CR
Definition: notepad_res.h:97
static int AlertFileNotSaved(LPCTSTR szFileName)
Definition: dialog.c:124
#define HeapFree(x, y, z)
Definition: compat.h:394
PSDBQUERYRESULT_VISTA PVOID DWORD * dwSize
Definition: env.c:54
#define LoadString
Definition: winuser.h:5685
#define log(outFile, fmt,...)
Definition: util.h:15
#define CF_INITTOLOGFONTSTRUCT
Definition: commdlg.h:66
#define WM_NOTIFY
Definition: richedit.h:61
#define EM_REPLACESEL
Definition: winuser.h:1967
BOOL DIALOG_FileSave(VOID)
Definition: dialog.c:438
#define EM_SCROLLCARET
Definition: richedit.h:81
DOCINFOA DOCINFO
Definition: wingdi.h:4392
unsigned int(__cdecl typeof(jpeg_read_scanlines))(struct jpeg_decompress_struct *
Definition: typeof.h:31
int WINAPI EndDoc(_In_ HDC)
HWND hwndDialog
Definition: powershemes.c:43
DWORD Flags
Definition: commdlg.h:342
BOOL WINAPI FindClose(HANDLE hFindFile)
Definition: find.c:502
#define WinHelp
Definition: winuser.h:5730
static INT_PTR CALLBACK DIALOG_GoTo_DialogProc(HWND hwndDialog, UINT uMsg, WPARAM wParam, LPARAM lParam)
Definition: dialog.c:1089