ReactOS 0.4.15-dev-7788-g1ad9096
wordpad.c File Reference
#include <stdio.h>
#include <assert.h>
#include <windef.h>
#include <winbase.h>
#include <wingdi.h>
#include <winuser.h>
#include <richedit.h>
#include <commctrl.h>
#include <commdlg.h>
#include <shellapi.h>
#include <shlobj.h>
#include <wine/unicode.h>
#include "wordpad.h"
Include dependency graph for wordpad.c:

Go to the source code of this file.

Classes

struct  FINDREPLACE_custom
 

Macros

#define WIN32_LEAN_AND_MEAN
 
#define U(x)   (x)
 
#define U2(x)   (x)
 
#define U3(x)   (x)
 

Enumerations

enum  UNIT { UNIT_CM , UNIT_INCH , UNIT_PT }
 

Functions

LRESULT CALLBACK preview_proc (HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
 
static LRESULT OnSize (HWND hWnd, WPARAM wParam, LPARAM lParam)
 
static void DoLoadStrings (void)
 
static int MessageBoxWithResStringW (HWND hWnd, LPCWSTR lpText, LPCWSTR lpCaption, UINT uType)
 
static void AddButton (HWND hwndToolBar, int nImage, int nCommand)
 
static void AddSeparator (HWND hwndToolBar)
 
static DWORD CALLBACK stream_in (DWORD_PTR cookie, LPBYTE buffer, LONG cb, LONG *pcb)
 
static DWORD CALLBACK stream_out (DWORD_PTR cookie, LPBYTE buffer, LONG cb, LONG *pcb)
 
LPWSTR file_basename (LPWSTR path)
 
static void set_caption (LPCWSTR wszNewFileName)
 
static BOOL validate_endptr (LPCWSTR endptr, UNIT *punit)
 
static BOOL number_from_string (LPCWSTR string, float *num, UNIT *punit)
 
static void set_size (float size)
 
static void on_sizelist_modified (HWND hwndSizeList, LPWSTR wszNewFontSize)
 
static void add_size (HWND hSizeListWnd, unsigned size)
 
static void populate_size_list (HWND hSizeListWnd)
 
static void update_size_list (void)
 
static void update_font_list (void)
 
static void clear_formatting (void)
 
static int fileformat_number (WPARAM format)
 
static WPARAM fileformat_flags (int format)
 
static void set_font (LPCWSTR wszFaceName)
 
static void set_default_font (void)
 
static void on_fontlist_modified (LPWSTR wszNewFaceName)
 
static void add_font (LPCWSTR fontName, DWORD fontType, HWND hListWnd, const NEWTEXTMETRICEXW *ntmc)
 
static void dialog_choose_font (void)
 
static int CALLBACK enum_font_proc (const LOGFONTW *lpelfe, const TEXTMETRICW *lpntme, DWORD FontType, LPARAM lParam)
 
static void populate_font_list (HWND hListWnd)
 
static void update_window (void)
 
static BOOL is_bar_visible (int bandId)
 
static void store_bar_state (int bandId, BOOL show)
 
static void set_toolbar_state (int bandId, BOOL show)
 
static void set_statusbar_state (BOOL show)
 
static void set_bar_states (void)
 
static void preview_exit (HWND hMainWnd)
 
static void set_fileformat (WPARAM format)
 
static void ShowOpenError (DWORD Code)
 
static void DoOpenFile (LPCWSTR szOpenFileName)
 
static void ShowWriteError (DWORD Code)
 
static BOOL DoSaveFile (LPCWSTR wszSaveFileName, WPARAM format)
 
static BOOL DialogSaveFile (void)
 
static BOOL prompt_save_changes (void)
 
static void DialogOpenFile (void)
 
static void dialog_about (void)
 
static INT_PTR CALLBACK formatopts_proc (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
 
static void dialog_viewproperties (void)
 
static void HandleCommandLine (LPWSTR cmdline)
 
static LRESULT handle_findmsg (LPFINDREPLACEW pFr)
 
static void dialog_find (LPFINDREPLACEW fr, BOOL replace)
 
static int units_to_twips (UNIT unit, float number)
 
static void append_current_units (LPWSTR buffer)
 
static void number_with_units (LPWSTR buffer, int number)
 
static BOOL get_comboexlist_selection (HWND hComboEx, LPWSTR wszBuffer, UINT bufferLength)
 
static INT_PTR CALLBACK datetime_proc (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
 
static INT_PTR CALLBACK newfile_proc (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
 
static INT_PTR CALLBACK paraformat_proc (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
 
static INT_PTR CALLBACK tabstops_proc (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
 
static LRESULT OnCreate (HWND hWnd)
 
static LRESULT OnUser (HWND hWnd)
 
static LRESULT OnNotify (HWND hWnd, LPARAM lParam)
 
static LRESULT OnCommand (HWND hWnd, WPARAM wParam, LPARAM lParam)
 
static LRESULT OnInitPopupMenu (HWND hWnd, WPARAM wParam)
 
static LRESULT CALLBACK WndProc (HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
 
int CALLBACK WinMain (HINSTANCE hInstance, HINSTANCE hOldInstance, LPSTR szCmdParagraph, int nCmdShow)
 

Variables

static const WCHAR wszAppTitle [] = {'W','o','r','d','p','a','d',0}
 
static const WCHAR wszMainWndClass [] = {'W','O','R','D','P','A','D','T','O','P',0}
 
static const WCHAR stringFormat [] = {'%','2','d','\0'}
 
const WCHAR wszPreviewWndClass [] = {'P','r','t','P','r','e','v','i','e','w',0}
 
static HWND hMainWnd
 
static HWND hEditorWnd
 
static HWND hFindWnd
 
static HMENU hColorPopupMenu
 
static UINT ID_FINDMSGSTRING
 
static DWORD wordWrap [2]
 
static DWORD barState [2]
 
static WPARAM fileFormat = SF_RTF
 
static WCHAR wszFileName [MAX_PATH]
 
static WCHAR wszFilter [MAX_STRING_LEN *4+6 *3+5]
 
static WCHAR wszDefaultFileName [MAX_STRING_LEN]
 
static WCHAR wszSaveChanges [MAX_STRING_LEN]
 
static WCHAR units_cmW [MAX_STRING_LEN]
 
static WCHAR units_inW [MAX_STRING_LEN]
 
static WCHAR units_inchW [MAX_STRING_LEN]
 
static WCHAR units_ptW [MAX_STRING_LEN]
 
static const COLORREF textcolors []
 

Macro Definition Documentation

◆ U

#define U (   x)    (x)

Definition at line 45 of file wordpad.c.

◆ U2

#define U2 (   x)    (x)

Definition at line 46 of file wordpad.c.

◆ U3

#define U3 (   x)    (x)

Definition at line 47 of file wordpad.c.

◆ WIN32_LEAN_AND_MEAN

#define WIN32_LEAN_AND_MEAN

Definition at line 23 of file wordpad.c.

Enumeration Type Documentation

◆ UNIT

Enumerator
UNIT_CM 
UNIT_INCH 
UNIT_PT 

Definition at line 82 of file wordpad.c.

83{
84 UNIT_CM,
87} UNIT;
UNIT
Definition: wordpad.c:83
@ UNIT_PT
Definition: wordpad.c:86
@ UNIT_INCH
Definition: wordpad.c:85
@ UNIT_CM
Definition: wordpad.c:84

Function Documentation

◆ add_font()

static void add_font ( LPCWSTR  fontName,
DWORD  fontType,
HWND  hListWnd,
const NEWTEXTMETRICEXW ntmc 
)
static

Definition at line 536 of file wordpad.c.

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}
int fontHeight
Definition: appswitch.c:47
#define MAX_STRING_LEN
Definition: precomp.h:36
#define GetProcessHeap()
Definition: compat.h:736
#define HeapAlloc
Definition: compat.h:733
#define MAX_PATH
Definition: compat.h:34
#define HeapFree(x, y, z)
Definition: compat.h:735
#define lstrcpyW
Definition: compat.h:749
#define lstrlenW
Definition: compat.h:750
GLuint buffer
Definition: glext.h:5915
GLenum const GLvoid * fontName
Definition: glext.h:11715
int WINAPI lstrcmpiW(LPCWSTR lpString1, LPCWSTR lpString2)
Definition: lstring.c:194
#define CBEM_GETITEMW
Definition: commctrl.h:3843
#define CBEIF_TEXT
Definition: commctrl.h:3786
#define CBEM_INSERTITEMW
Definition: commctrl.h:3841
#define CBEIF_LPARAM
Definition: commctrl.h:3791
NEWTEXTMETRICW ntmTm
Definition: wingdi.h:2675
LONG tmInternalLeading
Definition: wingdi.h:2647
#define MAKELONG(a, b)
Definition: typedefs.h:249
LONG_PTR LPARAM
Definition: windef.h:208
#define RASTER_FONTTYPE
Definition: wingdi.h:1107
LRESULT WINAPI SendMessageW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
__wchar_t WCHAR
Definition: xmlstorage.h:180

Referenced by enum_font_proc().

◆ add_size()

static void add_size ( HWND  hSizeListWnd,
unsigned  size 
)
static

Definition at line 353 of file wordpad.c.

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}
static const WCHAR stringFormat[]
Definition: wordpad.c:55
GLsizeiptr size
Definition: glext.h:5919
int WINAPIV wsprintfW(_Out_ LPWSTR, _In_ _Printf_format_string_ LPCWSTR,...)

Referenced by populate_size_list().

◆ AddButton()

static void AddButton ( HWND  hwndToolBar,
int  nImage,
int  nCommand 
)
static

Definition at line 155 of file wordpad.c.

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}
DWORD button
Definition: button.c:166
#define BTNS_BUTTON
Definition: commctrl.h:998
#define TBSTATE_ENABLED
Definition: commctrl.h:974
#define TB_ADDBUTTONSW
Definition: commctrl.h:1266
#define ZeroMemory
Definition: winbase.h:1712

Referenced by InitFilterListBox(), and OnCreate().

◆ AddSeparator()

static void AddSeparator ( HWND  hwndToolBar)
static

Definition at line 169 of file wordpad.c.

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}
#define BTNS_SEP
Definition: commctrl.h:999

Referenced by NtLdrAddOptions(), and OnCreate().

◆ append_current_units()

static void append_current_units ( LPWSTR  buffer)
static

Definition at line 1374 of file wordpad.c.

1375{
1376 static const WCHAR space[] = {' ', 0};
1379}
static WCHAR units_cmW[MAX_STRING_LEN]
Definition: wordpad.c:75
LPWSTR WINAPI lstrcatW(LPWSTR lpString1, LPCWSTR lpString2)
Definition: lstring.c:274

Referenced by tabstops_proc().

◆ clear_formatting()

static void clear_formatting ( void  )
static

Definition at line 448 of file wordpad.c.

449{
450 PARAFORMAT2 pf;
451
452 pf.cbSize = sizeof(pf);
454 pf.wAlignment = PFA_LEFT;
456}
static HWND hEditorWnd
Definition: wordpad.c:61
#define PFA_LEFT
Definition: richedit.h:921
#define PFM_ALIGNMENT
Definition: richedit.h:841
#define EM_SETPARAFORMAT
Definition: richedit.h:104
WORD wAlignment
Definition: richedit.h:673
DWORD dwMask
Definition: richedit.h:667
UINT cbSize
Definition: richedit.h:666

Referenced by DoOpenFile(), and OnCommand().

◆ datetime_proc()

static INT_PTR CALLBACK datetime_proc ( HWND  hWnd,
UINT  message,
WPARAM  wParam,
LPARAM  lParam 
)
static

Definition at line 1418 of file wordpad.c.

1419{
1420 switch(message)
1421 {
1422 case WM_INITDIALOG:
1423 {
1425 SYSTEMTIME st;
1426 HWND hListWnd = GetDlgItem(hWnd, IDC_DATETIME);
1427 GetLocalTime(&st);
1428
1431 SendMessageW(hListWnd, LB_ADDSTRING, 0, (LPARAM)&buffer);
1434 SendMessageW(hListWnd, LB_ADDSTRING, 0, (LPARAM)&buffer);
1436 SendMessageW(hListWnd, LB_ADDSTRING, 0, (LPARAM)&buffer);
1437
1438 SendMessageW(hListWnd, LB_SETSEL, TRUE, 0);
1439 }
1440 break;
1441
1442 case WM_COMMAND:
1443 switch(LOWORD(wParam))
1444 {
1445 case IDC_DATETIME:
1446 if (HIWORD(wParam) != LBN_DBLCLK)
1447 break;
1448 /* Fall through */
1449
1450 case IDOK:
1451 {
1452 LRESULT index;
1453 HWND hListWnd = GetDlgItem(hWnd, IDC_DATETIME);
1454
1455 index = SendMessageW(hListWnd, LB_GETCURSEL, 0, 0);
1456
1457 if(index != LB_ERR)
1458 {
1460 SendMessageW(hListWnd, LB_GETTEXT, index, (LPARAM)&buffer);
1462 }
1463 }
1464 /* Fall through */
1465
1466 case IDCANCEL:
1468 return TRUE;
1469 }
1470 }
1471 return FALSE;
1472}
HWND hWnd
Definition: settings.c:17
#define index(s, c)
Definition: various.h:29
WPARAM wParam
Definition: combotst.c:138
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
VOID WINAPI GetLocalTime(OUT LPSYSTEMTIME lpSystemTime)
Definition: time.c:286
GLuint index
Definition: glext.h:6031
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
#define LOCALE_USER_DEFAULT
#define LOWORD(l)
Definition: pedump.c:82
Definition: tftpd.h:60
#define HIWORD(l)
Definition: typedefs.h:247
LONG_PTR LRESULT
Definition: windef.h:209
#define DATE_LONGDATE
Definition: winnls.h:197
#define DATE_SHORTDATE
Definition: winnls.h:196
#define LB_ERR
Definition: winuser.h:2432
#define IDCANCEL
Definition: winuser.h:831
#define LB_GETTEXT
Definition: winuser.h:2049
#define LBN_DBLCLK
Definition: winuser.h:2071
#define WM_COMMAND
Definition: winuser.h:1740
#define EM_REPLACESEL
Definition: winuser.h:2006
#define WM_INITDIALOG
Definition: winuser.h:1739
#define LB_ADDSTRING
Definition: winuser.h:2031
HWND WINAPI GetDlgItem(_In_opt_ HWND, _In_ int)
#define IDOK
Definition: winuser.h:830
#define LB_SETSEL
Definition: winuser.h:2068
#define LB_GETCURSEL
Definition: winuser.h:2039
BOOL WINAPI EndDialog(_In_ HWND, _In_ INT_PTR)
#define IDC_DATETIME
Definition: wordpad.h:161
WCHAR * LPWSTR
Definition: xmlstorage.h:184

Referenced by OnCommand().

◆ dialog_about()

static void dialog_about ( void  )
static

Definition at line 1007 of file wordpad.c.

1008{
1011}
static HWND hMainWnd
Definition: wordpad.c:60
static const WCHAR wszAppTitle[]
Definition: wordpad.c:51
#define NULL
Definition: types.h:112
HMODULE WINAPI GetModuleHandleW(LPCWSTR lpModuleName)
Definition: loader.c:838
static HICON
Definition: imagelist.c:84
BOOL WINAPI ShellAboutW(HWND hWnd, LPCWSTR szApp, LPCWSTR szOtherStuff, HICON hIcon)
#define IMAGE_ICON
Definition: winuser.h:212
HANDLE WINAPI LoadImageW(_In_opt_ HINSTANCE hInst, _In_ LPCWSTR name, _In_ UINT type, _In_ int cx, _In_ int cy, _In_ UINT fuLoad)
Definition: cursoricon.c:2203
#define LR_SHARED
Definition: winuser.h:1100
#define MAKEINTRESOURCEW(i)
Definition: winuser.h:582
#define IDI_WORDPAD
Definition: wordpad.h:186

Referenced by OnCommand().

◆ dialog_choose_font()

static void dialog_choose_font ( void  )
static

Definition at line 566 of file wordpad.c.

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}
static HDC hDC
Definition: 3dtext.c:33
static void set_font(LPCWSTR wszFaceName)
Definition: wordpad.c:479
#define CF_EFFECTS
Definition: commdlg.h:68
#define CF_INITTOLOGFONTSTRUCT
Definition: commdlg.h:66
#define CF_NOVERTFONTS
Definition: commdlg.h:86
#define BOLD_FONTTYPE
Definition: commdlg.h:90
#define CF_NOSCRIPTSEL
Definition: commdlg.h:85
#define ITALIC_FONTTYPE
Definition: commdlg.h:91
#define CF_SCREENFONTS
Definition: commdlg.h:59
BOOL WINAPI ChooseFontW(LPCHOOSEFONTW lpChFont)
Definition: fontdlg.c:184
static HDC
Definition: imagelist.c:92
INT WINAPI MulDiv(INT nNumber, INT nNumerator, INT nDenominator)
Definition: muldiv.c:25
#define CFM_STRIKEOUT
Definition: richedit.h:335
#define CFE_STRIKEOUT
Definition: richedit.h:409
#define CFE_BOLD
Definition: richedit.h:406
#define CFE_ITALIC
Definition: richedit.h:407
#define SCF_SELECTION
Definition: richedit.h:235
#define EM_GETCHARFORMAT
Definition: richedit.h:91
#define EM_SETCHARFORMAT
Definition: richedit.h:101
#define CFE_UNDERLINE
Definition: richedit.h:408
#define CFM_ITALIC
Definition: richedit.h:333
#define CFM_SIZE
Definition: richedit.h:362
#define CFM_BOLD
Definition: richedit.h:332
#define CFM_UNDERLINE
Definition: richedit.h:334
#define CFM_COLOR
Definition: richedit.h:361
Definition: dsound.c:943
int WINAPI GetDeviceCaps(_In_opt_ HDC, _In_ int)
#define FW_BOLD
Definition: wingdi.h:378
#define LOGPIXELSY
Definition: wingdi.h:719
#define FW_NORMAL
Definition: wingdi.h:373
HDC WINAPI GetDC(_In_opt_ HWND)

Referenced by OnCommand().

◆ dialog_find()

static void dialog_find ( LPFINDREPLACEW  fr,
BOOL  replace 
)
static

Definition at line 1303 of file wordpad.c.

1304{
1305 static WCHAR selBuffer[128];
1306 static WCHAR replaceBuffer[128];
1307 static FINDREPLACE_custom custom_data;
1308 static const WCHAR endl = '\r';
1309 FINDTEXTW ft;
1310
1311 /* Allow only one search/replace dialog to open */
1312 if(hFindWnd != NULL)
1313 {
1315 return;
1316 }
1317
1318 ZeroMemory(fr, sizeof(FINDREPLACEW));
1319 fr->lStructSize = sizeof(FINDREPLACEW);
1320 fr->hwndOwner = hMainWnd;
1321 fr->Flags = FR_HIDEUPDOWN;
1322 /* Find field is filled with the selected text if it is non-empty
1323 * and stays within the same paragraph, otherwise the previous
1324 * find field is used. */
1326 (LPARAM)&ft.chrg.cpMax);
1327 ft.lpstrText = &endl;
1328 if (ft.chrg.cpMin != ft.chrg.cpMax &&
1330 {
1331 /* Use a temporary buffer for the selected text so that the saved
1332 * find field is only overwritten when a find/replace is clicked. */
1333 GETTEXTEX gt = {sizeof(selBuffer), GT_SELECTION, 1200, NULL, NULL};
1334 SendMessageW(hEditorWnd, EM_GETTEXTEX, (WPARAM)&gt, (LPARAM)selBuffer);
1335 fr->lpstrFindWhat = selBuffer;
1336 } else {
1337 fr->lpstrFindWhat = custom_data.findBuffer;
1338 }
1339 fr->lpstrReplaceWith = replaceBuffer;
1340 custom_data.endPos = -1;
1341 custom_data.wrapped = FALSE;
1342 fr->lCustData = (LPARAM)&custom_data;
1343 fr->wFindWhatLen = sizeof(custom_data.findBuffer);
1344 fr->wReplaceWithLen = sizeof(replaceBuffer);
1345
1346 if(replace)
1347 hFindWnd = ReplaceTextW(fr);
1348 else
1349 hFindWnd = FindTextW(fr);
1350}
basic_ostream< _CharT, _Traits > &_STLP_CALL endl(basic_ostream< _CharT, _Traits > &__os)
Definition: _ostream.h:357
static HWND hFindWnd
Definition: wordpad.c:62
#define FR_DOWN
Definition: commdlg.h:127
#define FR_HIDEUPDOWN
Definition: commdlg.h:132
HWND WINAPI FindTextW(LPFINDREPLACEW pfr)
Definition: finddlg.c:514
HWND WINAPI ReplaceTextW(LPFINDREPLACEW pfr)
Definition: finddlg.c:548
INT replace(TCHAR source[MAX_PATH], TCHAR dest[MAX_PATH], DWORD dwFlags, BOOL *doMore)
Definition: replace.c:47
#define EM_FINDTEXTW
Definition: richedit.h:147
#define GT_SELECTION
Definition: richedit.h:1038
#define EM_GETTEXTEX
Definition: richedit.h:128
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
LONG cpMax
Definition: richedit.h:501
LONG cpMin
Definition: richedit.h:500
CHARRANGE chrg
Definition: richedit.h:586
LPCWSTR lpstrText
Definition: richedit.h:587
UINT_PTR WPARAM
Definition: windef.h:207
#define EM_GETSEL
Definition: winuser.h:1997
HWND WINAPI SetActiveWindow(_In_ HWND)

Referenced by OnCommand().

◆ dialog_viewproperties()

static void dialog_viewproperties ( void  )
static

Definition at line 1111 of file wordpad.c.

1112{
1113 PROPSHEETPAGEW psp[2];
1114 PROPSHEETHEADERW psh;
1115 size_t i;
1118
1119 psp[0].dwSize = sizeof(PROPSHEETPAGEW);
1120 psp[0].dwFlags = PSP_USETITLE;
1121 U(psp[0]).pszTemplate = MAKEINTRESOURCEW(IDD_FORMATOPTS);
1122 psp[0].pfnDlgProc = formatopts_proc;
1123 psp[0].hInstance = hInstance;
1124 psp[0].lParam = reg_formatindex(SF_TEXT);
1125 psp[0].pfnCallback = NULL;
1127 for(i = 1; i < sizeof(psp)/sizeof(psp[0]); i++)
1128 {
1129 psp[i].dwSize = psp[0].dwSize;
1130 psp[i].dwFlags = psp[0].dwFlags;
1131 U(psp[i]).pszTemplate = U(psp[0]).pszTemplate;
1132 psp[i].pfnDlgProc = psp[0].pfnDlgProc;
1133 psp[i].hInstance = psp[0].hInstance;
1135 psp[i].pfnCallback = psp[0].pfnCallback;
1137 }
1138
1139 psh.dwSize = sizeof(psh);
1141 psh.hwndParent = hMainWnd;
1142 psh.hInstance = hInstance;
1144 psh.nPages = sizeof(psp)/sizeof(psp[0]);
1145 U3(psh).ppsp = ppsp;
1146 U(psh).pszIcon = MAKEINTRESOURCEW(IDI_WORDPAD);
1147
1148 if(fileFormat & SF_RTF)
1149 U2(psh).nStartPage = 1;
1150 else
1151 U2(psh).nStartPage = 0;
1152 PropertySheetW(&psh);
1155}
void target_device(HWND hMainWnd, DWORD wordWrap)
Definition: print.c:209
int reg_formatindex(WPARAM format)
Definition: registry.c:330
static void set_bar_states(void)
Definition: wordpad.c:711
#define U(x)
Definition: wordpad.c:45
#define U3(x)
Definition: wordpad.c:47
static DWORD wordWrap[2]
Definition: wordpad.c:67
#define U2(x)
Definition: wordpad.c:46
static WPARAM fileFormat
Definition: wordpad.c:69
static INT_PTR CALLBACK formatopts_proc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
Definition: wordpad.c:1013
HINSTANCE hInstance
Definition: charmap.c:19
INT_PTR WINAPI PropertySheetW(LPCPROPSHEETHEADERW lppsh)
Definition: propsheet.c:2913
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 PSP_USETITLE
Definition: prsht.h:26
struct _PROPSHEETPAGEW PROPSHEETPAGEW
#define PSH_PROPSHEETPAGE
Definition: prsht.h:43
#define PSH_USEICONID
Definition: prsht.h:42
const PROPSHEETPAGEW * LPCPROPSHEETPAGEW
Definition: prsht.h:245
#define PSH_NOAPPLYNOW
Definition: prsht.h:47
#define SF_RTF
Definition: richedit.h:721
#define SF_TEXT
Definition: richedit.h:720
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
#define IDD_FORMATOPTS
Definition: wordpad.h:177
#define STRING_VIEWPROPS_TITLE
Definition: wordpad.h:214
#define STRING_VIEWPROPS_RICHTEXT
Definition: wordpad.h:216
#define STRING_VIEWPROPS_TEXT
Definition: wordpad.h:215

Referenced by OnCommand().

◆ DialogOpenFile()

static void DialogOpenFile ( void  )
static

Definition at line 982 of file wordpad.c.

983{
985
986 WCHAR wszFile[MAX_PATH] = {'\0'};
987 static const WCHAR wszDefExt[] = {'r','t','f','\0'};
988
989 ZeroMemory(&ofn, sizeof(ofn));
990
991 ofn.lStructSize = sizeof(ofn);
997 ofn.lpstrDefExt = wszDefExt;
999
1000 if(GetOpenFileNameW(&ofn))
1001 {
1004 }
1005}
static void DoOpenFile(LPCWSTR szOpenFileName)
Definition: wordpad.c:764
static int fileformat_number(WPARAM format)
Definition: wordpad.c:458
static BOOL prompt_save_changes(void)
Definition: wordpad.c:929
static WCHAR wszFilter[MAX_STRING_LEN *4+6 *3+5]
Definition: wordpad.c:72
#define OFN_EXPLORER
Definition: commdlg.h:104
#define OFN_HIDEREADONLY
Definition: commdlg.h:107
#define OFN_ENABLESIZING
Definition: commdlg.h:101
#define OFN_FILEMUSTEXIST
Definition: commdlg.h:106
#define OFN_PATHMUSTEXIST
Definition: commdlg.h:117
BOOL WINAPI GetOpenFileNameW(OPENFILENAMEW *ofn)
Definition: filedlg.c:4736
OPENFILENAME ofn
Definition: sndrec32.cpp:56
LPCSTR lpstrDefExt
Definition: commdlg.h:345
DWORD nFilterIndex
Definition: commdlg.h:335
HWND hwndOwner
Definition: commdlg.h:330
LPSTR lpstrFile
Definition: commdlg.h:336
DWORD Flags
Definition: commdlg.h:342
DWORD lStructSize
Definition: commdlg.h:329
LPCSTR lpstrFilter
Definition: commdlg.h:332
DWORD nMaxFile
Definition: commdlg.h:337
static const WCHAR wszFile[]
Definition: urlmon_main.c:386

Referenced by OnCommand().

◆ DialogSaveFile()

static BOOL DialogSaveFile ( void  )
static

Definition at line 898 of file wordpad.c.

899{
901
902 WCHAR wszFile[MAX_PATH] = {'\0'};
903 static const WCHAR wszDefExt[] = {'r','t','f','\0'};
904
905 ZeroMemory(&sfn, sizeof(sfn));
906
907 sfn.lStructSize = sizeof(sfn);
913 sfn.lpstrDefExt = wszDefExt;
915
916 while(GetSaveFileNameW(&sfn))
917 {
919 {
922 continue;
923 }
925 }
926 return FALSE;
927}
static BOOL DoSaveFile(LPCWSTR wszSaveFileName, WPARAM format)
Definition: wordpad.c:840
static WPARAM fileformat_flags(int format)
Definition: wordpad.c:472
static int MessageBoxWithResStringW(HWND hWnd, LPCWSTR lpText, LPCWSTR lpCaption, UINT uType)
Definition: wordpad.c:137
#define OFN_OVERWRITEPROMPT
Definition: commdlg.h:116
BOOL WINAPI GetSaveFileNameW(LPOPENFILENAMEW ofn)
Definition: filedlg.c:4801
OPENFILENAMEW sfn
Definition: eventvwr.c:101
HWND hwndOwner
Definition: commdlg.h:361
DWORD Flags
Definition: commdlg.h:373
LPWSTR lpstrFile
Definition: commdlg.h:367
LPCWSTR lpstrDefExt
Definition: commdlg.h:376
DWORD lStructSize
Definition: commdlg.h:360
DWORD nMaxFile
Definition: commdlg.h:368
LPCWSTR lpstrFilter
Definition: commdlg.h:363
DWORD nFilterIndex
Definition: commdlg.h:366
#define MB_YESNO
Definition: winuser.h:817
#define MB_ICONEXCLAMATION
Definition: winuser.h:785
#define IDYES
Definition: winuser.h:835
#define STRING_SAVE_LOSEFORMATTING
Definition: wordpad.h:238

Referenced by OnCommand(), and prompt_save_changes().

◆ DoLoadStrings()

static void DoLoadStrings ( void  )
static

Definition at line 97 of file wordpad.c.

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}
static WCHAR wszDefaultFileName[MAX_STRING_LEN]
Definition: wordpad.c:73
static WCHAR units_ptW[MAX_STRING_LEN]
Definition: wordpad.c:78
static WCHAR units_inchW[MAX_STRING_LEN]
Definition: wordpad.c:77
static WCHAR wszSaveChanges[MAX_STRING_LEN]
Definition: wordpad.c:74
static WCHAR units_inW[MAX_STRING_LEN]
Definition: wordpad.c:76
GLfloat GLfloat p
Definition: glext.h:8902
#define STRING_ALL_FILES
Definition: notepad_res.h:68
#define STRING_TEXT_FILES_TXT
Definition: notepad_res.h:69
int WINAPI LoadStringW(_In_opt_ HINSTANCE hInstance, _In_ UINT uID, _Out_writes_to_(cchBufferMax, return+1) LPWSTR lpBuffer, _In_ int cchBufferMax)
#define STRING_UNITS_IN
Definition: wordpad.h:230
#define STRING_UNITS_PT
Definition: wordpad.h:232
#define STRING_DEFAULT_FILENAME
Definition: wordpad.h:234
#define STRING_UNITS_CM
Definition: wordpad.h:229
#define STRING_RICHTEXT_FILES_RTF
Definition: wordpad.h:202
#define STRING_UNITS_INCH
Definition: wordpad.h:231
#define STRING_PROMPT_SAVE_CHANGES
Definition: wordpad.h:235
#define STRING_TEXT_FILES_UNICODE_TXT
Definition: wordpad.h:201

Referenced by OnCreate().

◆ DoOpenFile()

static void DoOpenFile ( LPCWSTR  szOpenFileName)
static

Definition at line 764 of file wordpad.c.

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}
int memcmp(void *Buffer1, void *Buffer2, ACPI_SIZE Count)
Definition: utclib.c:112
void registry_set_filelist(LPCWSTR newFile, HWND hMainWnd)
Definition: registry.c:269
static void clear_formatting(void)
Definition: wordpad.c:448
static void ShowOpenError(DWORD Code)
Definition: wordpad.c:748
static WCHAR wszFileName[MAX_PATH]
Definition: wordpad.c:71
static void set_fileformat(WPARAM format)
Definition: wordpad.c:739
static void update_font_list(void)
Definition: wordpad.c:424
static DWORD CALLBACK stream_in(DWORD_PTR cookie, LPBYTE buffer, LONG cb, LONG *pcb)
Definition: wordpad.c:183
static void set_caption(LPCWSTR wszNewFileName)
Definition: wordpad.c:228
#define CloseHandle
Definition: compat.h:739
#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
#define INVALID_HANDLE_VALUE
Definition: compat.h:731
#define GENERIC_READ
Definition: compat.h:135
#define CreateFileW
Definition: compat.h:741
#define FILE_ATTRIBUTE_NORMAL
Definition: compat.h:137
#define FILE_SHARE_READ
Definition: compat.h:136
unsigned long DWORD
Definition: ntddk_ex.h:95
GLint GLint GLsizei GLsizei GLsizei GLint GLenum format
Definition: gl.h:1546
#define es
Definition: i386-dis.c:440
_In_ HANDLE hFile
Definition: mswsock.h:90
#define EM_STREAMIN
Definition: richedit.h:106
#define SF_UNICODE
Definition: richedit.h:724
void WINAPI SHAddToRecentDocs(UINT uFlags, LPCVOID pv)
Definition: shellord.c:813
#define SHARD_PATHW
Definition: shlobj.h:1169
#define DWORD_PTR
Definition: treelist.c:76
DWORD WINAPI GetLastError(void)
Definition: except.c:1042
HWND WINAPI SetFocus(_In_opt_ HWND)
#define MB_OK
Definition: winuser.h:790
#define EM_SETMODIFY
Definition: winuser.h:2013
#define STRING_OLE_STORAGE_NOT_SUPPORTED
Definition: wordpad.h:240
unsigned char BYTE
Definition: xxhash.c:193

Referenced by DialogOpenFile(), HandleCommandLine(), OnCommand(), and WndProc().

◆ DoSaveFile()

static BOOL DoSaveFile ( LPCWSTR  wszSaveFileName,
WPARAM  format 
)
static

Definition at line 840 of file wordpad.c.

841{
844 LRESULT ret;
845
846 hFile = CreateFileW(wszSaveFileName, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS,
848
850 {
852 return FALSE;
853 }
854
855 if(format == (SF_TEXT | SF_UNICODE))
856 {
857 static const BYTE unicode[] = {0xff,0xfe};
858 DWORD writeOut;
859 WriteFile(hFile, &unicode, sizeof(unicode), &writeOut, 0);
860
861 if(writeOut != sizeof(unicode))
862 {
864 return FALSE;
865 }
866 }
867
868 stream.dwCookie = (DWORD_PTR)hFile;
869 stream.pfnCallback = stream_out;
870
872
874
876
877 if(!ret)
878 {
880 gt.flags = GTL_DEFAULT;
881 gt.codepage = 1200;
882
884 return FALSE;
885 }
886
887 lstrcpyW(wszFileName, wszSaveFileName);
889 if (wszFileName[0])
891
894
895 return TRUE;
896}
static void ShowWriteError(DWORD Code)
Definition: wordpad.c:824
static DWORD CALLBACK stream_out(DWORD_PTR cookie, LPBYTE buffer, LONG cb, LONG *pcb)
Definition: wordpad.c:196
BOOL WINAPI WriteFile(IN HANDLE hFile, IN LPCVOID lpBuffer, IN DWORD nNumberOfBytesToWrite OPTIONAL, OUT LPDWORD lpNumberOfBytesWritten, IN LPOVERLAPPED lpOverlapped OPTIONAL)
Definition: rw.c:24
#define CREATE_ALWAYS
Definition: disk.h:72
#define GENERIC_WRITE
Definition: nt_native.h:90
#define GTL_DEFAULT
Definition: richedit.h:1054
#define EM_GETTEXTLENGTHEX
Definition: richedit.h:129
#define EM_STREAMOUT
Definition: richedit.h:107
Definition: parse.h:23
int ret

Referenced by DialogSaveFile(), OnCommand(), and prompt_save_changes().

◆ enum_font_proc()

static int CALLBACK enum_font_proc ( const LOGFONTW lpelfe,
const TEXTMETRICW lpntme,
DWORD  FontType,
LPARAM  lParam 
)
static

Definition at line 615 of file wordpad.c.

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}
static void add_font(LPCWSTR fontName, DWORD fontType, HWND hListWnd, const NEWTEXTMETRICEXW *ntmc)
Definition: wordpad.c:536
LPARAM lParam
Definition: combotst.c:139
HANDLE HWND
Definition: compat.h:19
WCHAR lfFaceName[LF_FACESIZE]
Definition: dimm.idl:72
#define CB_ERR
Definition: winuser.h:2435
#define CB_FINDSTRINGEXACT
Definition: winuser.h:1940

Referenced by populate_font_list().

◆ file_basename()

LPWSTR file_basename ( LPWSTR  path)

Definition at line 212 of file wordpad.c.

213{
215
216 while(pos > path)
217 {
218 if(*pos == '\\' || *pos == '/')
219 {
220 pos++;
221 break;
222 }
223 pos--;
224 }
225 return pos;
226}

Referenced by format_filelist_filename(), prompt_save_changes(), and set_caption().

◆ fileformat_flags()

static WPARAM fileformat_flags ( int  format)
static

Definition at line 472 of file wordpad.c.

473{
475
476 return flags[format];
477}
GLbitfield flags
Definition: glext.h:7161

Referenced by DialogSaveFile(), and newfile_proc().

◆ fileformat_number()

static int fileformat_number ( WPARAM  format)
static

Definition at line 458 of file wordpad.c.

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}
static unsigned int number
Definition: dsound.c:1479

Referenced by DialogOpenFile(), and DialogSaveFile().

◆ formatopts_proc()

static INT_PTR CALLBACK formatopts_proc ( HWND  hWnd,
UINT  message,
WPARAM  wParam,
LPARAM  lParam 
)
static

Definition at line 1013 of file wordpad.c.

1014{
1015 switch(message)
1016 {
1017 case WM_INITDIALOG:
1018 {
1020 int wrap = -1;
1021 char id[4];
1023
1024 sprintf(id, "%d\n", (int)ps->lParam);
1025 SetWindowTextA(hIdWnd, id);
1026 if(wordWrap[ps->lParam] == ID_WORDWRAP_NONE)
1028 else if(wordWrap[ps->lParam] == ID_WORDWRAP_WINDOW)
1030 else if(wordWrap[ps->lParam] == ID_WORDWRAP_MARGIN)
1032
1033 if(wrap != -1)
1036
1037 if(barState[ps->lParam] & (1 << BANDID_TOOLBAR))
1039 if(barState[ps->lParam] & (1 << BANDID_FORMATBAR))
1041 if(barState[ps->lParam] & (1 << BANDID_RULER))
1043 if(barState[ps->lParam] & (1 << BANDID_STATUSBAR))
1045 }
1046 break;
1047
1048 case WM_COMMAND:
1049 switch(LOWORD(wParam))
1050 {
1051 case IDC_PAGEFMT_WN:
1052 case IDC_PAGEFMT_WW:
1053 case IDC_PAGEFMT_WM:
1055 LOWORD(wParam));
1056 break;
1057
1058 case IDC_PAGEFMT_TB:
1059 case IDC_PAGEFMT_FB:
1060 case IDC_PAGEFMT_RU:
1061 case IDC_PAGEFMT_SB:
1064 break;
1065 }
1066 break;
1067 case WM_NOTIFY:
1068 {
1070 if(header->code == PSN_APPLY)
1071 {
1073 char sid[4];
1074 int id;
1075
1076 GetWindowTextA(hIdWnd, sid, 4);
1077 id = atoi(sid);
1084
1086 barState[id] |= (1 << BANDID_TOOLBAR);
1087 else
1088 barState[id] &= ~(1 << BANDID_TOOLBAR);
1089
1091 barState[id] |= (1 << BANDID_FORMATBAR);
1092 else
1093 barState[id] &= ~(1 << BANDID_FORMATBAR);
1094
1096 barState[id] |= (1 << BANDID_RULER);
1097 else
1098 barState[id] &= ~(1 << BANDID_RULER);
1099
1101 barState[id] |= (1 << BANDID_STATUSBAR);
1102 else
1103 barState[id] &= ~(1 << BANDID_STATUSBAR);
1104 }
1105 }
1106 break;
1107 }
1108 return FALSE;
1109}
static DWORD barState[2]
Definition: wordpad.c:68
FT_UInt sid
Definition: cffcmap.c:139
#define wrap(journal, var)
Definition: recovery.c:207
GLuint id
Definition: glext.h:5910
_Check_return_ int __cdecl atoi(_In_z_ const char *_Str)
#define sprintf(buf, format,...)
Definition: sprintf.c:55
#define PSN_APPLY
Definition: prsht.h:117
struct _PROPSHEETPAGEW * LPPROPSHEETPAGEW
#define WM_NOTIFY
Definition: richedit.h:61
int WINAPI GetWindowTextA(HWND hWnd, LPSTR lpString, int nMaxCount)
Definition: window.c:1330
BOOL WINAPI SetWindowTextA(_In_ HWND, _In_opt_ LPCSTR)
BOOL WINAPI CheckDlgButton(_In_ HWND, _In_ int, _In_ UINT)
UINT WINAPI IsDlgButtonChecked(_In_ HWND, _In_ int)
struct tagNMHDR * LPNMHDR
BOOL WINAPI CheckRadioButton(_In_ HWND, _In_ int, _In_ int, _In_ int)
#define ID_WORDWRAP_NONE
Definition: wordpad.h:110
#define BANDID_FORMATBAR
Definition: wordpad.h:95
#define BANDID_STATUSBAR
Definition: wordpad.h:97
#define IDC_PAGEFMT_RU
Definition: wordpad.h:122
#define BANDID_TOOLBAR
Definition: wordpad.h:94
#define IDC_PAGEFMT_SB
Definition: wordpad.h:123
#define IDC_PAGEFMT_WM
Definition: wordpad.h:126
#define IDC_PAGEFMT_ID
Definition: wordpad.h:127
#define IDC_PAGEFMT_FB
Definition: wordpad.h:121
#define IDC_PAGEFMT_TB
Definition: wordpad.h:120
#define ID_WORDWRAP_MARGIN
Definition: wordpad.h:112
#define IDC_PAGEFMT_WW
Definition: wordpad.h:125
#define ID_WORDWRAP_WINDOW
Definition: wordpad.h:111
#define IDC_PAGEFMT_WN
Definition: wordpad.h:124
#define BANDID_RULER
Definition: wordpad.h:96

Referenced by dialog_viewproperties().

◆ get_comboexlist_selection()

static BOOL get_comboexlist_selection ( HWND  hComboEx,
LPWSTR  wszBuffer,
UINT  bufferLength 
)
static

Definition at line 1389 of file wordpad.c.

1390{
1391 COMBOBOXEXITEMW cbItem;
1392 COMBOBOXINFO cbInfo;
1393 HWND hCombo, hList;
1394 int idx, result;
1395
1396 hCombo = (HWND)SendMessageW(hComboEx, CBEM_GETCOMBOCONTROL, 0, 0);
1397 if (!hCombo)
1398 return FALSE;
1399 cbInfo.cbSize = sizeof(COMBOBOXINFO);
1400 result = SendMessageW(hCombo, CB_GETCOMBOBOXINFO, 0, (LPARAM)&cbInfo);
1401 if (!result)
1402 return FALSE;
1403 hList = cbInfo.hwndList;
1405 if (idx < 0)
1406 return FALSE;
1407
1408 ZeroMemory(&cbItem, sizeof(cbItem));
1409 cbItem.mask = CBEIF_TEXT;
1410 cbItem.iItem = idx;
1411 cbItem.pszText = wszBuffer;
1412 cbItem.cchTextMax = bufferLength-1;
1413 result = SendMessageW(hComboEx, CBEM_GETITEMW, 0, (LPARAM)&cbItem);
1414
1415 return result != 0;
1416}
unsigned int idx
Definition: utils.c:41
GLuint64EXT * result
Definition: glext.h:11304
HWND hList
Definition: livecd.c:10
#define CBEM_GETCOMBOCONTROL
Definition: commctrl.h:3832
_In_opt_ PVOID _In_ ULONG bufferLength
Definition: wdfdriver.h:109
#define CB_GETCOMBOBOXINFO
Definition: winuser.h:1941
struct tagCOMBOBOXINFO COMBOBOXINFO

Referenced by OnCommand().

◆ handle_findmsg()

static LRESULT handle_findmsg ( LPFINDREPLACEW  pFr)
static

Definition at line 1210 of file wordpad.c.

1211{
1212 if(pFr->Flags & FR_DIALOGTERM)
1213 {
1214 hFindWnd = 0;
1215 pFr->Flags = FR_FINDNEXT;
1216 return 0;
1217 }
1218
1219 if(pFr->Flags & FR_FINDNEXT || pFr->Flags & FR_REPLACE || pFr->Flags & FR_REPLACEALL)
1220 {
1221 FINDREPLACE_custom *custom_data = (FINDREPLACE_custom*)pFr->lCustData;
1222 DWORD flags;
1223 FINDTEXTEXW ft;
1224 CHARRANGE sel;
1225 LRESULT ret = -1;
1226 HMENU hMenu = GetMenu(hMainWnd);
1228
1229 mi.cbSize = sizeof(mi);
1230 mi.fMask = MIIM_DATA;
1231 mi.dwItemData = 1;
1233
1234 /* Make sure find field is saved. */
1235 if (pFr->lpstrFindWhat != custom_data->findBuffer)
1236 {
1237 lstrcpynW(custom_data->findBuffer, pFr->lpstrFindWhat,
1238 sizeof(custom_data->findBuffer) / sizeof(WCHAR));
1239 pFr->lpstrFindWhat = custom_data->findBuffer;
1240 }
1241
1242 SendMessageW(hEditorWnd, EM_GETSEL, (WPARAM)&sel.cpMin, (LPARAM)&sel.cpMax);
1243 if(custom_data->endPos == -1) {
1244 custom_data->endPos = sel.cpMin;
1245 custom_data->wrapped = FALSE;
1246 }
1247
1248 flags = FR_DOWN | (pFr->Flags & (FR_MATCHCASE | FR_WHOLEWORD));
1249 ft.lpstrText = pFr->lpstrFindWhat;
1250
1251 /* Only replace the existing selection if it is an exact match. */
1252 if (sel.cpMin != sel.cpMax &&
1253 (pFr->Flags & FR_REPLACE || pFr->Flags & FR_REPLACEALL))
1254 {
1255 ft.chrg = sel;
1257 if (ft.chrgText.cpMin == sel.cpMin && ft.chrgText.cpMax == sel.cpMax) {
1259 SendMessageW(hEditorWnd, EM_GETSEL, (WPARAM)&sel.cpMin, (LPARAM)&sel.cpMax);
1260 }
1261 }
1262
1263 /* Search from the start of the selection, but exclude the first character
1264 * from search if there is a selection. */
1265 ft.chrg.cpMin = sel.cpMin;
1266 if (sel.cpMin != sel.cpMax)
1267 ft.chrg.cpMin++;
1268
1269 /* Search to the end, then wrap around and search from the start. */
1270 if (!custom_data->wrapped) {
1271 ft.chrg.cpMax = -1;
1273 if (ret == -1) {
1274 custom_data->wrapped = TRUE;
1275 ft.chrg.cpMin = 0;
1276 }
1277 }
1278
1279 if (ret == -1) {
1280 ft.chrg.cpMax = custom_data->endPos + lstrlenW(pFr->lpstrFindWhat) - 1;
1281 if (ft.chrg.cpMax > ft.chrg.cpMin)
1283 }
1284
1285 if (ret == -1) {
1286 custom_data->endPos = -1;
1291 } else {
1292 SendMessageW(hEditorWnd, EM_SETSEL, ft.chrgText.cpMin, ft.chrgText.cpMax);
1294
1295 if (pFr->Flags & FR_REPLACEALL)
1296 return handle_findmsg(pFr);
1297 }
1298 }
1299
1300 return 0;
1301}
static LRESULT handle_findmsg(LPFINDREPLACEW pFr)
Definition: wordpad.c:1210
#define FR_WHOLEWORD
Definition: commdlg.h:145
#define FR_REPLACE
Definition: commdlg.h:142
#define FR_DIALOGTERM
Definition: commdlg.h:126
#define FR_REPLACEALL
Definition: commdlg.h:143
#define FR_MATCHCASE
Definition: commdlg.h:136
#define FR_FINDNEXT
Definition: commdlg.h:131
#define lstrcpynW
Definition: compat.h:738
static const CLSID *static CLSID *static const GUID VARIANT VARIANT *static IServiceProvider DWORD *static HMENU
Definition: ordinal.c:63
#define EM_SCROLLCARET
Definition: richedit.h:81
#define EM_FINDTEXTEXW
Definition: richedit.h:148
DWORD cbSize
Definition: winuser.h:3784
static MONITORINFO mi
Definition: win.c:7338
#define MB_TASKMODAL
Definition: winuser.h:816
BOOL WINAPI SetMenuItemInfoW(_In_ HMENU, _In_ UINT, _In_ BOOL, _In_ LPCMENUITEMINFOW)
BOOL WINAPI EnableWindow(_In_ HWND, _In_ BOOL)
#define EM_SETSEL
Definition: winuser.h:2018
#define MB_ICONASTERISK
Definition: winuser.h:784
#define MIIM_DATA
Definition: winuser.h:726
HMENU WINAPI GetMenu(_In_ HWND)
#define ID_FIND_NEXT
Definition: wordpad.h:45
#define STRING_SEARCH_FINISHED
Definition: wordpad.h:236

Referenced by handle_findmsg(), OnCommand(), and WndProc().

◆ HandleCommandLine()

static void HandleCommandLine ( LPWSTR  cmdline)
static

Definition at line 1157 of file wordpad.c.

1158{
1160 BOOL opt_print = FALSE;
1161
1162 /* skip white space */
1163 while (*cmdline == ' ') cmdline++;
1164
1165 /* skip executable name */
1166 delimiter = (*cmdline == '"' ? '"' : ' ');
1167
1168 if (*cmdline == delimiter) cmdline++;
1169 while (*cmdline && *cmdline != delimiter) cmdline++;
1170 if (*cmdline == delimiter) cmdline++;
1171
1172 while (*cmdline)
1173 {
1174 while (isspace(*cmdline)) cmdline++;
1175
1176 if (*cmdline == '-' || *cmdline == '/')
1177 {
1178 if (!cmdline[2] || isspace(cmdline[2]))
1179 {
1180 switch (cmdline[1])
1181 {
1182 case 'P':
1183 case 'p':
1184 opt_print = TRUE;
1185 cmdline += 2;
1186 continue;
1187 }
1188 }
1189 /* a filename starting by / */
1190 }
1191 break;
1192 }
1193
1194 if (*cmdline)
1195 {
1196 /* file name is passed on the command line */
1197 if (cmdline[0] == '"')
1198 {
1199 cmdline++;
1200 cmdline[lstrlenW(cmdline) - 1] = 0;
1201 }
1204 }
1205
1206 if (opt_print)
1208}
#define isspace(c)
Definition: acclib.h:69
unsigned int BOOL
Definition: ntddk_ex.h:94
const char * delimiter
Definition: string.c:1566
TCHAR * cmdline
Definition: stretchblt.cpp:32
BOOL WINAPI InvalidateRect(_In_opt_ HWND, _In_opt_ LPCRECT, _In_ BOOL)
#define STRING_PRINTING_NOT_IMPLEMENTED
Definition: wordpad.h:245

Referenced by WinMain().

◆ is_bar_visible()

static BOOL is_bar_visible ( int  bandId)
static

Definition at line 660 of file wordpad.c.

661{
662 return barState[reg_formatindex(fileFormat)] & (1 << bandId);
663}

Referenced by OnCommand(), OnInitPopupMenu(), and set_bar_states().

◆ MessageBoxWithResStringW()

static int MessageBoxWithResStringW ( HWND  hWnd,
LPCWSTR  lpText,
LPCWSTR  lpCaption,
UINT  uType 
)
static

Definition at line 137 of file wordpad.c.

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}
GLenum const GLfloat * params
Definition: glext.h:5645
int WINAPI MessageBoxIndirectW(_In_ CONST MSGBOXPARAMSW *lpmbp)

Referenced by DialogSaveFile(), DoOpenFile(), handle_findmsg(), HandleCommandLine(), on_sizelist_modified(), OnCreate(), paraformat_proc(), and tabstops_proc().

◆ newfile_proc()

static INT_PTR CALLBACK newfile_proc ( HWND  hWnd,
UINT  message,
WPARAM  wParam,
LPARAM  lParam 
)
static

Definition at line 1474 of file wordpad.c.

1475{
1476 switch(message)
1477 {
1478 case WM_INITDIALOG:
1479 {
1482 HWND hListWnd = GetDlgItem(hWnd, IDC_NEWFILE);
1483
1485 SendMessageW(hListWnd, LB_ADDSTRING, 0, (LPARAM)&buffer);
1487 SendMessageW(hListWnd, LB_ADDSTRING, 0, (LPARAM)&buffer);
1489 SendMessageW(hListWnd, LB_ADDSTRING, 0, (LPARAM)&buffer);
1490
1491 SendMessageW(hListWnd, LB_SETSEL, TRUE, 0);
1492 }
1493 break;
1494
1495 case WM_COMMAND:
1496 switch(LOWORD(wParam))
1497 {
1498 case IDOK:
1499 {
1500 LRESULT index;
1501 HWND hListWnd = GetDlgItem(hWnd, IDC_NEWFILE);
1502 index = SendMessageW(hListWnd, LB_GETCURSEL, 0, 0);
1503
1504 if(index != LB_ERR)
1506 }
1507 return TRUE;
1508
1509 case IDCANCEL:
1511 return TRUE;
1512 }
1513 }
1514 return FALSE;
1515}
#define STRING_NEWFILE_TXT_UNICODE
Definition: wordpad.h:206
#define STRING_NEWFILE_RICHTEXT
Definition: wordpad.h:204
#define IDC_NEWFILE
Definition: wordpad.h:162
#define STRING_NEWFILE_TXT
Definition: wordpad.h:205
#define ID_NEWFILE_ABORT
Definition: wordpad.h:114

Referenced by OnCommand().

◆ number_from_string()

static BOOL number_from_string ( LPCWSTR  string,
float num,
UNIT punit 
)
static

Definition at line 295 of file wordpad.c.

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}
static BOOL validate_endptr(LPCWSTR endptr, UNIT *punit)
Definition: wordpad.c:256
GLuint GLuint num
Definition: glext.h:9618
_Check_return_ double __cdecl wcstod(_In_z_ const wchar_t *_Str, _Out_opt_ _Deref_post_z_ wchar_t **_EndPtr)
static float(__cdecl *square_half_float)(float x
#define errno
Definition: errno.h:18

Referenced by on_sizelist_modified(), paraformat_proc(), and tabstops_proc().

◆ number_with_units()

static void number_with_units ( LPWSTR  buffer,
int  number 
)
static

Definition at line 1381 of file wordpad.c.

1382{
1383 static const WCHAR fmt[] = {'%','.','2','f',' ','%','s','\0'};
1384 float converted = (float)number / (float)TWIPS_PER_INCH *(float)CENTMM_PER_INCH / 1000.0;
1385
1386 sprintfW(buffer, fmt, converted, units_cmW);
1387}
#define sprintfW
Definition: unicode.h:58
#define TWIPS_PER_INCH
Definition: wordpad.h:24
#define CENTMM_PER_INCH
Definition: wordpad.h:25

Referenced by paraformat_proc(), and tabstops_proc().

◆ on_fontlist_modified()

static void on_fontlist_modified ( LPWSTR  wszNewFaceName)
static

Definition at line 525 of file wordpad.c.

526{
528 ZeroMemory(&format, sizeof(format));
529 format.cbSize = sizeof(format);
531
532 if(lstrcmpW(format.szFaceName, wszNewFaceName))
533 set_font(wszNewFaceName);
534}
int WINAPI lstrcmpW(LPCWSTR lpString1, LPCWSTR lpString2)
Definition: lstring.c:170

Referenced by OnCommand(), and OnNotify().

◆ on_sizelist_modified()

static void on_sizelist_modified ( HWND  hwndSizeList,
LPWSTR  wszNewFontSize 
)
static

Definition at line 327 of file wordpad.c.

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}
static BOOL number_from_string(LPCWSTR string, float *num, UNIT *punit)
Definition: wordpad.c:295
static void set_size(float size)
Definition: wordpad.c:316
BOOL WINAPI SetWindowTextW(_In_ HWND, _In_opt_ LPCWSTR)
#define MB_ICONINFORMATION
Definition: winuser.h:802
#define STRING_INVALID_NUMBER
Definition: wordpad.h:239

Referenced by OnCommand(), and OnNotify().

◆ OnCommand()

static LRESULT OnCommand ( HWND  hWnd,
WPARAM  wParam,
LPARAM  lParam 
)
static

Definition at line 2057 of file wordpad.c.

2058{
2059 HWND hwndEditor = GetDlgItem(hWnd, IDC_EDITOR);
2060 static FINDREPLACEW findreplace;
2061
2062 if ((HWND)lParam == hwndEditor)
2063 return 0;
2064
2065 switch(LOWORD(wParam))
2066 {
2067
2068 case ID_FILE_EXIT:
2069 PostMessageW(hWnd, WM_CLOSE, 0, 0);
2070 break;
2071
2072 case ID_FILE_NEW:
2073 {
2076
2077 if(ret != ID_NEWFILE_ABORT)
2078 {
2080 {
2081 SETTEXTEX st;
2082
2084 wszFileName[0] = '\0';
2085
2087
2088 st.flags = ST_DEFAULT;
2089 st.codepage = 1200;
2091
2095 }
2096 }
2097 }
2098 break;
2099
2100 case ID_FILE_OPEN:
2102 break;
2103
2104 case ID_FILE_SAVE:
2105 if(wszFileName[0])
2106 {
2108 break;
2109 }
2110 /* Fall through */
2111
2112 case ID_FILE_SAVEAS:
2114 break;
2115
2116 case ID_FILE_RECENT1:
2117 case ID_FILE_RECENT2:
2118 case ID_FILE_RECENT3:
2119 case ID_FILE_RECENT4:
2120 {
2121 HMENU hMenu = GetMenu(hWnd);
2123
2124 mi.cbSize = sizeof(MENUITEMINFOW);
2125 mi.fMask = MIIM_DATA;
2126 if(GetMenuItemInfoW(hMenu, LOWORD(wParam), FALSE, &mi))
2127 DoOpenFile((LPWSTR)mi.dwItemData);
2128 }
2129 break;
2130
2131 case ID_FIND:
2132 dialog_find(&findreplace, FALSE);
2133 break;
2134
2135 case ID_FIND_NEXT:
2136 handle_findmsg(&findreplace);
2137 break;
2138
2139 case ID_REPLACE:
2140 dialog_find(&findreplace, TRUE);
2141 break;
2142
2143 case ID_FONTSETTINGS:
2145 break;
2146
2147 case ID_PRINT:
2150 break;
2151
2152 case ID_PRINT_QUICK:
2155 break;
2156
2157 case ID_PREVIEW:
2158 {
2160 DWORD tmp = barState[index];
2163 barState[index] = tmp;
2165
2167
2168 SetMenu(hWnd, NULL);
2169 InvalidateRect(0, 0, TRUE);
2170 }
2171 break;
2172
2173 case ID_PRINTSETUP:
2176 break;
2177
2178 case ID_FORMAT_BOLD:
2179 case ID_FORMAT_ITALIC:
2181 {
2183 int effects = CFE_BOLD;
2184
2185 ZeroMemory(&fmt, sizeof(fmt));
2186 fmt.cbSize = sizeof(fmt);
2188
2189 fmt.dwMask = CFM_BOLD;
2190
2192 {
2193 effects = CFE_ITALIC;
2194 fmt.dwMask = CFM_ITALIC;
2195 } else if (LOWORD(wParam) == ID_FORMAT_UNDERLINE)
2196 {
2197 effects = CFE_UNDERLINE;
2198 fmt.dwMask = CFM_UNDERLINE;
2199 }
2200
2201 fmt.dwEffects ^= effects;
2202
2204 break;
2205 }
2206
2207 case ID_FORMAT_COLOR:
2208 {
2209 HWND hReBarWnd = GetDlgItem(hWnd, IDC_REBAR);
2210 HWND hFormatBarWnd = GetDlgItem(hReBarWnd, IDC_FORMATBAR);
2211 HMENU hPop;
2212 RECT itemrc;
2213 POINT pt;
2214 int mid;
2215 int itemidx = SendMessageW(hFormatBarWnd, TB_COMMANDTOINDEX, ID_FORMAT_COLOR, 0);
2216
2217 SendMessageW(hFormatBarWnd, TB_GETITEMRECT, itemidx, (LPARAM)&itemrc);
2218 pt.x = itemrc.left;
2219 pt.y = itemrc.bottom;
2220 ClientToScreen(hFormatBarWnd, &pt);
2221 hPop = GetSubMenu(hColorPopupMenu, 0);
2224 pt.x, pt.y, 0, hWnd, 0);
2225 if (mid >= ID_COLOR_FIRST && mid <= ID_COLOR_AUTOMATIC)
2226 {
2228
2229 ZeroMemory(&fmt, sizeof(fmt));
2230 fmt.cbSize = sizeof(fmt);
2232
2233 fmt.dwMask = CFM_COLOR;
2234
2235 if (mid < ID_COLOR_AUTOMATIC) {
2236 fmt.crTextColor = textcolors[mid - ID_COLOR_FIRST];
2237 fmt.dwEffects &= ~CFE_AUTOCOLOR;
2238 } else {
2239 fmt.dwEffects |= CFE_AUTOCOLOR;
2240 }
2241
2243 }
2244 break;
2245 }
2246
2247 case ID_EDIT_CUT:
2248 PostMessageW(hwndEditor, WM_CUT, 0, 0);
2249 break;
2250
2251 case ID_EDIT_COPY:
2252 PostMessageW(hwndEditor, WM_COPY, 0, 0);
2253 break;
2254
2255 case ID_EDIT_PASTE:
2256 PostMessageW(hwndEditor, WM_PASTE, 0, 0);
2257 break;
2258
2259 case ID_EDIT_CLEAR:
2260 PostMessageW(hwndEditor, WM_CLEAR, 0, 0);
2261 break;
2262
2263 case ID_EDIT_SELECTALL:
2264 {
2265 CHARRANGE range = {0, -1};
2266 SendMessageW(hwndEditor, EM_EXSETSEL, 0, (LPARAM)&range);
2267 /* SendMessage(hwndEditor, EM_SETSEL, 0, -1); */
2268 return 0;
2269 }
2270
2271 case ID_EDIT_GETTEXT:
2272 {
2273 int nLen = GetWindowTextLengthW(hwndEditor);
2274 LPWSTR data = HeapAlloc( GetProcessHeap(), 0, (nLen+1)*sizeof(WCHAR) );
2275 TEXTRANGEW tr;
2276
2277 GetWindowTextW(hwndEditor, data, nLen+1);
2279
2281 data = HeapAlloc(GetProcessHeap(), 0, (nLen+1)*sizeof(WCHAR));
2282 tr.chrg.cpMin = 0;
2283 tr.chrg.cpMax = nLen;
2284 tr.lpstrText = data;
2285 SendMessageW(hwndEditor, EM_GETTEXTRANGE, 0, (LPARAM)&tr);
2287 HeapFree( GetProcessHeap(), 0, data );
2288
2289 /* SendMessage(hwndEditor, EM_SETSEL, 0, -1); */
2290 return 0;
2291 }
2292
2293 case ID_EDIT_CHARFORMAT:
2295 {
2297
2298 ZeroMemory(&cf, sizeof(cf));
2299 cf.cbSize = sizeof(cf);
2300 cf.dwMask = 0;
2301 SendMessageW(hwndEditor, EM_GETCHARFORMAT,
2303 return 0;
2304 }
2305
2306 case ID_EDIT_PARAFORMAT:
2307 {
2308 PARAFORMAT2 pf;
2309 ZeroMemory(&pf, sizeof(pf));
2310 pf.cbSize = sizeof(pf);
2311 SendMessageW(hwndEditor, EM_GETPARAFORMAT, 0, (LPARAM)&pf);
2312 return 0;
2313 }
2314
2316 {
2317 CHARRANGE range = {0, -1};
2318 char buf[128];
2319 WCHAR *data = NULL;
2320
2321 SendMessageW(hwndEditor, EM_EXGETSEL, 0, (LPARAM)&range);
2322 data = HeapAlloc(GetProcessHeap(), 0, sizeof(*data) * (range.cpMax-range.cpMin+1));
2323 SendMessageW(hwndEditor, EM_GETSELTEXT, 0, (LPARAM)data);
2324 sprintf(buf, "Start = %d, End = %d", range.cpMin, range.cpMax);
2325 MessageBoxA(hWnd, buf, "Editor", MB_OK);
2328 /* SendMessage(hwndEditor, EM_SETSEL, 0, -1); */
2329 return 0;
2330 }
2331
2332 case ID_EDIT_READONLY:
2333 {
2334 LONG nStyle = GetWindowLongW(hwndEditor, GWL_STYLE);
2335 if (nStyle & ES_READONLY)
2336 SendMessageW(hwndEditor, EM_SETREADONLY, 0, 0);
2337 else
2338 SendMessageW(hwndEditor, EM_SETREADONLY, 1, 0);
2339 return 0;
2340 }
2341
2342 case ID_EDIT_MODIFIED:
2343 if (SendMessageW(hwndEditor, EM_GETMODIFY, 0, 0))
2344 SendMessageW(hwndEditor, EM_SETMODIFY, 0, 0);
2345 else
2346 SendMessageW(hwndEditor, EM_SETMODIFY, 1, 0);
2347 return 0;
2348
2349 case ID_EDIT_UNDO:
2350 SendMessageW(hwndEditor, EM_UNDO, 0, 0);
2351 return 0;
2352
2353 case ID_EDIT_REDO:
2354 SendMessageW(hwndEditor, EM_REDO, 0, 0);
2355 return 0;
2356
2357 case ID_BULLET:
2358 {
2359 PARAFORMAT pf;
2360
2361 pf.cbSize = sizeof(pf);
2362 pf.dwMask = PFM_NUMBERING;
2363 SendMessageW(hwndEditor, EM_GETPARAFORMAT, 0, (LPARAM)&pf);
2364
2365 pf.dwMask |= PFM_OFFSET;
2366
2367 if(pf.wNumbering == PFN_BULLET)
2368 {
2369 pf.wNumbering = 0;
2370 pf.dxOffset = 0;
2371 } else
2372 {
2374 pf.dxOffset = 720;
2375 }
2376
2377 SendMessageW(hwndEditor, EM_SETPARAFORMAT, 0, (LPARAM)&pf);
2378 }
2379 break;
2380
2381 case ID_ALIGN_LEFT:
2382 case ID_ALIGN_CENTER:
2383 case ID_ALIGN_RIGHT:
2384 {
2385 PARAFORMAT2 pf;
2386
2387 pf.cbSize = sizeof(pf);
2388 pf.dwMask = PFM_ALIGNMENT;
2389 switch(LOWORD(wParam)) {
2390 case ID_ALIGN_LEFT: pf.wAlignment = PFA_LEFT; break;
2391 case ID_ALIGN_CENTER: pf.wAlignment = PFA_CENTER; break;
2392 case ID_ALIGN_RIGHT: pf.wAlignment = PFA_RIGHT; break;
2393 }
2394 SendMessageW(hwndEditor, EM_SETPARAFORMAT, 0, (LPARAM)&pf);
2395 break;
2396 }
2397
2398 case ID_BACK_1:
2399 SendMessageW(hwndEditor, EM_SETBKGNDCOLOR, 1, 0);
2400 break;
2401
2402 case ID_BACK_2:
2403 SendMessageW(hwndEditor, EM_SETBKGNDCOLOR, 0, RGB(255,255,192));
2404 break;
2405
2406 case ID_TOGGLE_TOOLBAR:
2408 update_window();
2409 break;
2410
2415 update_window();
2416 break;
2417
2420 update_window();
2421 break;
2422
2423 case ID_TOGGLE_RULER:
2425 update_window();
2426 break;
2427
2428 case ID_DATETIME:
2430 break;
2431
2432 case ID_PARAFORMAT:
2434 break;
2435
2436 case ID_TABSTOPS:
2438 break;
2439
2440 case ID_ABOUT:
2441 dialog_about();
2442 break;
2443
2444 case ID_VIEWPROPERTIES:
2446 break;
2447
2448 case IDC_FONTLIST:
2449 if (HIWORD(wParam) == CBN_SELENDOK)
2450 {
2452 HWND hwndFontList = (HWND)lParam;
2455 }
2456 break;
2457
2458 case IDC_SIZELIST:
2459 if (HIWORD(wParam) == CBN_SELENDOK)
2460 {
2462 HWND hwndSizeList = (HWND)lParam;
2464 on_sizelist_modified(hwndSizeList, buffer);
2465 }
2466 break;
2467
2468 default:
2469 SendMessageW(hwndEditor, WM_COMMAND, wParam, lParam);
2470 break;
2471 }
2472 return 0;
2473}
#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
void print_quick(HWND hMainWnd, LPWSTR wszFileName)
Definition: print.c:537
void dialog_printsetup(HWND hMainWnd)
Definition: print.c:498
void init_preview(HWND hMainWnd, LPWSTR wszFileName)
Definition: print.c:735
void dialog_print(HWND hMainWnd, LPWSTR wszFileName)
Definition: print.c:549
static void dialog_about(void)
Definition: wordpad.c:1007
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 void dialog_choose_font(void)
Definition: wordpad.c:566
static HMENU hColorPopupMenu
Definition: wordpad.c:63
static void set_statusbar_state(BOOL show)
Definition: wordpad.c:703
static INT_PTR CALLBACK newfile_proc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
Definition: wordpad.c:1474
static void update_window(void)
Definition: wordpad.c:651
static INT_PTR CALLBACK tabstops_proc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
Definition: wordpad.c:1642
static BOOL get_comboexlist_selection(HWND hComboEx, LPWSTR wszBuffer, UINT bufferLength)
Definition: wordpad.c:1389
static INT_PTR CALLBACK datetime_proc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
Definition: wordpad.c:1418
static void dialog_viewproperties(void)
Definition: wordpad.c:1111
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:1517
static void dialog_find(LPFINDREPLACEW fr, BOOL replace)
Definition: wordpad.c:1303
static void DialogOpenFile(void)
Definition: wordpad.c:982
static void on_fontlist_modified(LPWSTR wszNewFaceName)
Definition: wordpad.c:525
static const COLORREF textcolors[]
Definition: wordpad.c:2049
static BOOL DialogSaveFile(void)
Definition: wordpad.c:898
#define ID_ABOUT
Definition: charmap.c:17
#define LF_FACESIZE
Definition: dimm.idl:39
#define pt(x, y)
Definition: drawing.c:79
#define RGB(r, g, b)
Definition: precomp.h:62
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950
GLenum GLint * range
Definition: glext.h:7539
GLenum GLuint GLenum GLsizei const GLchar * buf
Definition: glext.h:7751
#define ES_READONLY
Definition: pedump.c:675
long LONG
Definition: pedump.c:60
#define TB_GETITEMRECT
Definition: commctrl.h:1133
#define TB_COMMANDTOINDEX
Definition: commctrl.h:1111
#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 EM_GETSELTEXT
Definition: richedit.h:95
#define ST_DEFAULT
Definition: richedit.h:1070
#define CFE_AUTOCOLOR
Definition: richedit.h:414
#define PFM_OFFSET
Definition: richedit.h:840
#define EM_SETBKGNDCOLOR
Definition: richedit.h:100
#define EM_SETTEXTEX
Definition: richedit.h:131
#define EM_GETPARAFORMAT
Definition: richedit.h:94
#define PFN_BULLET
Definition: richedit.h:905
#define EM_GETTEXTRANGE
Definition: richedit.h:108
#define EM_EXSETSEL
Definition: richedit.h:88
#define EM_EXGETSEL
Definition: richedit.h:85
DWORD dwMask
Definition: richedit.h:654
LONG dxOffset
Definition: richedit.h:659
UINT cbSize
Definition: richedit.h:653
WORD wNumbering
Definition: richedit.h:655
UINT codepage
Definition: richedit.h:1066
DWORD flags
Definition: richedit.h:1065
CHARRANGE chrg
Definition: richedit.h:514
LPWSTR lpstrText
Definition: richedit.h:515
LONG bottom
Definition: windef.h:309
LONG left
Definition: windef.h:306
int WINAPI GetWindowTextW(HWND hWnd, LPWSTR lpString, int nMaxCount)
Definition: window.c:1412
#define EM_SETREADONLY
Definition: winuser.h:2015
#define WM_CLOSE
Definition: winuser.h:1621
BOOL WINAPI SetMenu(_In_ HWND, _In_opt_ HMENU)
#define WM_PASTE
Definition: winuser.h:1863
BOOL WINAPI ShowWindow(_In_ HWND, _In_ int)
BOOL WINAPI PostMessageW(_In_opt_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
#define EM_GETMODIFY
Definition: winuser.h:1994
#define DialogBoxW(i, t, p, f)
Definition: winuser.h:4399
int WINAPI MessageBoxA(_In_opt_ HWND hWnd, _In_opt_ LPCSTR lpText, _In_opt_ LPCSTR lpCaption, _In_ UINT uType)
LONG WINAPI GetWindowLongW(_In_ HWND, _In_ int)
#define TPM_NONOTIFY
Definition: winuser.h:2386
#define WM_CUT
Definition: winuser.h:1861
int WINAPI MessageBoxW(_In_opt_ HWND hWnd, _In_opt_ LPCWSTR lpText, _In_opt_ LPCWSTR lpCaption, _In_ UINT uType)
BOOL WINAPI ClientToScreen(_In_ HWND, _Inout_ LPPOINT)
#define TPM_TOPALIGN
Definition: winuser.h:2383
HMENU WINAPI GetSubMenu(_In_ HMENU, _In_ int)
#define TPM_LEFTALIGN
Definition: winuser.h:2377
#define EM_UNDO
Definition: winuser.h:2021
int WINAPI GetWindowTextLengthW(_In_ HWND)
#define TPM_LEFTBUTTON
Definition: winuser.h:2379
BOOL WINAPI GetMenuItemInfoW(_In_ HMENU, _In_ UINT, _In_ BOOL, _Inout_ LPMENUITEMINFOW)
#define WM_COPY
Definition: winuser.h:1862
#define CBN_SELENDOK
Definition: winuser.h:1981
BOOL WINAPI TrackPopupMenu(_In_ HMENU, _In_ UINT, _In_ int, _In_ int, _Reserved_ int, _In_ HWND, _Reserved_ LPCRECT)
#define WM_CLEAR
Definition: winuser.h:1864
#define TPM_RETURNCMD
Definition: winuser.h:2387
#define GWL_STYLE
Definition: winuser.h:852
struct tagMENUITEMINFOW MENUITEMINFOW
#define IDC_FORMATBAR
Definition: wordpad.h:158
#define ID_FILE_RECENT3
Definition: wordpad.h:35
#define IDC_EDITOR
Definition: wordpad.h:156
#define ID_COLOR_FIRST
Definition: wordpad.h:136
#define ID_FIND
Definition: wordpad.h:44
#define ID_EDIT_UNDO
Definition: wordpad.h:68
#define ID_EDIT_REDO
Definition: wordpad.h:69
#define BANDID_FONTLIST
Definition: wordpad.h:98
#define ID_TOGGLE_TOOLBAR
Definition: wordpad.h:84
#define ID_EDIT_MODIFIED
Definition: wordpad.h:64
#define ID_FORMAT_BOLD
Definition: wordpad.h:79
#define ID_EDIT_SELECTIONINFO
Definition: wordpad.h:62
#define ID_FILE_RECENT4
Definition: wordpad.h:36
#define BANDID_SIZELIST
Definition: wordpad.h:99
#define ID_FORMAT_UNDERLINE
Definition: wordpad.h:81
#define IDC_SIZELIST
Definition: wordpad.h:169
#define ID_TOGGLE_FORMATBAR
Definition: wordpad.h:85
#define IDD_PARAFORMAT
Definition: wordpad.h:175
#define ID_TOGGLE_STATUSBAR
Definition: wordpad.h:86
#define ID_FORMAT_COLOR
Definition: wordpad.h:82
#define ID_EDIT_SELECTALL
Definition: wordpad.h:61
#define ID_VIEWPROPERTIES
Definition: wordpad.h:134
#define ID_FILE_RECENT2
Definition: wordpad.h:34
#define ID_FORMAT_ITALIC
Definition: wordpad.h:80
#define ID_ALIGN_CENTER
Definition: wordpad.h:55
#define ID_PARAFORMAT
Definition: wordpad.h:130
#define ID_EDIT_GETTEXT
Definition: wordpad.h:70
#define ID_EDIT_READONLY
Definition: wordpad.h:63
#define IDC_REBAR
Definition: wordpad.h:159
#define ID_COLOR_AUTOMATIC
Definition: wordpad.h:153
#define ID_PRINTSETUP
Definition: wordpad.h:41
#define ID_FONTSETTINGS
Definition: wordpad.h:77
#define ID_BACK_1
Definition: wordpad.h:58
#define ID_REPLACE
Definition: wordpad.h:46
#define ID_PREVIEW
Definition: wordpad.h:40
#define ID_BULLET
Definition: wordpad.h:75
#define ID_EDIT_DEFCHARFORMAT
Definition: wordpad.h:67
#define ID_EDIT_PARAFORMAT
Definition: wordpad.h:66
#define ID_EDIT_CUT
Definition: wordpad.h:72
#define ID_DATETIME
Definition: wordpad.h:129
#define ID_FILE_RECENT1
Definition: wordpad.h:33
#define ID_PRINT_QUICK
Definition: wordpad.h:42
#define IDC_FONTLIST
Definition: wordpad.h:168
#define ID_TABSTOPS
Definition: wordpad.h:131
#define ID_EDIT_CLEAR
Definition: wordpad.h:74
#define ID_TOGGLE_RULER
Definition: wordpad.h:87
#define ID_ALIGN_LEFT
Definition: wordpad.h:54
#define ID_EDIT_CHARFORMAT
Definition: wordpad.h:65
#define ID_ALIGN_RIGHT
Definition: wordpad.h:56
#define ID_PRINT
Definition: wordpad.h:39
#define IDD_DATETIME
Definition: wordpad.h:173
#define IDD_NEWFILE
Definition: wordpad.h:174
#define IDD_TABSTOPS
Definition: wordpad.h:176
#define ID_BACK_2
Definition: wordpad.h:59

Referenced by WndProc().

◆ OnCreate()

static LRESULT OnCreate ( HWND  hWnd)
static

Definition at line 1794 of file wordpad.c.

1795{
1796 HWND hToolBarWnd, hFormatBarWnd, hReBarWnd, hFontListWnd, hSizeListWnd, hRulerWnd;
1798 HANDLE hDLL;
1800 int nStdBitmaps = 0;
1801 REBARINFO rbi;
1802 REBARBANDINFOW rbb;
1803 static const WCHAR wszRichEditDll[] = {'R','I','C','H','E','D','2','0','.','D','L','L','\0'};
1804 static const WCHAR wszRichEditText[] = {'R','i','c','h','E','d','i','t',' ','t','e','x','t','\0'};
1805
1807
1811
1812 rbi.cbSize = sizeof(rbi);
1813 rbi.fMask = 0;
1814 rbi.himl = NULL;
1815 if(!SendMessageW(hReBarWnd, RB_SETBARINFO, 0, (LPARAM)&rbi))
1816 return -1;
1817
1821 NULL, 0,
1822 24, 24, 16, 16, sizeof(TBBUTTON));
1823
1824 ab.hInst = HINST_COMMCTRL;
1825 ab.nID = IDB_STD_SMALL_COLOR;
1826 nStdBitmaps = SendMessageW(hToolBarWnd, TB_ADDBITMAP, 0, (LPARAM)&ab);
1827
1828 AddButton(hToolBarWnd, nStdBitmaps+STD_FILENEW, ID_FILE_NEW);
1829 AddButton(hToolBarWnd, nStdBitmaps+STD_FILEOPEN, ID_FILE_OPEN);
1830 AddButton(hToolBarWnd, nStdBitmaps+STD_FILESAVE, ID_FILE_SAVE);
1831 AddSeparator(hToolBarWnd);
1832 AddButton(hToolBarWnd, nStdBitmaps+STD_PRINT, ID_PRINT_QUICK);
1833 AddButton(hToolBarWnd, nStdBitmaps+STD_PRINTPRE, ID_PREVIEW);
1834 AddSeparator(hToolBarWnd);
1835 AddButton(hToolBarWnd, nStdBitmaps+STD_FIND, ID_FIND);
1836 AddSeparator(hToolBarWnd);
1837 AddButton(hToolBarWnd, nStdBitmaps+STD_CUT, ID_EDIT_CUT);
1838 AddButton(hToolBarWnd, nStdBitmaps+STD_COPY, ID_EDIT_COPY);
1839 AddButton(hToolBarWnd, nStdBitmaps+STD_PASTE, ID_EDIT_PASTE);
1840 AddButton(hToolBarWnd, nStdBitmaps+STD_UNDO, ID_EDIT_UNDO);
1841 AddButton(hToolBarWnd, nStdBitmaps+STD_REDOW, ID_EDIT_REDO);
1842 AddSeparator(hToolBarWnd);
1843 AddButton(hToolBarWnd, 0, ID_DATETIME);
1844
1845 SendMessageW(hToolBarWnd, TB_AUTOSIZE, 0, 0);
1846
1850 rbb.cx = 0;
1851 rbb.hwndChild = hToolBarWnd;
1852 rbb.cxMinChild = 0;
1853 rbb.cyChild = rbb.cyMinChild = HIWORD(SendMessageW(hToolBarWnd, TB_GETBUTTONSIZE, 0, 0));
1854 rbb.wID = BANDID_TOOLBAR;
1855
1856 SendMessageW(hReBarWnd, RB_INSERTBANDW, -1, (LPARAM)&rbb);
1857
1858 hFontListWnd = CreateWindowExW(0, WC_COMBOBOXEXW, NULL,
1860 0, 0, 200, 150, hReBarWnd, (HMENU)IDC_FONTLIST, hInstance, NULL);
1861
1862 rbb.hwndChild = hFontListWnd;
1863 rbb.cx = 200;
1864 rbb.wID = BANDID_FONTLIST;
1865
1866 SendMessageW(hReBarWnd, RB_INSERTBANDW, -1, (LPARAM)&rbb);
1867
1868 hSizeListWnd = CreateWindowExW(0, WC_COMBOBOXEXW, NULL,
1870 0, 0, 50, 150, hReBarWnd, (HMENU)IDC_SIZELIST, hInstance, NULL);
1871
1872 rbb.hwndChild = hSizeListWnd;
1873 rbb.cx = 50;
1874 rbb.fStyle ^= RBBS_BREAK;
1875 rbb.wID = BANDID_SIZELIST;
1876
1877 SendMessageW(hReBarWnd, RB_INSERTBANDW, -1, (LPARAM)&rbb);
1878
1879 hFormatBarWnd = CreateToolbarEx(hReBarWnd,
1881 IDC_FORMATBAR, 8, hInstance, IDB_FORMATBAR, NULL, 0, 16, 16, 16, 16, sizeof(TBBUTTON));
1882
1883 AddButton(hFormatBarWnd, 0, ID_FORMAT_BOLD);
1884 AddButton(hFormatBarWnd, 1, ID_FORMAT_ITALIC);
1885 AddButton(hFormatBarWnd, 2, ID_FORMAT_UNDERLINE);
1886 AddButton(hFormatBarWnd, 3, ID_FORMAT_COLOR);
1887 AddSeparator(hFormatBarWnd);
1888 AddButton(hFormatBarWnd, 4, ID_ALIGN_LEFT);
1889 AddButton(hFormatBarWnd, 5, ID_ALIGN_CENTER);
1890 AddButton(hFormatBarWnd, 6, ID_ALIGN_RIGHT);
1891 AddSeparator(hFormatBarWnd);
1892 AddButton(hFormatBarWnd, 7, ID_BULLET);
1893
1894 SendMessageW(hFormatBarWnd, TB_AUTOSIZE, 0, 0);
1895
1896 rbb.hwndChild = hFormatBarWnd;
1897 rbb.wID = BANDID_FORMATBAR;
1898
1899 SendMessageW(hReBarWnd, RB_INSERTBANDW, -1, (LPARAM)&rbb);
1900
1902 0, 0, 200, 10, hReBarWnd, (HMENU)IDC_RULER, hInstance, NULL);
1903
1904
1905 rbb.hwndChild = hRulerWnd;
1906 rbb.wID = BANDID_RULER;
1907 rbb.fStyle |= RBBS_BREAK;
1908
1909 SendMessageW(hReBarWnd, RB_INSERTBANDW, -1, (LPARAM)&rbb);
1910
1911 hDLL = LoadLibraryW(wszRichEditDll);
1912 if(!hDLL)
1913 {
1916 PostQuitMessage(1);
1917 }
1918
1922 0, 0, 1000, 100, hWnd, (HMENU)IDC_EDITOR, hInstance, NULL);
1923
1924 if (!hEditorWnd)
1925 {
1926 fprintf(stderr, "Error code %u\n", GetLastError());
1927 return -1;
1928 }
1930
1934
1936
1937 populate_font_list(hFontListWnd);
1938 populate_size_list(hSizeListWnd);
1939 DoLoadStrings();
1941
1943
1948
1949 return 0;
1950}
#define IDC_STATUSBAR
Definition: resource.h:12
void registry_read_formatopts_all(DWORD barState[], DWORD wordWrap[])
Definition: registry.c:398
void registry_read_options(void)
Definition: registry.c:335
void registry_read_filelist(HWND hMainWnd)
Definition: registry.c:217
static void DoLoadStrings(void)
Definition: wordpad.c:97
static void populate_font_list(HWND hListWnd)
Definition: wordpad.c:631
static void AddButton(HWND hwndToolBar, int nImage, int nCommand)
Definition: wordpad.c:155
static UINT ID_FINDMSGSTRING
Definition: wordpad.c:65
static void set_default_font(void)
Definition: wordpad.c:501
static void AddSeparator(HWND hwndToolBar)
Definition: wordpad.c:169
static void populate_size_list(HWND hSizeListWnd)
Definition: wordpad.c:365
HWND WINAPI CreateStatusWindowW(LONG style, LPCWSTR text, HWND parent, UINT wid)
Definition: commctrl.c:795
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:929
#define FINDMSGSTRINGW
Definition: commdlg.h:28
#define LoadLibraryW(x)
Definition: compat.h:747
void WINAPI DragAcceptFiles(HWND hWnd, BOOL b)
Definition: shellole.c:522
#define assert(x)
Definition: debug.h:53
#define stderr
Definition: stdio.h:100
_Check_return_opt_ _CRTIMP int __cdecl fprintf(_Inout_ FILE *_File, _In_z_ _Printf_format_string_ const char *_Format,...)
UCHAR ab[sizeof("Hello World!") -1]
Definition: fdi.c:106
HRESULT setup_richedit_olecallback(HWND hEditorWnd)
Definition: olecallback.c:203
#define WS_CHILD
Definition: pedump.c:617
#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
#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
#define STD_COPY
Definition: commctrl.h:1072
#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 REBARCLASSNAMEW
Definition: commctrl.h:1463
#define RBBIM_CHILDSIZE
Definition: commctrl.h:1507
#define RB_INSERTBANDW
Definition: commctrl.h:1583
#define TBSTYLE_TOOLTIPS
Definition: commctrl.h:989
#define HINST_COMMCTRL
Definition: commctrl.h:1063
#define STD_PASTE
Definition: commctrl.h:1073
#define RBBIM_CHILD
Definition: commctrl.h:1506
#define STD_PRINTPRE
Definition: commctrl.h:1080
#define TB_GETBUTTONSIZE
Definition: commctrl.h:1160
#define WC_COMBOBOXEXW
Definition: commctrl.h:3781
#define STD_FILEOPEN
Definition: commctrl.h:1078
#define RBBS_NOGRIPPER
Definition: commctrl.h:1497
#define RBBS_CHILDEDGE
Definition: commctrl.h:1491
#define STD_CUT
Definition: commctrl.h:1071
#define STD_FILESAVE
Definition: commctrl.h:1079
#define CCS_NODIVIDER
Definition: commctrl.h:2248
#define CCS_TOP
Definition: commctrl.h:2242
#define STD_UNDO
Definition: commctrl.h:1074
#define STD_REDOW
Definition: commctrl.h:1075
#define RBBIM_ID
Definition: commctrl.h:1510
#define RBS_VARHEIGHT
Definition: commctrl.h:1471
#define CCS_NOPARENTALIGN
Definition: commctrl.h:2246
#define CCS_NOMOVEY
Definition: commctrl.h:2243
#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:4680
#define TB_ADDBITMAP
Definition: commctrl.h:1056
#define IDB_STD_SMALL_COLOR
Definition: commctrl.h:1064
#define EM_SETEVENTMASK
Definition: richedit.h:102
static const WCHAR RICHEDIT_CLASS20W[]
Definition: richedit.h:50
#define ENM_SELCHANGE
Definition: richedit.h:478
#define ES_SELECTIONBAR
Definition: richedit.h:230
HIMAGELIST himl
Definition: commctrl.h:1483
__analysis_noreturn void WINAPI PostQuitMessage(_In_ int)
#define WS_EX_TOOLWINDOW
Definition: winuser.h:404
HWND WINAPI CreateWindowExW(_In_ DWORD dwExStyle, _In_opt_ LPCWSTR lpClassName, _In_opt_ LPCWSTR lpWindowName, _In_ DWORD dwStyle, _In_ int X, _In_ int Y, _In_ int nWidth, _In_ int nHeight, _In_opt_ HWND hWndParent, _In_opt_ HMENU hMenu, _In_opt_ HINSTANCE hInstance, _In_opt_ LPVOID lpParam)
UINT WINAPI RegisterWindowMessageW(_In_ LPCWSTR)
#define CBS_DROPDOWN
Definition: winuser.h:283
#define CBS_SORT
Definition: winuser.h:292
#define CW_USEDEFAULT
Definition: winuser.h:225
#define WS_EX_CLIENTEDGE
Definition: winuser.h:384
#define IDC_RULER
Definition: wordpad.h:170
#define IDB_TOOLBAR
Definition: wordpad.h:183
#define IDB_FORMATBAR
Definition: wordpad.h:184
#define STRING_LOAD_RICHED_FAILED
Definition: wordpad.h:237
#define IDC_TOOLBAR
Definition: wordpad.h:157

Referenced by WndProc().

◆ OnInitPopupMenu()

static LRESULT OnInitPopupMenu ( HWND  hWnd,
WPARAM  wParam 
)
static

Definition at line 2475 of file wordpad.c.

2476{
2477 HMENU hMenu = (HMENU)wParam;
2478 HWND hwndEditor = GetDlgItem(hWnd, IDC_EDITOR);
2480 PARAFORMAT pf;
2481 int nAlignment = -1;
2482 int selFrom, selTo;
2483 GETTEXTLENGTHEX gt;
2484 LRESULT textLength;
2486
2487 SendMessageW(hEditorWnd, EM_GETSEL, (WPARAM)&selFrom, (LPARAM)&selTo);
2488 EnableMenuItem(hMenu, ID_EDIT_COPY, (selFrom == selTo) ? MF_GRAYED : MF_ENABLED);
2489 EnableMenuItem(hMenu, ID_EDIT_CUT, (selFrom == selTo) ? MF_GRAYED : MF_ENABLED);
2490
2491 pf.cbSize = sizeof(PARAFORMAT);
2492 SendMessageW(hwndEditor, EM_GETPARAFORMAT, 0, (LPARAM)&pf);
2496 SendMessageW(hwndEditor, EM_GETMODIFY, 0, 0) ? MF_CHECKED : MF_UNCHECKED);
2497 if (pf.dwMask & PFM_ALIGNMENT)
2498 nAlignment = pf.wAlignment;
2499 CheckMenuItem(hMenu, ID_ALIGN_LEFT, (nAlignment == PFA_LEFT) ? MF_CHECKED : MF_UNCHECKED);
2500 CheckMenuItem(hMenu, ID_ALIGN_CENTER, (nAlignment == PFA_CENTER) ? MF_CHECKED : MF_UNCHECKED);
2501 CheckMenuItem(hMenu, ID_ALIGN_RIGHT, (nAlignment == PFA_RIGHT) ? MF_CHECKED : MF_UNCHECKED);
2503 EnableMenuItem(hMenu, ID_EDIT_UNDO, SendMessageW(hwndEditor, EM_CANUNDO, 0, 0) ?
2505 EnableMenuItem(hMenu, ID_EDIT_REDO, SendMessageW(hwndEditor, EM_CANREDO, 0, 0) ?
2507
2510
2513
2516
2518
2519 gt.flags = GTL_NUMCHARS;
2520 gt.codepage = 1200;
2521 textLength = SendMessageW(hEditorWnd, EM_GETTEXTLENGTHEX, (WPARAM)&gt, 0);
2522 EnableMenuItem(hMenu, ID_FIND, textLength ? MF_ENABLED : MF_GRAYED);
2523
2524 mi.cbSize = sizeof(mi);
2525 mi.fMask = MIIM_DATA;
2526
2528
2529 EnableMenuItem(hMenu, ID_FIND_NEXT, (textLength && mi.dwItemData) ? MF_ENABLED : MF_GRAYED);
2530
2531 EnableMenuItem(hMenu, ID_REPLACE, textLength ? MF_ENABLED : MF_GRAYED);
2532
2533 return 0;
2534}
#define EM_CANREDO
Definition: richedit.h:118
#define GTL_NUMCHARS
Definition: richedit.h:1058
struct _paraformat PARAFORMAT
HWND hwndStatus
Definition: solitaire.cpp:14
WORD wAlignment
Definition: richedit.h:660
#define MF_CHECKED
Definition: winuser.h:132
#define MF_UNCHECKED
Definition: winuser.h:204
DWORD WINAPI CheckMenuItem(_In_ HMENU, _In_ UINT, _In_ UINT)
#define EM_CANUNDO
Definition: winuser.h:1983
#define MF_ENABLED
Definition: winuser.h:128
BOOL WINAPI IsWindowVisible(_In_ HWND)
BOOL WINAPI EnableMenuItem(_In_ HMENU, _In_ UINT, _In_ UINT)
#define MF_GRAYED
Definition: winuser.h:129

Referenced by WndProc().

◆ OnNotify()

static LRESULT OnNotify ( HWND  hWnd,
LPARAM  lParam 
)
static

Definition at line 2004 of file wordpad.c.

2005{
2006 HWND hwndEditor = GetDlgItem(hWnd, IDC_EDITOR);
2007 HWND hwndReBar = GetDlgItem(hWnd, IDC_REBAR);
2008 NMHDR *pHdr = (NMHDR *)lParam;
2009 HWND hwndFontList = GetDlgItem(hwndReBar, IDC_FONTLIST);
2010 HWND hwndSizeList = GetDlgItem(hwndReBar, IDC_SIZELIST);
2011
2012 if (pHdr->hwndFrom == hwndFontList || pHdr->hwndFrom == hwndSizeList)
2013 {
2014 if (pHdr->code == CBEN_ENDEDITW)
2015 {
2016 NMCBEENDEDITW *endEdit = (NMCBEENDEDITW *)lParam;
2017 if(pHdr->hwndFrom == hwndFontList)
2018 {
2019 on_fontlist_modified(endEdit->szText);
2020 } else if (pHdr->hwndFrom == hwndSizeList)
2021 {
2022 on_sizelist_modified(hwndSizeList,endEdit->szText);
2023 }
2024 }
2025 return 0;
2026 }
2027
2028 if (pHdr->hwndFrom != hwndEditor)
2029 return 0;
2030
2031 if (pHdr->code == EN_SELCHANGE)
2032 {
2033 SELCHANGE *pSC = (SELCHANGE *)lParam;
2034 char buf[128];
2035
2037
2038 sprintf( buf,"selection = %d..%d, line count=%ld",
2039 pSC->chrg.cpMin, pSC->chrg.cpMax,
2040 SendMessageW(hwndEditor, EM_GETLINECOUNT, 0, 0));
2042 SendMessageW(hWnd, WM_USER, 0, 0);
2043 return 1;
2044 }
2045 return 0;
2046}
#define CBEN_ENDEDITW
Definition: commctrl.h:3876
#define EN_SELCHANGE
Definition: richedit.h:193
WCHAR szText[CBEMAXSTRLEN]
Definition: commctrl.h:3914
CHARRANGE chrg
Definition: richedit.h:686
UINT code
Definition: winuser.h:3159
HWND hwndFrom
Definition: winuser.h:3157
#define WM_USER
Definition: winuser.h:1895
#define EM_GETLINECOUNT
Definition: winuser.h:1992

Referenced by DECLARE_INTERFACE_(), and WndProc().

◆ OnSize()

static LRESULT OnSize ( HWND  hWnd,
WPARAM  wParam,
LPARAM  lParam 
)
static

Definition at line 2536 of file wordpad.c.

2537{
2538 int nStatusSize = 0;
2539 RECT rc;
2541 HWND hwndStatusBar = GetDlgItem(hWnd, IDC_STATUSBAR);
2542 HWND hwndReBar = GetDlgItem(hWnd, IDC_REBAR);
2543 HWND hRulerWnd = GetDlgItem(hwndReBar, IDC_RULER);
2544 int rebarHeight = 0;
2545
2546 if (hwndStatusBar)
2547 {
2548 SendMessageW(hwndStatusBar, WM_SIZE, 0, 0);
2549 if (IsWindowVisible(hwndStatusBar))
2550 {
2551 GetClientRect(hwndStatusBar, &rc);
2552 nStatusSize = rc.bottom - rc.top;
2553 } else
2554 {
2555 nStatusSize = 0;
2556 }
2557 }
2558 if (hwndReBar)
2559 {
2560 rebarHeight = SendMessageW(hwndReBar, RB_GETBARHEIGHT, 0, 0);
2561
2562 MoveWindow(hwndReBar, 0, 0, LOWORD(lParam), rebarHeight, TRUE);
2563 }
2564 if (hwndEditor)
2565 {
2566 GetClientRect(hWnd, &rc);
2567 MoveWindow(hwndEditor, 0, rebarHeight, rc.right, rc.bottom-nStatusSize-rebarHeight, TRUE);
2568 }
2569
2570 redraw_ruler(hRulerWnd);
2571
2573}
void redraw_ruler(HWND hRulerWnd)
Definition: print.c:288
BOOL preview_isactive(void)
Definition: print.c:779
#define RB_GETBARHEIGHT
Definition: commctrl.h:1608
LONG right
Definition: windef.h:308
LONG top
Definition: windef.h:307
LRESULT WINAPI DefWindowProcW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
#define WM_SIZE
Definition: winuser.h:1611
BOOL WINAPI GetClientRect(_In_ HWND, _Out_ LPRECT)
BOOL WINAPI MoveWindow(_In_ HWND, _In_ int, _In_ int, _In_ int, _In_ int, _In_ BOOL)
#define IDC_PREVIEW
Definition: wordpad.h:171

Referenced by update_window(), and WndProc().

◆ OnUser()

static LRESULT OnUser ( HWND  hWnd)
static

Definition at line 1952 of file wordpad.c.

1953{
1954 HWND hwndEditor = GetDlgItem(hWnd, IDC_EDITOR);
1955 HWND hwndReBar = GetDlgItem(hWnd, IDC_REBAR);
1956 HWND hwndToolBar = GetDlgItem(hwndReBar, IDC_TOOLBAR);
1957 HWND hwndFormatBar = GetDlgItem(hwndReBar, IDC_FORMATBAR);
1958 int from, to;
1960 PARAFORMAT2 pf;
1961 GETTEXTLENGTHEX gt;
1962
1963 ZeroMemory(&fmt, sizeof(fmt));
1964 fmt.cbSize = sizeof(fmt);
1965
1966 ZeroMemory(&pf, sizeof(pf));
1967 pf.cbSize = sizeof(pf);
1968
1969 gt.flags = GTL_NUMCHARS;
1970 gt.codepage = 1200;
1971
1972 SendMessageW(hwndToolBar, TB_ENABLEBUTTON, ID_FIND,
1973 SendMessageW(hwndEditor, EM_GETTEXTLENGTHEX, (WPARAM)&gt, 0) ? 1 : 0);
1974
1975 SendMessageW(hwndEditor, EM_GETCHARFORMAT, TRUE, (LPARAM)&fmt);
1976
1977 SendMessageW(hwndEditor, EM_GETSEL, (WPARAM)&from, (LPARAM)&to);
1979 SendMessageW(hwndEditor, EM_CANUNDO, 0, 0));
1981 SendMessageW(hwndEditor, EM_CANREDO, 0, 0));
1982 SendMessageW(hwndToolBar, TB_ENABLEBUTTON, ID_EDIT_CUT, from == to ? 0 : 1);
1983 SendMessageW(hwndToolBar, TB_ENABLEBUTTON, ID_EDIT_COPY, from == to ? 0 : 1);
1984
1985 SendMessageW(hwndFormatBar, TB_CHECKBUTTON, ID_FORMAT_BOLD, (fmt.dwMask & CFM_BOLD) &&
1986 (fmt.dwEffects & CFE_BOLD));
1987 SendMessageW(hwndFormatBar, TB_INDETERMINATE, ID_FORMAT_BOLD, !(fmt.dwMask & CFM_BOLD));
1988 SendMessageW(hwndFormatBar, TB_CHECKBUTTON, ID_FORMAT_ITALIC, (fmt.dwMask & CFM_ITALIC) &&
1989 (fmt.dwEffects & CFE_ITALIC));
1990 SendMessageW(hwndFormatBar, TB_INDETERMINATE, ID_FORMAT_ITALIC, !(fmt.dwMask & CFM_ITALIC));
1991 SendMessageW(hwndFormatBar, TB_CHECKBUTTON, ID_FORMAT_UNDERLINE, (fmt.dwMask & CFM_UNDERLINE) &&
1992 (fmt.dwEffects & CFE_UNDERLINE));
1994
1995 SendMessageW(hwndEditor, EM_GETPARAFORMAT, 0, (LPARAM)&pf);
1999
2001 return 0;
2002}
#define TB_CHECKBUTTON
Definition: commctrl.h:1043
#define TB_ENABLEBUTTON
Definition: commctrl.h:1042
#define TB_INDETERMINATE
Definition: commctrl.h:1046
CardRegion * from
Definition: spigame.cpp:19
WORD wNumbering
Definition: richedit.h:668

Referenced by WndProc().

◆ paraformat_proc()

static INT_PTR CALLBACK paraformat_proc ( HWND  hWnd,
UINT  message,
WPARAM  wParam,
LPARAM  lParam 
)
static

Definition at line 1517 of file wordpad.c.

1518{
1519 static const WORD ALIGNMENT_VALUES[] = {PFA_LEFT, PFA_RIGHT, PFA_CENTER};
1520
1521 switch(message)
1522 {
1523 case WM_INITDIALOG:
1524 {
1527 HWND hListWnd = GetDlgItem(hWnd, IDC_PARA_ALIGN);
1528 HWND hLeftWnd = GetDlgItem(hWnd, IDC_PARA_LEFT);
1529 HWND hRightWnd = GetDlgItem(hWnd, IDC_PARA_RIGHT);
1530 HWND hFirstWnd = GetDlgItem(hWnd, IDC_PARA_FIRST);
1531 PARAFORMAT2 pf;
1532 int index = 0;
1533
1536 SendMessageW(hListWnd, CB_ADDSTRING, 0, (LPARAM)buffer);
1539 SendMessageW(hListWnd, CB_ADDSTRING, 0, (LPARAM)buffer);
1542 SendMessageW(hListWnd, CB_ADDSTRING, 0, (LPARAM)buffer);
1543
1544 pf.cbSize = sizeof(pf);
1548
1549 if(pf.wAlignment == PFA_RIGHT)
1550 index ++;
1551 else if(pf.wAlignment == PFA_CENTER)
1552 index += 2;
1553
1554 SendMessageW(hListWnd, CB_SETCURSEL, index, 0);
1555
1557 SetWindowTextW(hLeftWnd, buffer);
1559 SetWindowTextW(hRightWnd, buffer);
1561 SetWindowTextW(hFirstWnd, buffer);
1562 }
1563 break;
1564
1565 case WM_COMMAND:
1566 switch(LOWORD(wParam))
1567 {
1568 case IDOK:
1569 {
1570 HWND hListWnd = GetDlgItem(hWnd, IDC_PARA_ALIGN);
1571 HWND hLeftWnd = GetDlgItem(hWnd, IDC_PARA_LEFT);
1572 HWND hRightWnd = GetDlgItem(hWnd, IDC_PARA_RIGHT);
1573 HWND hFirstWnd = GetDlgItem(hWnd, IDC_PARA_FIRST);
1575 int index;
1576 float num;
1577 int ret = 0;
1578 PARAFORMAT pf;
1579 UNIT unit;
1580
1581 index = SendMessageW(hListWnd, CB_GETCURSEL, 0, 0);
1582 pf.wAlignment = ALIGNMENT_VALUES[index];
1583
1586 ret++;
1590 ret++;
1594 ret++;
1596
1597 if(ret != 3)
1598 {
1601 return FALSE;
1602 } else
1603 {
1604 if (pf.dxOffset + pf.dxStartIndent < 0
1605 && pf.dxStartIndent < 0)
1606 {
1607 /* The first line is before the left edge, so
1608 * make sure it is at the left edge. */
1609 pf.dxOffset = -pf.dxStartIndent;
1610 } else if (pf.dxOffset < 0) {
1611 /* The second and following lines are before
1612 * the left edge, so set it to be at the left
1613 * edge, and adjust the first line since it
1614 * is relative to it. */
1615 pf.dxStartIndent = max(pf.dxStartIndent + pf.dxOffset, 0);
1616 pf.dxOffset = 0;
1617 }
1618 /* Internally the dxStartIndent is the absolute
1619 * offset for the first line and dxOffset is
1620 * to it value as opposed how it is displayed with
1621 * the first line being the relative value.
1622 * These two lines make the adjustments. */
1624 pf.dxOffset = pf.dxOffset - pf.dxStartIndent;
1625
1626 pf.cbSize = sizeof(pf);
1630 }
1631 }
1632 /* Fall through */
1633
1634 case IDCANCEL:
1636 return TRUE;
1637 }
1638 }
1639 return FALSE;
1640}
static void number_with_units(LPWSTR buffer, int number)
Definition: wordpad.c:1381
static int units_to_twips(UNIT unit, float number)
Definition: wordpad.c:1352
unsigned short WORD
Definition: ntddk_ex.h:93
png_const_structrp png_const_inforp int * unit
Definition: png.h:2159
#define PFM_RIGHTINDENT
Definition: richedit.h:839
#define PFM_STARTINDENT
Definition: richedit.h:838
LONG dxRightIndent
Definition: richedit.h:671
LONG dxOffset
Definition: richedit.h:672
LONG dxStartIndent
Definition: richedit.h:670
LONG dxRightIndent
Definition: richedit.h:658
LONG dxStartIndent
Definition: richedit.h:657
#define max(a, b)
Definition: svc.c:63
#define CB_SETCURSEL
Definition: winuser.h:1961
#define CB_ADDSTRING
Definition: winuser.h:1936
#define CB_GETCURSEL
Definition: winuser.h:1943
#define IDC_PARA_LEFT
Definition: wordpad.h:163
#define STRING_ALIGN_CENTER
Definition: wordpad.h:212
#define IDC_PARA_RIGHT
Definition: wordpad.h:164
#define STRING_ALIGN_RIGHT
Definition: wordpad.h:211
#define IDC_PARA_FIRST
Definition: wordpad.h:165
#define IDC_PARA_ALIGN
Definition: wordpad.h:166
#define STRING_ALIGN_LEFT
Definition: wordpad.h:210

Referenced by OnCommand().

◆ populate_font_list()

static void populate_font_list ( HWND  hListWnd)
static

Definition at line 631 of file wordpad.c.

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}
static int CALLBACK enum_font_proc(const LOGFONTW *lpelfe, const TEXTMETRICW *lpntme, DWORD FontType, LPARAM lParam)
Definition: wordpad.c:615
HDC hdc
Definition: main.c:9
#define CBEM_GETEDITCONTROL
Definition: commctrl.h:3833
#define SCF_DEFAULT
Definition: richedit.h:234
BYTE lfCharSet
Definition: dimm.idl:67
BYTE lfPitchAndFamily
Definition: dimm.idl:71
int WINAPI EnumFontFamiliesExW(_In_ HDC, _In_ PLOGFONTW, _In_ FONTENUMPROCW, _In_ LPARAM, _In_ DWORD)
#define DEFAULT_CHARSET
Definition: wingdi.h:384
#define WM_SETTEXT
Definition: winuser.h:1617

Referenced by OnCreate().

◆ populate_size_list()

static void populate_size_list ( HWND  hSizeListWnd)
static

Definition at line 365 of file wordpad.c.

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}
static void add_size(HWND hSizeListWnd, unsigned size)
Definition: wordpad.c:353
GLenum const GLvoid GLbitfield fontStyle
Definition: glext.h:11715
#define DWORD
Definition: nt_native.h:44
#define CB_RESETCONTENT
Definition: winuser.h:1959

Referenced by OnCreate(), set_font(), and update_font_list().

◆ preview_exit()

static void preview_exit ( HWND  hMainWnd)
static

Definition at line 723 of file wordpad.c.

724{
727
730
732
733 SetMenu(hMainWnd, hMenu);
735
737}
#define IDM_MAINMENU
Definition: resources.h:3
void close_preview(HWND hMainWnd)
Definition: print.c:751
HMENU WINAPI LoadMenuW(_In_opt_ HINSTANCE, _In_ LPCWSTR)

Referenced by WndProc().

◆ preview_proc()

LRESULT CALLBACK preview_proc ( HWND  hWnd,
UINT  msg,
WPARAM  wParam,
LPARAM  lParam 
)

Definition at line 1016 of file print.c.

1017{
1018 switch(msg)
1019 {
1020 case WM_CREATE:
1021 {
1024 FORMATRANGE fr;
1025 GETTEXTLENGTHEX gt = {GTL_DEFAULT, 1200};
1026 HDC hdc = GetDC(hWnd);
1027 HDC hdcTarget = make_dc();
1028
1033 fr.rcPage = preview.rcPage;
1034
1037
1039
1041 fr.hdcTarget = hdcTarget;
1042 fr.chrg.cpMin = 0;
1044 DeleteDC(fr.hdc);
1046 ReleaseDC(hWnd, hdc);
1047
1050 break;
1051 }
1052
1053 case WM_PAINT:
1054 return print_preview(hWnd);
1055
1056 case WM_SIZE:
1057 {
1060 break;
1061 }
1062
1063 case WM_VSCROLL:
1064 case WM_HSCROLL:
1065 {
1066 SCROLLINFO si;
1067 RECT rc;
1068 int nBar = (msg == WM_VSCROLL) ? SB_VERT : SB_HORZ;
1069 int origPos;
1070
1071 GetClientRect(hWnd, &rc);
1072 si.cbSize = sizeof(si);
1073 si.fMask = SIF_ALL;
1074 GetScrollInfo(hWnd, nBar, &si);
1075 origPos = si.nPos;
1076 switch(LOWORD(wParam))
1077 {
1078 case SB_TOP: /* == SB_LEFT */
1079 si.nPos = si.nMin;
1080 break;
1081 case SB_BOTTOM: /* == SB_RIGHT */
1082 si.nPos = si.nMax;
1083 break;
1084 case SB_LINEUP: /* == SB_LINELEFT */
1085 si.nPos -= si.nPage / 10;
1086 break;
1087 case SB_LINEDOWN: /* == SB_LINERIGHT */
1088 si.nPos += si.nPage / 10;
1089 break;
1090 case SB_PAGEUP: /* == SB_PAGELEFT */
1091 si.nPos -= si.nPage;
1092 break;
1093 case SB_PAGEDOWN: /* SB_PAGERIGHT */
1094 si.nPos += si.nPage;
1095 break;
1096 case SB_THUMBTRACK:
1097 si.nPos = si.nTrackPos;
1098 break;
1099 }
1100 si.fMask = SIF_POS;
1101 SetScrollInfo(hWnd, nBar, &si, TRUE);
1102 GetScrollInfo(hWnd, nBar, &si);
1103 if (si.nPos != origPos)
1104 {
1105 int amount = origPos - si.nPos;
1106 if (msg == WM_VSCROLL)
1107 ScrollWindow(hWnd, 0, amount, NULL, NULL);
1108 else
1109 ScrollWindow(hWnd, amount, 0, NULL, NULL);
1110 }
1111 return 0;
1112 }
1113
1114 case WM_SETCURSOR:
1115 {
1116 POINT pt;
1117 RECT rc;
1118 int bHittest = 0;
1119 DWORD messagePos = GetMessagePos();
1120 pt.x = (short)LOWORD(messagePos);
1121 pt.y = (short)HIWORD(messagePos);
1123
1124 GetClientRect(hWnd, &rc);
1125 if (PtInRect(&rc, pt))
1126 {
1127 pt.x += GetScrollPos(hWnd, SB_HORZ);
1128 pt.y += GetScrollPos(hWnd, SB_VERT);
1129 bHittest = preview_page_hittest(pt);
1130 }
1131
1132 if (bHittest)
1135 else
1137
1138 return TRUE;
1139 }
1140
1141 case WM_LBUTTONDOWN:
1142 {
1143 int page;
1144 POINT pt;
1147 if ((page = preview_page_hittest(pt)) > 0)
1148 {
1150
1151 /* Convert point from client coordinate to unzoomed page
1152 * coordinate. */
1153 pt.x -= preview.spacing.cx;
1154 if (page > 1)
1156 pt.y -= preview.spacing.cy;
1157 pt.x /= preview.zoomratio;
1158 pt.y /= preview.zoomratio;
1159
1160 if (preview.zoomlevel == 0)
1162 preview.zoomlevel = (preview.zoomlevel + 1) % 3;
1163 preview.zoomratio = 0;
1165 {
1167 } else if (preview.pages_shown > 1) {
1168 if (page >= 2) preview.page++;
1170 } else {
1174 }
1175
1176 if (preview.zoomlevel > 0) {
1177 SCROLLINFO si;
1178 /* Convert the coordinate back to client coordinate. */
1179 pt.x *= preview.zoomratio;
1180 pt.y *= preview.zoomratio;
1181 pt.x += preview.spacing.cx;
1182 pt.y += preview.spacing.cy;
1183 /* Scroll to center view at that point on the page */
1184 si.cbSize = sizeof(si);
1185 si.fMask = SIF_PAGE;
1186 GetScrollInfo(hWnd, SB_HORZ, &si);
1187 pt.x -= si.nPage / 2;
1189 GetScrollInfo(hWnd, SB_VERT, &si);
1190 pt.y -= si.nPage / 2;
1192 }
1193 }
1194 }
1195
1196 default:
1197 return DefWindowProcW(hWnd, msg, wParam, lParam);
1198 }
1199
1200 return 0;
1201}
HDC hdcTarget
Definition: PatBlt.c:13
#define msg(x)
Definition: auth_time.c:54
#define IDC_ZOOM
Definition: resource.h:16
static void update_preview_sizes(HWND hwndPreview, BOOL zoomLevelUpdated)
Definition: print.c:649
static LONG twips_to_pixels(int twips, int dpi)
Definition: print.c:176
static previewinfo preview
Definition: print.c:56
static int preview_page_hittest(POINT pt)
Definition: print.c:995
static void update_preview(HWND hMainWnd)
Definition: print.c:920
static LRESULT print_preview(HWND hwndPreview)
Definition: print.c:829
static void toggle_num_pages(HWND hMainWnd)
Definition: print.c:972
static HDC make_dc(void)
Definition: print.c:145
static RECT get_print_rect(HDC hdc)
Definition: print.c:187
static void update_preview_buttons(HWND hMainWnd)
Definition: print.c:815
static RECT margins
Definition: print.c:55
unsigned short(__cdecl typeof(TIFFCurrentDirectory))(struct tiff *)
Definition: typeof.h:94
HWND hMainWnd
Definition: magnifier.c:32
LONG cx
Definition: kdterminal.h:27
LONG cy
Definition: kdterminal.h:28
HDC hdcTarget
Definition: richedit.h:608
CHARRANGE chrg
Definition: richedit.h:611
RECT rcPage
Definition: richedit.h:610
SIZE bmScaledSize
Definition: print.c:45
SIZE spacing
Definition: print.c:46
int pages_shown
Definition: print.c:36
float zoomratio
Definition: print.c:47
SIZE bmSize
Definition: print.c:44
int saved_pages_shown
Definition: print.c:37
int zoomlevel
Definition: print.c:48
int page
Definition: print.c:35
RECT rcPage
Definition: print.c:43
int textlength
Definition: print.c:39
Definition: module.h:576
HDC WINAPI CreateCompatibleDC(_In_opt_ HDC hdc)
#define LOGPIXELSX
Definition: wingdi.h:718
BOOL WINAPI DeleteDC(_In_ HDC)
#define WM_PAINT
Definition: winuser.h:1620
int WINAPI ReleaseDC(_In_opt_ HWND, _In_ HDC)
#define SB_THUMBTRACK
Definition: winuser.h:573
#define SB_LINEUP
Definition: winuser.h:564
#define WM_HSCROLL
Definition: winuser.h:1743
DWORD WINAPI GetMessagePos(void)
Definition: message.c:1351
#define WM_VSCROLL
Definition: winuser.h:1744
#define WM_CREATE
Definition: winuser.h:1608
#define SB_VERT
Definition: winuser.h:553
#define SB_BOTTOM
Definition: winuser.h:577
#define IDC_ARROW
Definition: winuser.h:687
HCURSOR WINAPI SetCursor(_In_opt_ HCURSOR)
#define SIF_PAGE
Definition: winuser.h:1233
#define WM_LBUTTONDOWN
Definition: winuser.h:1776
HCURSOR WINAPI LoadCursorW(_In_opt_ HINSTANCE, _In_ LPCWSTR)
Definition: cursoricon.c:2105
int WINAPI SetScrollPos(_In_ HWND, _In_ int, _In_ int, _In_ BOOL)
BOOL WINAPI PtInRect(_In_ LPCRECT, _In_ POINT)
#define SB_PAGEDOWN
Definition: winuser.h:569
#define SIF_ALL
Definition: winuser.h:1232
#define SB_LINEDOWN
Definition: winuser.h:565
HWND WINAPI GetParent(_In_ HWND)
#define SB_TOP
Definition: winuser.h:578
#define SIF_POS
Definition: winuser.h:1234
#define WM_SETCURSOR
Definition: winuser.h:1636
int WINAPI SetScrollInfo(_In_ HWND, _In_ int, _In_ LPCSCROLLINFO, _In_ BOOL)
int WINAPI GetScrollPos(_In_ HWND, _In_ int)
BOOL WINAPI GetScrollInfo(_In_ HWND, _In_ int, _Inout_ LPSCROLLINFO)
BOOL WINAPI ScrollWindow(_In_ HWND, _In_ int, _In_ int, _In_opt_ LPCRECT, _In_opt_ LPCRECT)
#define SB_PAGEUP
Definition: winuser.h:568
#define SB_HORZ
Definition: winuser.h:552
BOOL WINAPI ScreenToClient(_In_ HWND, _Inout_ LPPOINT)

Referenced by WinMain().

◆ prompt_save_changes()

static BOOL prompt_save_changes ( void  )
static

Definition at line 929 of file wordpad.c.

930{
931 if(!wszFileName[0])
932 {
934 gt.flags = GTL_NUMCHARS;
935 gt.codepage = 1200;
937 return TRUE;
938 }
939
941 {
942 return TRUE;
943 } else
944 {
945 LPWSTR displayFileName;
946 WCHAR *text;
947 int ret;
948
949 if(!wszFileName[0])
950 displayFileName = wszDefaultFileName;
951 else
952 displayFileName = file_basename(wszFileName);
953
955 (lstrlenW(displayFileName)+lstrlenW(wszSaveChanges))*sizeof(WCHAR));
956
957 if(!text)
958 return FALSE;
959
960 wsprintfW(text, wszSaveChanges, displayFileName);
961
963
965
966 switch(ret)
967 {
968 case IDNO:
969 return TRUE;
970
971 case IDYES:
972 if(wszFileName[0])
974 return DialogSaveFile();
975
976 default:
977 return FALSE;
978 }
979 }
980}
LPWSTR file_basename(LPWSTR path)
Definition: wordpad.c:212
#define HEAP_ZERO_MEMORY
Definition: compat.h:134
const WCHAR * text
Definition: package.c:1799
#define IDNO
Definition: winuser.h:836
#define MB_YESNOCANCEL
Definition: winuser.h:818

Referenced by DialogOpenFile(), OnCommand(), and WndProc().

◆ set_bar_states()

◆ set_caption()

static void set_caption ( LPCWSTR  wszNewFileName)
static

Definition at line 228 of file wordpad.c.

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}
GLuint GLsizei GLsizei * length
Definition: glext.h:6040
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
ULONG_PTR SIZE_T
Definition: typedefs.h:80

Referenced by DoOpenFile(), DoSaveFile(), OnCommand(), and WinMain().

◆ set_default_font()

static void set_default_font ( void  )
static

Definition at line 501 of file wordpad.c.

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}
Definition: mk_font.cpp:20
#define CFM_FACE
Definition: richedit.h:360
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185

Referenced by OnCreate(), and set_fileformat().

◆ set_fileformat()

static void set_fileformat ( WPARAM  format)
static

Definition at line 739 of file wordpad.c.

Referenced by DoOpenFile(), DoSaveFile(), OnCommand(), and WinMain().

◆ set_font()

static void set_font ( LPCWSTR  wszFaceName)
static

Definition at line 479 of file wordpad.c.

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}

Referenced by dialog_choose_font(), and on_fontlist_modified().

◆ set_size()

static void set_size ( float  size)
static

Definition at line 316 of file wordpad.c.

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}
unsigned int(__cdecl typeof(jpeg_read_scanlines))(struct jpeg_decompress_struct *
Definition: typeof.h:31

Referenced by on_sizelist_modified(), set_end_of_file_information(), and set_valid_data_length_information().

◆ set_statusbar_state()

static void set_statusbar_state ( BOOL  show)
static

Definition at line 703 of file wordpad.c.

704{
706
709}
static void store_bar_state(int bandId, BOOL show)
Definition: wordpad.c:665
HWND hStatusWnd
Definition: charmap.c:22
#define SW_HIDE
Definition: winuser.h:768
#define SW_SHOW
Definition: winuser.h:775

Referenced by OnCommand(), and set_bar_states().

◆ set_toolbar_state()

static void set_toolbar_state ( int  bandId,
BOOL  show 
)
static

Definition at line 675 of file wordpad.c.

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}
#define RB_SETBANDINFOW
Definition: commctrl.h:1584
#define RB_GETBANDINFOW
Definition: commctrl.h:1609
#define RB_SHOWBAND
Definition: commctrl.h:1618
#define RB_IDTOINDEX
Definition: commctrl.h:1588

Referenced by OnCommand(), and set_bar_states().

◆ ShowOpenError()

static void ShowOpenError ( DWORD  Code)
static

Definition at line 748 of file wordpad.c.

749{
751
752 switch(Code)
753 {
756 break;
757
758 default:
760 }
762}
#define ERROR_ACCESS_DENIED
Definition: compat.h:97
static const WCHAR Message[]
Definition: register.c:74
_In_ UCHAR _In_ UCHAR _In_ ULONG Code
Definition: wdfdevice.h:1701
#define STRING_OPEN_FAILED
Definition: wordpad.h:243
#define STRING_OPEN_ACCESS_DENIED
Definition: wordpad.h:244

Referenced by DoOpenFile().

◆ ShowWriteError()

static void ShowWriteError ( DWORD  Code)
static

Definition at line 824 of file wordpad.c.

825{
827
828 switch(Code)
829 {
832 break;
833
834 default:
836 }
838}
#define STRING_WRITE_FAILED
Definition: wordpad.h:241
#define STRING_WRITE_ACCESS_DENIED
Definition: wordpad.h:242

Referenced by DoSaveFile().

◆ store_bar_state()

static void store_bar_state ( int  bandId,
BOOL  show 
)
static

Definition at line 665 of file wordpad.c.

666{
667 int formatIndex = reg_formatindex(fileFormat);
668
669 if(show)
670 barState[formatIndex] |= (1 << bandId);
671 else
672 barState[formatIndex] &= ~(1 << bandId);
673}

Referenced by set_statusbar_state(), and set_toolbar_state().

◆ stream_in()

static DWORD CALLBACK stream_in ( DWORD_PTR  cookie,
LPBYTE  buffer,
LONG  cb,
LONG pcb 
)
static

Definition at line 183 of file wordpad.c.

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}
#define read
Definition: acwin.h:96
static HMODULE MODULEINFO DWORD cb
Definition: module.c:33
Definition: cookie.c:34
PVOID HANDLE
Definition: typedefs.h:73

Referenced by DoOpenFile().

◆ stream_out()

static DWORD CALLBACK stream_out ( DWORD_PTR  cookie,
LPBYTE  buffer,
LONG  cb,
LONG pcb 
)
static

Definition at line 196 of file wordpad.c.

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}

Referenced by DoSaveFile().

◆ tabstops_proc()

static INT_PTR CALLBACK tabstops_proc ( HWND  hWnd,
UINT  message,
WPARAM  wParam,
LPARAM  lParam 
)
static

Definition at line 1642 of file wordpad.c.

1643{
1644 switch(message)
1645 {
1646 case WM_INITDIALOG:
1647 {
1649 PARAFORMAT pf;
1651 int i;
1652
1653 pf.cbSize = sizeof(pf);
1654 pf.dwMask = PFM_TABSTOPS;
1657
1658 for(i = 0; i < pf.cTabCount; i++)
1659 {
1662 }
1664 }
1665 break;
1666
1667 case WM_COMMAND:
1668 switch(LOWORD(wParam))
1669 {
1670 case IDC_TABSTOPS:
1671 {
1673 HWND hAddWnd = GetDlgItem(hWnd, ID_TAB_ADD);
1674 HWND hDelWnd = GetDlgItem(hWnd, ID_TAB_DEL);
1675 HWND hEmptyWnd = GetDlgItem(hWnd, ID_TAB_EMPTY);
1676
1678 EnableWindow(hAddWnd, TRUE);
1679 else
1680 EnableWindow(hAddWnd, FALSE);
1681
1682 if(SendMessageW(hTabWnd, CB_GETCOUNT, 0, 0))
1683 {
1684 EnableWindow(hEmptyWnd, TRUE);
1685
1687 EnableWindow(hDelWnd, FALSE);
1688 else
1689 EnableWindow(hDelWnd, TRUE);
1690 } else
1691 {
1692 EnableWindow(hEmptyWnd, FALSE);
1693 }
1694 }
1695 break;
1696
1697 case ID_TAB_ADD:
1698 {
1701 UNIT unit;
1702
1705
1707 {
1708 float number = 0;
1709 int item_count = SendMessageW(hTabWnd, CB_GETCOUNT, 0, 0);
1710
1712 {
1715 } else if (item_count >= MAX_TAB_STOPS) {
1718 } else {
1719 int i;
1720 float next_number = -1;
1721 int next_number_in_twips = -1;
1722 int insert_number = units_to_twips(unit, number);
1723
1724 /* linear search for position to insert the string */
1725 for(i = 0; i < item_count; i++)
1726 {
1728 number_from_string(buffer, &next_number, &unit);
1729 next_number_in_twips = units_to_twips(unit, next_number);
1730 if (insert_number <= next_number_in_twips)
1731 break;
1732 }
1733 if (insert_number != next_number_in_twips)
1734 {
1735 number_with_units(buffer, insert_number);
1738 }
1739 }
1740 }
1742 }
1743 break;
1744
1745 case ID_TAB_DEL:
1746 {
1748 LRESULT ret;
1750 if(ret != CB_ERR)
1752 }
1753 break;
1754
1755 case ID_TAB_EMPTY:
1756 {
1760 }
1761 break;
1762
1763 case IDOK:
1764 {
1766 int i;
1768 PARAFORMAT pf;
1769 float number;
1770 UNIT unit;
1771
1772 pf.cbSize = sizeof(pf);
1773 pf.dwMask = PFM_TABSTOPS;
1774
1775 for(i = 0; SendMessageW(hTabWnd, CB_GETLBTEXT, i,
1776 (LPARAM)&buffer) != CB_ERR &&
1777 i < MAX_TAB_STOPS; i++)
1778 {
1781 }
1782 pf.cTabCount = i;
1784 }
1785 /* Fall through */
1786 case IDCANCEL:
1788 return TRUE;
1789 }
1790 }
1791 return FALSE;
1792}
static void append_current_units(LPWSTR buffer)
Definition: wordpad.c:1374
HWND hTabWnd
Definition: msconfig.c:22
#define MAX_TAB_STOPS
Definition: richedit.h:218
#define PFM_TABSTOPS
Definition: richedit.h:842
SHORT cTabCount
Definition: richedit.h:661
LONG rgxTabs[MAX_TAB_STOPS]
Definition: richedit.h:662
#define CB_GETLBTEXT
Definition: winuser.h:1952
#define CB_GETCOUNT
Definition: winuser.h:1942
#define CB_LIMITTEXT
Definition: winuser.h:1958
#define CB_INSERTSTRING
Definition: winuser.h:1957
#define CB_DELETESTRING
Definition: winuser.h:1937
#define ID_TAB_ADD
Definition: wordpad.h:116
#define ID_TAB_EMPTY
Definition: wordpad.h:118
#define IDC_TABSTOPS
Definition: wordpad.h:167
#define ID_TAB_DEL
Definition: wordpad.h:117
#define STRING_MAX_TAB_STOPS
Definition: wordpad.h:246

Referenced by OnCommand().

◆ units_to_twips()

static int units_to_twips ( UNIT  unit,
float  number 
)
static

Definition at line 1352 of file wordpad.c.

1353{
1354 int twips = 0;
1355
1356 switch(unit)
1357 {
1358 case UNIT_CM:
1359 twips = (int)(number * 1000.0 / (float)CENTMM_PER_INCH * (float)TWIPS_PER_INCH);
1360 break;
1361
1362 case UNIT_INCH:
1363 twips = (int)(number * (float)TWIPS_PER_INCH);
1364 break;
1365
1366 case UNIT_PT:
1367 twips = (int)(number * (0.0138 * (float)TWIPS_PER_INCH));
1368 break;
1369 }
1370
1371 return twips;
1372}

Referenced by paraformat_proc(), and tabstops_proc().

◆ update_font_list()

static void update_font_list ( void  )
static

Definition at line 424 of file wordpad.c.

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}
static void update_size_list(void)
Definition: wordpad.c:404
#define WM_GETTEXT
Definition: winuser.h:1618

Referenced by DoOpenFile(), OnCommand(), and OnNotify().

◆ update_size_list()

static void update_size_list ( void  )
static

Definition at line 404 of file wordpad.c.

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}

Referenced by update_font_list().

◆ update_window()

static void update_window ( void  )
static

Definition at line 651 of file wordpad.c.

652{
653 RECT rect;
654
656
658}
static LRESULT OnSize(HWND hWnd, WPARAM wParam, LPARAM lParam)
Definition: wordpad.c:2536
& rect
Definition: startmenu.cpp:1413
#define MAKELPARAM(l, h)
Definition: winuser.h:4008
#define SIZE_RESTORED
Definition: winuser.h:2505

Referenced by create_animate(), OnCommand(), preview_exit(), set_bar_states(), and test_redraw().

◆ validate_endptr()

static BOOL validate_endptr ( LPCWSTR  endptr,
UNIT punit 
)
static

Definition at line 256 of file wordpad.c.

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}

Referenced by number_from_string().

◆ WinMain()

int CALLBACK WinMain ( HINSTANCE  hInstance,
HINSTANCE  hOldInstance,
LPSTR  szCmdParagraph,
int  nCmdShow 
)

Definition at line 2650 of file wordpad.c.

2651{
2653 HACCEL hAccel;
2654 WNDCLASSEXW wc;
2655 MSG msg;
2656 RECT rc;
2657 UINT_PTR hPrevRulerProc;
2658 HWND hRulerWnd;
2659 POINTL EditPoint;
2660 DWORD bMaximized;
2661 static const WCHAR wszAccelTable[] = {'M','A','I','N','A','C','C','E','L',
2662 'T','A','B','L','E','\0'};
2663
2664 InitCommonControlsEx(&classes);
2665
2666 switch (GetUserDefaultUILanguage())
2667 {
2670 break;
2671
2672 default:
2673 break;
2674 }
2675
2676 hAccel = LoadAcceleratorsW(hInstance, wszAccelTable);
2677
2678 wc.cbSize = sizeof(wc);
2679 wc.style = 0;
2680 wc.lpfnWndProc = WndProc;
2681 wc.cbClsExtra = 0;
2682 wc.cbWndExtra = 4;
2683 wc.hInstance = hInstance;
2691 RegisterClassExW(&wc);
2692
2693 wc.style = 0;
2695 wc.cbClsExtra = 0;
2696 wc.cbWndExtra = 0;
2697 wc.hInstance = hInstance;
2698 wc.hIcon = NULL;
2699 wc.hIconSm = NULL;
2701 wc.hbrBackground = NULL;
2702 wc.lpszMenuName = NULL;
2704 RegisterClassExW(&wc);
2705
2708 rc.left, rc.top, rc.right-rc.left, rc.bottom-rc.top, NULL, NULL, hInstance, NULL);
2709 registry_read_maximized(&bMaximized);
2710 if ((nCmdShow == SW_SHOWNORMAL || nCmdShow == SW_SHOWDEFAULT)
2711 && bMaximized)
2712 nCmdShow = SW_SHOWMAXIMIZED;
2713 ShowWindow(hMainWnd, nCmdShow);
2714
2721
2724 hPrevRulerProc = SetWindowLongPtrW(hRulerWnd, GWLP_WNDPROC, (UINT_PTR)ruler_proc);
2725 SendMessageW(hRulerWnd, WM_USER, (WPARAM)&EditPoint, hPrevRulerProc);
2726
2728
2729 while(GetMessageW(&msg,0,0,0))
2730 {
2732 continue;
2733
2735 continue;
2738 if (!PeekMessageW(&msg, 0, 0, 0, PM_NOREMOVE))
2740 }
2741
2742 return 0;
2743}
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 registry_read_winrect(RECT *rc)
Definition: registry.c:111
void registry_read_maximized(DWORD *bMaximized)
Definition: registry.c:124
static const WCHAR wszMainWndClass[]
Definition: wordpad.c:53
const WCHAR wszPreviewWndClass[]
Definition: wordpad.c:57
static LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
Definition: wordpad.c:2575
LRESULT CALLBACK preview_proc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
Definition: print.c:1016
static void HandleCommandLine(LPWSTR cmdline)
Definition: wordpad.c:1157
BOOL WINAPI InitCommonControlsEx(const INITCOMMONCONTROLSEX *lpInitCtrls)
Definition: commctrl.c:893
LPWSTR WINAPI GetCommandLineW(VOID)
Definition: proc.c:2013
LANGID WINAPI GetUserDefaultUILanguage(void)
Definition: lang.c:816
HACCEL hAccel
Definition: main.c:47
unsigned __int3264 UINT_PTR
Definition: mstsclib_h.h:274
#define WS_OVERLAPPEDWINDOW
Definition: pedump.c:637
#define ICC_USEREX_CLASSES
Definition: commctrl.h:68
#define ICC_COOL_CLASSES
Definition: commctrl.h:69
#define ICC_BAR_CLASSES
Definition: commctrl.h:60
#define EM_POSFROMCHAR
Definition: richedit.h:77
#define MAKELANGID(p, s)
Definition: nls.h:15
#define LANG_HEBREW
Definition: nls.h:67
#define SUBLANG_DEFAULT
Definition: nls.h:168
LPCWSTR lpszClassName
Definition: winuser.h:3226
LPCWSTR lpszMenuName
Definition: winuser.h:3225
HBRUSH hbrBackground
Definition: winuser.h:3224
WNDPROC lpfnWndProc
Definition: winuser.h:3218
UINT cbSize
Definition: winuser.h:3216
int cbWndExtra
Definition: winuser.h:3220
HCURSOR hCursor
Definition: winuser.h:3223
HICON hIconSm
Definition: winuser.h:3227
HINSTANCE hInstance
Definition: winuser.h:3221
UINT style
Definition: winuser.h:3217
int cbClsExtra
Definition: winuser.h:3219
HICON hIcon
Definition: winuser.h:3222
#define GWLP_WNDPROC
Definition: treelist.c:66
TW_UINT32 TW_UINT16 TW_UINT16 MSG
Definition: twain.h:1829
BOOL WINAPI SetProcessDefaultLayout(DWORD dwDefaultLayout)
Definition: window.c:1719
#define LAYOUT_RTL
Definition: wingdi.h:1371
#define SW_SHOWNORMAL
Definition: winuser.h:770
#define SW_SHOWMAXIMIZED
Definition: winuser.h:773
BOOL WINAPI TranslateMessage(_In_ const MSG *)
#define COLOR_WINDOW
Definition: winuser.h:918
BOOL WINAPI IsDialogMessageW(_In_ HWND, _In_ LPMSG)
BOOL WINAPI GetMessageW(_Out_ LPMSG, _In_opt_ HWND, _In_ UINT, _In_ UINT)
HBRUSH WINAPI GetSysColorBrush(_In_ int)
#define SM_CYSMICON
Definition: winuser.h:1013
#define SW_SHOWDEFAULT
Definition: winuser.h:780
#define SM_CXSMICON
Definition: winuser.h:1012
BOOL WINAPI PeekMessageW(_Out_ LPMSG, _In_opt_ HWND, _In_ UINT, _In_ UINT, _In_ UINT)
ATOM WINAPI RegisterClassExW(_In_ CONST WNDCLASSEXW *)
#define IDC_IBEAM
Definition: winuser.h:688
HACCEL WINAPI LoadAcceleratorsW(_In_opt_ HINSTANCE, _In_ LPCWSTR)
LRESULT WINAPI DispatchMessageW(_In_ const MSG *)
int WINAPI TranslateAcceleratorW(_In_ HWND, _In_ HACCEL, _In_ LPMSG)
#define SetWindowLongPtrW
Definition: winuser.h:5346
#define PM_NOREMOVE
Definition: winuser.h:1195
HICON WINAPI LoadIconW(_In_opt_ HINSTANCE hInstance, _In_ LPCWSTR lpIconName)
Definition: cursoricon.c:2075
int WINAPI GetSystemMetrics(_In_ int)
#define IDM_COLOR_POPUP
Definition: wordpad.h:181

◆ WndProc()

static LRESULT CALLBACK WndProc ( HWND  hWnd,
UINT  msg,
WPARAM  wParam,
LPARAM  lParam 
)
static

Definition at line 2575 of file wordpad.c.

2576{
2577 if(msg == ID_FINDMSGSTRING)
2579
2580 switch(msg)
2581 {
2582 case WM_CREATE:
2583 return OnCreate( hWnd );
2584
2585 case WM_USER:
2586 return OnUser( hWnd );
2587
2588 case WM_NOTIFY:
2589 return OnNotify( hWnd, lParam );
2590
2591 case WM_COMMAND:
2592 if(preview_isactive())
2593 {
2594 return preview_command( hWnd, wParam );
2595 }
2596
2597 return OnCommand( hWnd, wParam, lParam );
2598
2599 case WM_DESTROY:
2600 PostQuitMessage(0);
2601 break;
2602
2603 case WM_CLOSE:
2604 if(preview_isactive())
2605 {
2607 } else if(prompt_save_changes())
2608 {
2611 PostQuitMessage(0);
2612 }
2613 break;
2614
2615 case WM_ACTIVATE:
2616 if (LOWORD(wParam))
2618 return 0;
2619
2620 case WM_INITMENUPOPUP:
2621 return OnInitPopupMenu( hWnd, wParam );
2622
2623 case WM_SIZE:
2624 return OnSize( hWnd, wParam, lParam );
2625
2626 case WM_CONTEXTMENU:
2627 return DefWindowProcW(hWnd, msg, wParam, lParam);
2628
2629 case WM_DROPFILES:
2630 {
2632 DragQueryFileW((HDROP)wParam, 0, file, MAX_PATH);
2633 DragFinish((HDROP)wParam);
2634
2637 }
2638 break;
2639 case WM_PAINT:
2640 if(!preview_isactive())
2641 return DefWindowProcW(hWnd, msg, wParam, lParam);
2642
2643 default:
2644 return DefWindowProcW(hWnd, msg, wParam, lParam);
2645 }
2646
2647 return 0;
2648}
LRESULT preview_command(HWND hWnd, WPARAM wParam)
Definition: print.c:1203
void registry_set_formatopts_all(DWORD barState[], DWORD wordWrap[])
Definition: registry.c:419
void registry_set_options(HWND hMainWnd)
Definition: registry.c:83
static LRESULT OnCreate(HWND hWnd)
Definition: wordpad.c:1794
static void preview_exit(HWND hMainWnd)
Definition: wordpad.c:723
static LRESULT OnCommand(HWND hWnd, WPARAM wParam, LPARAM lParam)
Definition: wordpad.c:2057
static LRESULT OnUser(HWND hWnd)
Definition: wordpad.c:1952
static LRESULT OnInitPopupMenu(HWND hWnd, WPARAM wParam)
Definition: wordpad.c:2475
static LRESULT OnNotify(HWND hWnd, LPARAM lParam)
Definition: wordpad.c:2004
void WINAPI DragFinish(HDROP h)
Definition: shellole.c:538
UINT WINAPI DragQueryFileW(HDROP hDrop, UINT lFile, LPWSTR lpszwFile, UINT lLength)
Definition: shellole.c:622
#define WM_CONTEXTMENU
Definition: richedit.h:64
Definition: fci.c:127
#define WM_DROPFILES
Definition: winuser.h:1825
#define WM_ACTIVATE
Definition: winuser.h:1612
#define WM_INITMENUPOPUP
Definition: winuser.h:1746
#define WM_DESTROY
Definition: winuser.h:1609

Referenced by WinMain().

Variable Documentation

◆ barState

◆ fileFormat

◆ hColorPopupMenu

HMENU hColorPopupMenu
static

Definition at line 63 of file wordpad.c.

Referenced by OnCommand(), and WinMain().

◆ hEditorWnd

◆ hFindWnd

HWND hFindWnd
static

Definition at line 62 of file wordpad.c.

Referenced by dialog_find(), handle_findmsg(), and WinMain().

◆ hMainWnd

◆ ID_FINDMSGSTRING

UINT ID_FINDMSGSTRING
static

Definition at line 65 of file wordpad.c.

Referenced by OnCreate(), and WndProc().

◆ stringFormat

◆ textcolors

const COLORREF textcolors[]
static
Initial value:
=
{
0x00000000L,0x00000080L,0x00008000L,0x00008080L,
0x00800000L,0x00800080L,0x00808000L,0x00808080L,
0x00c0c0c0L,0x000000ffL,0x0000ff00L,0x0000ffffL,
0x00ff0000L,0x00ff00ffL,0x00ffff00L,0x00FFFFFFL
}

Definition at line 2049 of file wordpad.c.

Referenced by OnCommand().

◆ units_cmW

WCHAR units_cmW[MAX_STRING_LEN]
static

Definition at line 75 of file wordpad.c.

Referenced by append_current_units(), DoLoadStrings(), number_with_units(), and validate_endptr().

◆ units_inchW

WCHAR units_inchW[MAX_STRING_LEN]
static

Definition at line 77 of file wordpad.c.

Referenced by DoLoadStrings(), and validate_endptr().

◆ units_inW

WCHAR units_inW[MAX_STRING_LEN]
static

Definition at line 76 of file wordpad.c.

Referenced by DoLoadStrings(), and validate_endptr().

◆ units_ptW

WCHAR units_ptW[MAX_STRING_LEN]
static

Definition at line 78 of file wordpad.c.

Referenced by DoLoadStrings(), and validate_endptr().

◆ wordWrap

◆ wszAppTitle

◆ wszDefaultFileName

WCHAR wszDefaultFileName[MAX_STRING_LEN]
static

Definition at line 73 of file wordpad.c.

Referenced by DoLoadStrings(), prompt_save_changes(), and set_caption().

◆ wszFileName

◆ wszFilter

WCHAR wszFilter[MAX_STRING_LEN *4+6 *3+5]
static

◆ wszMainWndClass

const WCHAR wszMainWndClass[] = {'W','O','R','D','P','A','D','T','O','P',0}
static

Definition at line 53 of file wordpad.c.

Referenced by WinMain().

◆ wszPreviewWndClass

const WCHAR wszPreviewWndClass[] = {'P','r','t','P','r','e','v','i','e','w',0}

Definition at line 57 of file wordpad.c.

Referenced by init_preview(), and WinMain().

◆ wszSaveChanges

WCHAR wszSaveChanges[MAX_STRING_LEN]
static

Definition at line 74 of file wordpad.c.

Referenced by DoLoadStrings(), and prompt_save_changes().