From 72fdadbd18e5a0283cdc597c8c2c6bda1e962619 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Alexander=20Nicolaysen=20S=C3=B8rnes?= Date: Fri, 24 Aug 2007 15:46:09 +0200 Subject: [PATCH] wordpad: Add font list. --- programs/wordpad/resource.h | 10 ++-- programs/wordpad/wordpad.c | 129 ++++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 132 insertions(+), 7 deletions(-) diff --git a/programs/wordpad/resource.h b/programs/wordpad/resource.h index 9eaf97ea5e4..655681796f3 100644 --- a/programs/wordpad/resource.h +++ b/programs/wordpad/resource.h @@ -79,11 +79,12 @@ #define BANDID_FORMATBAR 3 #define BANDID_RULER 0 #define BANDID_STATUSBAR 1 +#define BANDID_FONTLIST 4 -#define BANDID_PREVIEW_BTN1 4 -#define BANDID_PREVIEW_BTN2 5 -#define BANDID_PREVIEW_BTN3 6 -#define BANDID_PREVIEW_BTN4 7 +#define BANDID_PREVIEW_BTN1 5 +#define BANDID_PREVIEW_BTN2 6 +#define BANDID_PREVIEW_BTN3 7 +#define BANDID_PREVIEW_BTN4 8 #define ID_WORDWRAP_NONE 0 #define ID_WORDWRAP_WINDOW 1 @@ -122,6 +123,7 @@ #define IDC_PARA_FIRST 2010 #define IDC_PARA_ALIGN 2011 #define IDC_TABSTOPS 2012 +#define IDC_FONTLIST 2013 #define IDD_DATETIME 2100 #define IDD_NEWFILE 2101 diff --git a/programs/wordpad/wordpad.c b/programs/wordpad/wordpad.c index c4ad8717b8a..3f2096e21f1 100644 --- a/programs/wordpad/wordpad.c +++ b/programs/wordpad/wordpad.c @@ -570,6 +570,24 @@ static BOOL number_from_string(LPCWSTR string, float *num, BOOL units) } } +static void update_font_list(void) +{ + HWND hReBar = GetDlgItem(hMainWnd, IDC_REBAR); + HWND hFontList = GetDlgItem(hReBar, IDC_FONTLIST); + HWND hFontListEdit = (HWND)SendMessageW(hFontList, CBEM_GETEDITCONTROL, 0, 0); + WCHAR fontName[MAX_STRING_LEN]; + CHARFORMAT2W fmt; + + ZeroMemory(&fmt, sizeof(fmt)); + fmt.cbSize = sizeof(fmt); + + SendMessageW(hEditorWnd, EM_GETCHARFORMAT, SCF_SELECTION, (LPARAM)&fmt); + SendMessageW(hFontListEdit, WM_GETTEXT, MAX_PATH, (LPARAM)fontName); + + if(lstrcmpW(fontName, fmt.szFaceName)) + SendMessageW(hFontListEdit, WM_SETTEXT, 0, (LPARAM)fmt.szFaceName); +} + static void clear_formatting(void) { PARAFORMAT2 pf; @@ -606,6 +624,20 @@ static WPARAM fileformat_flags(int format) return flags[format]; } +static void set_font(LPCWSTR wszFaceName) +{ + CHARFORMAT2W fmt; + + ZeroMemory(&fmt, sizeof(fmt)); + + fmt.cbSize = sizeof(fmt); + fmt.dwMask = CFM_FACE; + + lstrcpyW(fmt.szFaceName, wszFaceName); + + SendMessageW(hEditorWnd, EM_SETCHARFORMAT, SCF_SELECTION, (LPARAM)&fmt); +} + static void set_default_font(void) { static const WCHAR richTextFont[] = {'T','i','m','e','s',' ','N','e','w',' ', @@ -630,6 +662,60 @@ static void set_default_font(void) SendMessageW(hEditorWnd, EM_SETCHARFORMAT, SCF_DEFAULT, (LPARAM)&fmt); } +static void add_font(LPWSTR fontName, HWND hListWnd) +{ + COMBOBOXEXITEMW cbItem; + WCHAR buffer[MAX_PATH]; + + cbItem.mask = CBEIF_TEXT; + cbItem.pszText = buffer; + cbItem.cchTextMax = MAX_STRING_LEN; + cbItem.iItem = 0; + + while(SendMessageW(hListWnd, CBEM_GETITEMW, 0, (LPARAM)&cbItem)) + { + if(lstrcmpiW(cbItem.pszText, fontName) <= 0) + cbItem.iItem++; + else + break; + } + cbItem.pszText = fontName; + SendMessageW(hListWnd, CBEM_INSERTITEMW, 0, (LPARAM)&cbItem); +} + +int CALLBACK enum_font_proc(const LOGFONTW *lpelfe, const TEXTMETRICW *lpntme, + DWORD FontType, LPARAM lParam) +{ + HWND hListWnd = (HWND) lParam; + + if(SendMessageW(hListWnd, CB_FINDSTRINGEXACT, -1, (LPARAM)lpelfe->lfFaceName) == CB_ERR) + { + add_font((LPWSTR)lpelfe->lfFaceName, hListWnd); + } + + return 1; +} + +static void populate_font_list(HWND hListWnd) +{ + HDC hdc = GetDC(hMainWnd); + LOGFONTW fontinfo; + HWND hListEditWnd = (HWND)SendMessageW(hListWnd, CBEM_GETEDITCONTROL, 0, 0); + CHARFORMAT2W fmt; + + fontinfo.lfCharSet = DEFAULT_CHARSET; + *fontinfo.lfFaceName = '\0'; + fontinfo.lfPitchAndFamily = 0; + + EnumFontFamiliesExW(hdc, &fontinfo, enum_font_proc, + (LPARAM)hListWnd, 0); + + ZeroMemory(&fmt, sizeof(fmt)); + fmt.cbSize = sizeof(fmt); + SendMessageW(hEditorWnd, EM_GETCHARFORMAT, SCF_DEFAULT, (LPARAM)&fmt); + SendMessageW(hListEditWnd, WM_SETTEXT, 0, (LPARAM)fmt.szFaceName); +} + static void update_window(void) { RECT rect; @@ -666,7 +752,7 @@ static void set_toolbar_state(int bandId, BOOL show) if(bandId == BANDID_TOOLBAR) { REBARBANDINFOW rbbinfo; - int index = SendMessageW(hwndReBar, RB_IDTOINDEX, BANDID_FORMATBAR, 0); + int index = SendMessageW(hwndReBar, RB_IDTOINDEX, BANDID_FONTLIST, 0); rbbinfo.cbSize = sizeof(rbbinfo); rbbinfo.fMask = RBBIM_STYLE; @@ -696,6 +782,7 @@ static void set_statusbar_state(BOOL show) static void set_bar_states(void) { set_toolbar_state(BANDID_TOOLBAR, is_bar_visible(BANDID_TOOLBAR)); + set_toolbar_state(BANDID_FONTLIST, is_bar_visible(BANDID_FORMATBAR)); set_toolbar_state(BANDID_FORMATBAR, is_bar_visible(BANDID_FORMATBAR)); set_statusbar_state(is_bar_visible(BANDID_STATUSBAR)); @@ -849,6 +936,7 @@ static void DoOpenFile(LPCWSTR szOpenFileName) lstrcpyW(wszFileName, szOpenFileName); SendMessageW(hEditorWnd, EM_SETMODIFY, FALSE, 0); registry_set_filelist(szOpenFileName); + update_font_list(); } static void DoSaveFile(LPCWSTR wszSaveFileName, WPARAM format) @@ -2136,7 +2224,7 @@ static int context_menu(LPARAM lParam) static LRESULT OnCreate( HWND hWnd, WPARAM wParam, LPARAM lParam) { - HWND hToolBarWnd, hFormatBarWnd, hReBarWnd; + HWND hToolBarWnd, hFormatBarWnd, hReBarWnd, hFontListWnd; HINSTANCE hInstance = (HINSTANCE)GetWindowLongPtr(hWnd, GWLP_HINSTANCE); HANDLE hDLL; TBADDBITMAP ab; @@ -2198,6 +2286,16 @@ static LRESULT OnCreate( HWND hWnd, WPARAM wParam, LPARAM lParam) SendMessageW(hReBarWnd, RB_INSERTBAND, -1, (LPARAM)&rbb); + hFontListWnd = CreateWindowExW(0, WC_COMBOBOXEXW, NULL, + WS_BORDER | WS_VISIBLE | WS_CHILD | CBS_DROPDOWN | CBS_SORT, + 0, 0, 200, 150, hReBarWnd, (HMENU)IDC_FONTLIST, hInstance, NULL); + + rbb.hwndChild = hFontListWnd; + rbb.cx = 200; + rbb.wID = BANDID_FONTLIST; + + SendMessageW(hReBarWnd, RB_INSERTBAND, -1, (LPARAM)&rbb); + hFormatBarWnd = CreateToolbarEx(hReBarWnd, CCS_NOPARENTALIGN | CCS_NOMOVEY | WS_VISIBLE | TBSTYLE_TOOLTIPS | TBSTYLE_BUTTON, IDC_FORMATBAR, 7, hInstance, IDB_FORMATBAR, NULL, 0, 16, 16, 16, 16, sizeof(TBBUTTON)); @@ -2216,6 +2314,7 @@ static LRESULT OnCreate( HWND hWnd, WPARAM wParam, LPARAM lParam) rbb.hwndChild = hFormatBarWnd; rbb.wID = BANDID_FORMATBAR; + rbb.fStyle ^= RBBS_BREAK; SendMessageW(hReBarWnd, RB_INSERTBAND, -1, (LPARAM)&rbb); @@ -2243,6 +2342,7 @@ static LRESULT OnCreate( HWND hWnd, WPARAM wParam, LPARAM lParam) set_default_font(); + populate_font_list(hFontListWnd); DoLoadStrings(); SendMessageW(hEditorWnd, EM_SETMODIFY, FALSE, 0); @@ -2311,7 +2411,26 @@ static LRESULT OnUser( HWND hWnd, WPARAM wParam, LPARAM lParam) static LRESULT OnNotify( HWND hWnd, WPARAM wParam, LPARAM lParam) { HWND hwndEditor = GetDlgItem(hWnd, IDC_EDITOR); + HWND hwndReBar = GetDlgItem(hWnd, IDC_REBAR); NMHDR *pHdr = (NMHDR *)lParam; + HWND hwndFontList = GetDlgItem(hwndReBar, IDC_FONTLIST); + + if (pHdr->hwndFrom == hwndFontList) + { + if (pHdr->code == CBEN_ENDEDITW) + { + CHARFORMAT2W format; + NMCBEENDEDIT *endEdit = (NMCBEENDEDIT *)lParam; + + ZeroMemory(&format, sizeof(format)); + format.cbSize = sizeof(format); + SendMessageW(hwndEditor, EM_GETCHARFORMAT, SCF_SELECTION, (LPARAM)&format); + + if(lstrcmpW(format.szFaceName, (LPWSTR)endEdit->szText)) + set_font((LPCWSTR)endEdit->szText); + } + return 0; + } if (pHdr->hwndFrom != hwndEditor) return 0; @@ -2321,6 +2440,8 @@ static LRESULT OnNotify( HWND hWnd, WPARAM wParam, LPARAM lParam) SELCHANGE *pSC = (SELCHANGE *)lParam; char buf[128]; + update_font_list(); + sprintf( buf,"selection = %d..%d, line count=%ld", pSC->chrg.cpMin, pSC->chrg.cpMax, SendMessage(hwndEditor, EM_GETLINECOUNT, 0, 0)); @@ -2369,6 +2490,7 @@ static LRESULT OnCommand( HWND hWnd, WPARAM wParam, LPARAM lParam) SendMessageW(hEditorWnd, EM_SETMODIFY, FALSE, 0); set_fileformat(ret); + update_font_list(); } } } @@ -2628,6 +2750,7 @@ static LRESULT OnCommand( HWND hWnd, WPARAM wParam, LPARAM lParam) break; case ID_TOGGLE_FORMATBAR: + set_toolbar_state(BANDID_FONTLIST, !is_bar_visible(BANDID_FORMATBAR)); set_toolbar_state(BANDID_FORMATBAR, !is_bar_visible(BANDID_FORMATBAR)); update_window(); break; @@ -2861,7 +2984,7 @@ static LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lPara int CALLBACK WinMain(HINSTANCE hInstance, HINSTANCE hOldInstance, LPSTR szCmdParagraph, int res) { - INITCOMMONCONTROLSEX classes = {8, ICC_BAR_CLASSES|ICC_COOL_CLASSES}; + INITCOMMONCONTROLSEX classes = {8, ICC_BAR_CLASSES|ICC_COOL_CLASSES|ICC_USEREX_CLASSES}; HACCEL hAccel; WNDCLASSW wc; MSG msg; -- 2.11.4.GIT