Index: base/applications/charmap/charmap.c =================================================================== --- base/applications/charmap/charmap.c (revision 50814) +++ base/applications/charmap/charmap.c (working copy) @@ -9,8 +9,29 @@ #include -#define ID_ABOUT 0x1 +#define ID_ABOUT 0x1 +#define MAX_STRING_LEN 255 +static void CopyTextToClipboard(TCHAR* text) +{ + if(OpenClipboard(NULL)) { + HGLOBAL clipbuffer; + TCHAR *buffer; + + EmptyClipboard(); + clipbuffer = GlobalAlloc(GMEM_DDESHARE, (_tcslen(text)+1)*sizeof(TCHAR)); + buffer = (TCHAR *)GlobalLock(clipbuffer); + _tcscpy(buffer, text); + GlobalUnlock(clipbuffer); +#ifdef UNICODE + SetClipboardData(CF_UNICODETEXT, clipbuffer); +#else + SetClipboardData(CF_TEXT, clipbuffer); +#endif + CloseClipboard(); + } +} + HINSTANCE hInstance; /* Font-enumeration callback */ @@ -165,7 +186,7 @@ SendMessageW(hText, WM_SETTEXT, 0, - (LPARAM)lpText); + (LPARAM)lpText); HeapFree(GetProcessHeap(), 0, @@ -175,17 +196,27 @@ else { WCHAR szText[2]; - + szText[0] = ch; szText[1] = L'\0'; SendMessageW(hText, WM_SETTEXT, 0, - (LPARAM)szText); + (LPARAM)szText); } } +void ClientResize(HWND hWnd, int nWidth, int nHeight) +{ + RECT rcClient, rcWind; + POINT ptDiff; + GetClientRect(hWnd, &rcClient); + GetWindowRect(hWnd, &rcWind); + ptDiff.x = (rcWind.right - rcWind.left) - rcClient.right; + ptDiff.y = (rcWind.bottom - rcWind.top) - rcClient.bottom; + MoveWindow(hWnd,rcWind.left, rcWind.top, nWidth + ptDiff.x, nHeight + ptDiff.y, TRUE); +} static INT_PTR @@ -200,7 +231,7 @@ LPWSTR lpAboutText = NULL; switch(Message) - { + { case WM_INITDIALOG: { HMENU hSysMenu; @@ -258,7 +289,7 @@ } return TRUE; } - + case WM_COMMAND: { switch(LOWORD(wParam)) @@ -268,12 +299,17 @@ switch (HIWORD(wParam)) { case FM_SETCHAR: + { AddCharToSelection(GetDlgItem(hDlg, IDC_TEXTBOX), LOWORD(lParam)); + HWND hCopy = GetDlgItem(hDlg, IDC_COPY); + EnableWindow(hCopy, TRUE); + break; + } } + break; } - break; case IDC_FONTCOMBO: { @@ -281,8 +317,22 @@ { ChangeMapFont(hDlg); } + break; } - break; + + //FIXME: select character set + case IDC_CHARSETCOMBO: + { + + break; + } + + //FIXME: group by + case IDC_GROUPBYCOMBO: + { + + break; + } case IDC_SELECT: { @@ -294,12 +344,79 @@ if (ch) { AddCharToSelection(GetDlgItem(hDlg, IDC_TEXTBOX), - ch); + ch); + HWND hCopy = GetDlgItem(hDlg, IDC_COPY); + EnableWindow(hCopy, TRUE); } break; } + + //FIXME: search for character with phrase given + case IDC_SEARCHBTN: + { + break; + } + + //FIXME: search for character with number given + case IDC_GOTOUNICOTXT: + { + + break; + } + + case IDC_COPY: + { + DWORD leng; + LPWSTR lpFullText; + HWND hTextBox = GetDlgItem(hDlg, IDC_TEXTBOX); + leng = GetWindowTextLength(hTextBox); + lpFullText = HeapAlloc(GetProcessHeap(), 0, (leng +1)); + GetWindowText(hTextBox, lpFullText, MAX_STRING_LEN); + if (leng != 0) + { + CopyTextToClipboard(lpFullText); + HeapFree(GetProcessHeap(), 0, lpFullText); + } + break; + } + + //FIXME: "advanced view" checkbox click makes window bigger + case IDC_ADVVIEW: + { + HWND hCharSet = GetDlgItem(hDlg, IDC_CHARSET); + HWND hCharSetCombo = GetDlgItem(hDlg, IDC_CHARSETCOMBO); + HWND hGoToUnicode = GetDlgItem(hDlg, IDC_GOTOUNICODE); + HWND hGoToUnicodeTXT = GetDlgItem(hDlg, IDC_GOTOUNICOTXT); + RECT rcWind, rcClient; + POINT ptDiff; + GetClientRect(hDlg, &rcClient); + GetWindowRect(hDlg, &rcWind); + ptDiff.x = (rcWind.right - rcWind.left) - rcClient.right; + ptDiff.y = (rcWind.bottom - rcWind.top) - rcClient.bottom; + + if(IsDlgButtonChecked(hDlg, IDC_ADVVIEW) == TRUE) + { + ShowWindow(hCharSet, SW_HIDE); + ShowWindow(hCharSetCombo, SW_HIDE); + ShowWindow(hGoToUnicode, SW_HIDE); + ShowWindow(hGoToUnicodeTXT, SW_HIDE); + //MoveWindow(hDlg, rcWind.left, rcWind.top, rcClient.right+ptDiff.x, rcClient.bottom+150+ptDiff.y, TRUE); + ClientResize(hDlg, rcClient.right, rcClient.bottom+150); + } + else + { + ShowWindow(hCharSet, SW_SHOW); + ShowWindow(hCharSetCombo, SW_SHOW); + ShowWindow(hGoToUnicode, SW_SHOW); + ShowWindow(hGoToUnicodeTXT, SW_SHOW); + //MoveWindow(hDlg, rcWind.left, rcWind.top, rcClient.right+ptDiff.x, rcClient.bottom-150+ptDiff.y, TRUE); + ClientResize(hDlg, rcClient.right, rcClient.bottom-150); + } + break; + } + case IDOK: if (hSmIcon) DestroyIcon(hSmIcon); Index: base/applications/charmap/lang/en-US.rc =================================================================== --- base/applications/charmap/lang/en-US.rc (revision 50814) +++ base/applications/charmap/lang/en-US.rc (working copy) @@ -1,20 +1,29 @@ LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US -IDD_CHARMAP DIALOGEX 6, 6, 293, 205 //233 +IDD_CHARMAP DIALOGEX 6, 6, 315, 205 //295 is for Windows7-like charmap CAPTION "Character Map" FONT 8,"MS Shell Dlg",0,0 STYLE DS_SHELLFONT | WS_BORDER | WS_VISIBLE | WS_SYSMENU | WS_MINIMIZEBOX BEGIN LTEXT "Font:", IDC_STATIC, 6, 7, 24, 9 - COMBOBOX IDC_FONTCOMBO, 36, 5, 210, 210, WS_CHILD | WS_VISIBLE | WS_VSCROLL | CBS_DROPDOWNLIST | CBS_SORT | CBS_HASSTRINGS - PUSHBUTTON "Help", IDC_CMHELP, 249, 5, 35, 13 - CONTROL "", IDC_FONTMAP, "FontMapWnd", WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_VSCROLL, 20, 22, 266, 156 + COMBOBOX IDC_FONTCOMBO, 36, 5, 232, 210, WS_CHILD | WS_VISIBLE | WS_VSCROLL | CBS_DROPDOWNLIST | CBS_SORT | CBS_HASSTRINGS + PUSHBUTTON "Help", IDC_CMHELP, 271, 5, 35, 13 + CONTROL "", IDC_FONTMAP, "FontMapWnd", WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_VSCROLL, 20, 22, 288, 156 LTEXT "Characters to copy:", IDC_STATIC, 6, 188, 66, 9 - EDITTEXT IDC_TEXTBOX, 74, 186, 114, 13, WS_CHILD | WS_VISIBLE | WS_TABSTOP - DEFPUSHBUTTON "Select", IDC_SELECT, 194, 186, 44, 13 - PUSHBUTTON "Copy", IDC_COPY, 242, 186, 44, 13, WS_DISABLED - //AUTOCHECKBOX "Advanced view", IDC_ADVVIEW, 10, 204, 64, 9, WS_CHILD | WS_VISIBLE | WS_TABSTOP - //EDITTEXT IDC_DISPLAY, 8, 217, 278, 13, WS_VISIBLE | WS_TABSTOP | ES_READONLY + EDITTEXT IDC_TEXTBOX, 75, 186, 136, 13, WS_CHILD | WS_VISIBLE | WS_TABSTOP + DEFPUSHBUTTON "Select", IDC_SELECT, 216, 186, 44, 13 + PUSHBUTTON "Copy", IDC_COPY, 266, 186, 44, 13, WS_DISABLED + //AUTOCHECKBOX "Advanced view", IDC_ADVVIEW, 6, 204, 64, 9, WS_CHILD | WS_VISIBLE | WS_TABSTOP + //LTEXT "Character set:", IDC_CHARSET, 6, 224, 66, 9 + //COMBOBOX IDC_CHARSETCOMBO, 75, 221, 145, 210, WS_CHILD | WS_VSCROLL | CBS_DROPDOWNLIST | CBS_SORT | CBS_HASSTRINGS | WS_TABSTOP + //LTEXT "Go to Unicode:", IDC_GOTOUNICODE, 225, 224, 66, 9 + //EDITTEXT IDC_GOTOUNICOTXT, 280, 221, 30, 13, WS_CHILD | WS_TABSTOP + //LTEXT "Group by:", IDC_GROUPBY, 6, 244, 66, 9 + //COMBOBOX IDC_GROUPBYCOMBO, 75, 241, 145, 105, WS_CHILD | WS_VSCROLL | CBS_DROPDOWNLIST | CBS_SORT | CBS_HASSTRINGS | WS_TABSTOP + //LTEXT "Search for:", IDC_SEARCHFOR, 6, 264, 66, 9 + //EDITTEXT IDC_SEARCHFORTXT, 75, 261, 145, 13, WS_CHILD | WS_TABSTOP + //PUSHBUTTON "Search", IDC_SEARCHBTN, 225, 261, 44, 13, WS_TABSTOP | WS_DISABLED + //EDITTEXT IDC_DISPLAY, 6, 280, 305, 13, WS_VISIBLE | WS_TABSTOP | ES_READONLY END IDD_ABOUTBOX DIALOGEX 22,16,210,182 Index: base/applications/charmap/precomp.h =================================================================== --- base/applications/charmap/precomp.h (revision 50814) +++ base/applications/charmap/precomp.h (working copy) @@ -6,6 +6,7 @@ #include #include #include "resource.h" +#include #define XCELLS 20 #define YCELLS 10 Index: base/applications/charmap/resource.h =================================================================== --- base/applications/charmap/resource.h (revision 50814) +++ base/applications/charmap/resource.h (working copy) @@ -1,4 +1,8 @@ #define IDC_STATIC -1 +#define IDC_CHARSET -2 +#define IDC_GOTOUNICODE -3 +#define IDC_GROUPBY -4 +#define IDC_SEARCHFOR -5 #define IDI_ICON 100 @@ -17,3 +21,9 @@ #define IDS_LICENSE 1010 #define IDS_ABOUT 1011 + +#define IDC_CHARSETCOMBO 1012 +#define IDC_GROUPBYCOMBO 1013 +#define IDC_SEARCHFORTXT 1014 +#define IDC_GOTOUNICOTXT 1015 +#define IDC_SEARCHBTN 1016 \ No newline at end of file