From: Jacob Czekalla jacobczekalla@gmail.com
--- programs/notepad/main.c | 51 ++++++++++++++++++++++++++++++++++ programs/notepad/main.h | 3 ++ programs/notepad/notepad.rc | 2 ++ programs/notepad/notepad_res.h | 2 ++ 4 files changed, 58 insertions(+)
diff --git a/programs/notepad/main.c b/programs/notepad/main.c index f243ac0c775..3526f68b49e 100644 --- a/programs/notepad/main.c +++ b/programs/notepad/main.c @@ -108,6 +108,29 @@ DWORD get_dpi(void) return dpi; }
+void UpdateStatusBar(void) +{ + int currentLine; + int currentCol = -1; + wchar_t statusTxt[25]; + int lineIndex; + DWORD selStart; + DWORD selEnd; + + SendMessageW(Globals.hEdit,EM_GETSEL, (WPARAM)&selStart, (LPARAM)&selEnd); + if(selStart == selEnd) + Globals.trackedSel = selStart; + if(selStart < Globals.trackedSel) + currentCol = selStart; + else + currentCol = selEnd; + currentLine = SendMessageW(Globals.hEdit, EM_LINEFROMCHAR, currentCol,0); + lineIndex = SendMessageW(Globals.hEdit, EM_LINEINDEX, currentLine,0); + + swprintf(statusTxt, 25, Globals.szStatusString,currentLine+1, (currentCol+1) - lineIndex); + SendMessageW(Globals.hStatusBar, SB_SETTEXTW, 0, (LPARAM)statusTxt); +} + static void ToggleStatusBar(void) { RECT rc; @@ -118,6 +141,7 @@ static void ToggleStatusBar(void) GetClientRect(Globals.hMainWnd, &rc); ShowWindow(Globals.hStatusBar,Globals.bStatusBar); updateWindowSize(MAKELPARAM(rc.right,rc.bottom)); + UpdateStatusBar(); }
void updateWindowSize(DWORD WidthHeight) @@ -528,6 +552,29 @@ static void NOTEPAD_DoReplaceAll(FINDREPLACEW *fr) } }
+LRESULT CALLBACK EDIT_CallBackProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) +{ + switch (msg) + { + case WM_KEYDOWN: + case WM_KEYUP: + case WM_MBUTTONDOWN: + case WM_MBUTTONUP: + case WM_LBUTTONDOWN: + case WM_LBUTTONUP: + UpdateStatusBar(); + break; + case WM_MOUSEMOVE: + if(wParam == MK_LBUTTON) + UpdateStatusBar(); + break; + + default: + break; + } + return DefSubclassProc(hWnd, msg, wParam, lParam); +} + /*********************************************************************** * * NOTEPAD_WndProc @@ -575,12 +622,16 @@ static LRESULT WINAPI NOTEPAD_WndProc(HWND hWnd, UINT msg, WPARAM wParam, dwStyle, 0, 0, rc.right, rc.bottom, hWnd, NULL, Globals.hInstance, NULL);
+ SetWindowSubclass(Globals.hEdit, (SUBCLASSPROC)&EDIT_CallBackProc, 0, 0); Globals.hFont = CreateFontIndirectW(&Globals.lfFont); SendMessageW(Globals.hEdit, WM_SETFONT, (WPARAM)Globals.hFont, FALSE); SendMessageW(Globals.hEdit, EM_LIMITTEXT, 0, 0); Globals.hStatusBar = CreateWindowExW(0, STATUSCLASSNAMEW,NULL, WS_VISIBLE | WS_CHILD, 0, 0, 0, 0, hWnd, NULL, Globals.hInstance, NULL); + + LoadStringW(Globals.hInstance, STRING_STATUSBAR, (LPWSTR)&Globals.szStatusString, 0); + UpdateStatusBar(); break; }
diff --git a/programs/notepad/main.h b/programs/notepad/main.h index 330af03fb6e..bd8980a9dcc 100644 --- a/programs/notepad/main.h +++ b/programs/notepad/main.h @@ -45,6 +45,7 @@ typedef struct HFONT hFont; /* Font used by the edit control */ HWND hStatusBar; INT bStatusBar; + WCHAR* szStatusString; LOGFONTW lfFont; BOOL bWrapLongLines; WCHAR szFindText[MAX_PATH]; @@ -61,6 +62,7 @@ typedef struct INT iMarginRight; WCHAR szHeader[MAX_PATH]; WCHAR szFooter[MAX_PATH]; + INT trackedSel;
FINDREPLACEW find; FINDREPLACEW lastFind; @@ -73,4 +75,5 @@ extern NOTEPAD_GLOBALS Globals; VOID SetFileNameAndEncoding(LPCWSTR szFileName, ENCODING enc); void NOTEPAD_DoFind(FINDREPLACEW *fr); DWORD get_dpi(void); +void UpdateStatusBar(void); void updateWindowSize(DWORD WidthHeight); diff --git a/programs/notepad/notepad.rc b/programs/notepad/notepad.rc index 60cd03d9c0e..20257164e33 100644 --- a/programs/notepad/notepad.rc +++ b/programs/notepad/notepad.rc @@ -89,6 +89,8 @@ STRING_UNICODE_LE, "Unicode (UTF-16)" STRING_UNICODE_BE, "Unicode (UTF-16 big-endian)" STRING_UTF8, "Unicode (UTF-8)"
+STRING_STATUSBAR, "Ln %ld, Col %ld" + STRING_LOSS_OF_UNICODE_CHARACTERS, "%1\n\ This file contains Unicode characters which will be lost if\n\ you save this file in the %2 encoding.\n\ diff --git a/programs/notepad/notepad_res.h b/programs/notepad/notepad_res.h index bd994d9eede..e84224384ee 100644 --- a/programs/notepad/notepad_res.h +++ b/programs/notepad/notepad_res.h @@ -83,6 +83,8 @@ #define STRING_UNICODE_BE 0x181 #define STRING_UTF8 0x182
+#define STRING_STATUSBAR 0x206 + #define STRING_LOSS_OF_UNICODE_CHARACTERS 0x183
/* Open/Save As dialog template */