From 7aa2e616f0c252a0fab5965abed43f38a21ed402 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexander=20Nicolaysen=20S=C3=B8rnes?= Date: Sun, 25 Feb 2007 14:40:27 +0100 Subject: [PATCH] wordpad: Add open file dialogue. --- programs/wordpad/En.rc | 7 ++++ programs/wordpad/No.rc | 7 ++++ programs/wordpad/resource.h | 4 ++ programs/wordpad/wordpad.c | 76 ++++++++++++++++++++++++++++++++++++- 4 files changed, 93 insertions(+), 1 deletion(-) diff --git a/programs/wordpad/En.rc b/programs/wordpad/En.rc index a78ab0e159e..bab41781053 100644 --- a/programs/wordpad/En.rc +++ b/programs/wordpad/En.rc @@ -66,3 +66,10 @@ BEGIN END END END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_RICHTEXT_FILES_RTF, "Rich text format (*.rtf)" + STRING_TEXT_FILES_TXT, "Text files (*.txt)" + STRING_ALL_FILES, "All documents (*.*)" +END diff --git a/programs/wordpad/No.rc b/programs/wordpad/No.rc index 70214901b6e..b13fb678beb 100644 --- a/programs/wordpad/No.rc +++ b/programs/wordpad/No.rc @@ -66,3 +66,10 @@ BEGIN END END END + +STRINGTABLE DISCARDABLE +BEGIN + STRING_RICHTEXT_FILES_RTF, "Rikt tekstformat (*.rtf)" + STRING_TEXT_FILES_TXT, "Tekstfiler (*.txt)" + STRING_ALL_FILES, "Alle filer (*.*)" +END diff --git a/programs/wordpad/resource.h b/programs/wordpad/resource.h index 72976f78a75..5e996d5ab97 100644 --- a/programs/wordpad/resource.h +++ b/programs/wordpad/resource.h @@ -59,3 +59,7 @@ #define IDC_COMBO 2004 #define IDB_TOOLBAR 100 + +#define STRING_ALL_FILES 1400 +#define STRING_TEXT_FILES_TXT 1401 +#define STRING_RICHTEXT_FILES_RTF 1402 diff --git a/programs/wordpad/wordpad.c b/programs/wordpad/wordpad.c index 455f73f4af1..0d45cb76c25 100644 --- a/programs/wordpad/wordpad.c +++ b/programs/wordpad/wordpad.c @@ -21,6 +21,8 @@ #define WIN32_LEAN_AND_MEAN #define _WIN32_IE 0x0400 +#define MAX_STRING_LEN 255 + #include #include #include @@ -29,10 +31,10 @@ #include #include #include +#include #include "resource.h" - /* use LoadString */ static const WCHAR xszAppTitle[] = {'W','i','n','e',' ','W','o','r','d','p','a','d',0}; static const WCHAR xszMainMenu[] = {'M','A','I','N','M','E','N','U',0}; @@ -44,6 +46,32 @@ static const WCHAR wszAppTitle[] = {'W','i','n','e',' ','W','o','r','d','p','a', static HWND hMainWnd; static HWND hEditorWnd; +static char szFilter[MAX_STRING_LEN]; + +/* Load string resources */ +static void DoLoadStrings() +{ + LPSTR p = szFilter; + char files_rtf[] = "*.rtf"; + char files_txt[] = "*.txt"; + char files_all[] = "*.*"; + HINSTANCE hInstance = (HINSTANCE)GetWindowLongPtr(hMainWnd, GWLP_HINSTANCE); + + LoadString(hInstance, STRING_RICHTEXT_FILES_RTF, p, MAX_STRING_LEN); + p += strlen(p) + 1; + lstrcpy(p, files_rtf); + p += strlen(p) + 1; + LoadString(hInstance, STRING_TEXT_FILES_TXT, p, MAX_STRING_LEN); + p += strlen(p) + 1; + lstrcpy(p, files_txt); + p += strlen(p) + 1; + LoadString(hInstance, STRING_ALL_FILES, p, MAX_STRING_LEN); + p += strlen(p) + 1; + lstrcpy(p, files_all); + p += strlen(p) + 1; + *p = '\0'; +} + static void AddButton(HWND hwndToolBar, int nImage, int nCommand) { TBBUTTON button; @@ -94,6 +122,10 @@ static void DoOpenFile(LPCWSTR szFileName) DWORD dwNumRead; EDITSTREAM es; + char szCaption[MAX_PATH]; + char szAppTitle[sizeof(wszAppTitle)]; + char szSeparator[] = " - "; + hFile = CreateFileW(szFileName, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); if (hFile == INVALID_HANDLE_VALUE) @@ -133,6 +165,42 @@ static void DoOpenFile(LPCWSTR szFileName) HeapFree(GetProcessHeap(), 0, pTemp); SetFocus(hEditorWnd); + + WideCharToMultiByte(CP_ACP, 0, wszAppTitle, -1, szAppTitle, sizeof(wszAppTitle), NULL, NULL); + + WideCharToMultiByte(CP_ACP, 0, szFileName, -1, szCaption, MAX_PATH, NULL, NULL); + + lstrcat(szCaption, szSeparator); + lstrcat(szCaption, szAppTitle); + + SetWindowText(hMainWnd, szCaption); +} + +static void DialogOpenFile() +{ + OPENFILENAME ofn; + + char szFile[MAX_PATH] = ""; + char szDefExt[] = "rtf"; + + ZeroMemory(&ofn, sizeof(ofn)); + + ofn.lStructSize = sizeof(ofn); + ofn.Flags = OFN_HIDEREADONLY | OFN_FILEMUSTEXIST | OFN_PATHMUSTEXIST; + ofn.hwndOwner = hMainWnd; + ofn.lpstrFilter = szFilter; + ofn.lpstrFile = szFile; + ofn.nMaxFile = MAX_PATH; + ofn.lpstrDefExt = szDefExt; + + if(GetOpenFileName(&ofn)) + { + WCHAR szOpenFile[MAX_PATH]; + + MultiByteToWideChar(CP_ACP, 0, ofn.lpstrFile, MAX_PATH, szOpenFile, sizeof(szOpenFile)/sizeof(szOpenFile[0])); + + DoOpenFile(szOpenFile); + } } static void HandleCommandLine(LPWSTR cmdline) @@ -263,6 +331,9 @@ static LRESULT OnCreate( HWND hWnd, WPARAM wParam, LPARAM lParam) SetFocus(hEditorWnd); SendMessage(hEditorWnd, EM_SETEVENTMASK, 0, ENM_SELCHANGE); + + DoLoadStrings(); + return 0; } @@ -337,6 +408,9 @@ static LRESULT OnCommand( HWND hWnd, WPARAM wParam, LPARAM lParam) break; case ID_FILE_OPEN: + DialogOpenFile(); + break; + case ID_FILE_SAVE: case ID_PRINT: case ID_PREVIEW: