From: Jochen Tucht Date: Tue, 2 Sep 2008 12:03:37 +0000 (+0000) Subject: heksedit - UI translation continued X-Git-Tag: 2.16.5~2996 X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=3aa9574ab7a6ae4d00e753e878e07b59a80fca51;p=winmerge-jp%2Fwinmerge-jp.git heksedit - UI translation continued --- diff --git a/Externals/heksedit/ChooseDiffDlg.cpp b/Externals/heksedit/ChooseDiffDlg.cpp index 79c7f525a..70ed32aa1 100644 --- a/Externals/heksedit/ChooseDiffDlg.cpp +++ b/Externals/heksedit/ChooseDiffDlg.cpp @@ -1,17 +1,32 @@ #include "precomp.h" #include "resource.h" +#include "StringTable.h" #include "clipboard.h" #include "hexwnd.h" #include "hexwdlg.h" void ChooseDiffDlg::add_diff(HWND hwndList, int diff, int lower, int upper) { - char buf[100]; - sprintf(buf, "%d) 0x%x=%n%d to 0x%x=%n%d (%d bytes)", diff, + wchar_t buf[100]; + swprintf(buf, + S.DiffListItemFormat, //"%d) 0x%x=%n%d to 0x%x=%n%d (%d bytes)", + diff, lower, &lower, lower, upper, &upper, upper, upper - lower + 1); - int i = SendMessage(hwndList, LB_ADDSTRING, 0, (LPARAM)buf); + int i; + if (IsWindowUnicode(hwndList)) + { + i = SendMessageW(hwndList, LB_ADDSTRING, 0, (LPARAM)buf); + } + else + { + char bufA[100]; + WideCharToMultiByte(CP_ACP, 0, buf, -1, bufA, sizeof bufA, 0, 0); + lower = WideCharToMultiByte(CP_ACP, 0, buf, lower, 0, 0, 0, 0); + upper = WideCharToMultiByte(CP_ACP, 0, buf, upper, 0, 0, 0, 0); + i = SendMessageA(hwndList, LB_ADDSTRING, 0, (LPARAM)bufA); + } SendMessage(hwndList, LB_SETITEMDATA, i, MAKELONG(lower, upper)); } @@ -119,6 +134,93 @@ BOOL ChooseDiffDlg::OnInitDialog(HWND hDlg) return bDone; } +BOOL ChooseDiffDlg::OnCommand(HWND hDlg, WPARAM wParam, LPARAM) +{ + switch (wParam) + { + // By pabs. + case IDCOPY: + {//copy button was pressed + if (!OpenClipboard(hwnd)) //open clip + { + MessageBox(hwnd,"Cannot get access to clipboard.", "Copy", MB_ICONERROR); + return TRUE; + } + EmptyClipboard(); //empty clip + IStream *piStream = 0; + if (SUCCEEDED(CreateStreamOnHGlobal(0, FALSE, &piStream))) + { + HWND hwndList = GetDlgItem(hDlg, IDC_LIST1);//get the list + CLIPFORMAT cf = IsWindowUnicode(hwndList) ? CF_UNICODETEXT : CF_TEXT; + int num = SendMessage(hwndList, LB_GETCOUNT, 0, 0);//get the # items in the list + for (int i = 0 ; i < num ; i++) + { + //add '\r\n' to the end of each line - this is '\r\n' rather than '\n' so that it can be pasted into notepad & dos programs + if (cf == CF_UNICODETEXT) + { + wchar_t buf[100]; + int cch = SendMessageW(hwndList, LB_GETTEXT, i, (LPARAM)buf); + piStream->Write(buf, cch * sizeof *buf, 0); + static const wchar_t eol[] = L"\r\n"; + piStream->Write(eol, i < num ? sizeof eol - sizeof *eol : sizeof eol, 0); + } + else + { + char buf[100]; + int cch = SendMessageA(hwndList, LB_GETTEXT, i, (LPARAM)buf); + piStream->Write(buf, cch * sizeof *buf, 0); + static const char eol[] = "\r\n"; + piStream->Write(eol, i < num ? sizeof eol - sizeof *eol : sizeof eol, 0); + } + } + HGLOBAL hMem = 0; + if (SUCCEEDED(GetHGlobalFromStream(piStream, &hMem))) + { + SetClipboardData(cf, hMem); //copy to clip + } + piStream->Release(); + } + CloseClipboard(); //close clip + } + return TRUE; + + case IDOK: + { + HWND hwndList = GetDlgItem(hDlg, IDC_LIST1); + int i = SendMessage(hwndList, LB_GETCURSEL, 0, 0); + if (i != -1) + { + DWORD dw = SendMessage(hwndList, LB_GETITEMDATA, i, 0); + if (IsWindowUnicode(hwndList)) + { + wchar_t buf[100]; + SendMessageW(hwndList, LB_GETTEXT, i, (LPARAM)buf); + iStartOfSelection = StrToIntW(buf + LOWORD(dw)); + iEndOfSelection = StrToIntW(buf + HIWORD(dw)); + } + else + { + char buf[100]; + SendMessageA(hwndList, LB_GETTEXT, i, (LPARAM)buf); + iStartOfSelection = StrToIntA(buf + LOWORD(dw)); + iEndOfSelection = StrToIntA(buf + HIWORD(dw)); + } + iStartOfSelection += iCurByte; + iEndOfSelection += iCurByte; + iCurByte = iStartOfSelection; + bSelected = TRUE; + adjust_view_for_selection(); + repaint(); + } + } + // fall through + case IDCANCEL: + EndDialog(hDlg, wParam); + return TRUE; + } + return FALSE; +} + //------------------------------------------------------------------- INT_PTR ChooseDiffDlg::DlgProc(HWND hDlg, UINT iMsg, WPARAM wParam, LPARAM lParam) { @@ -129,60 +231,7 @@ INT_PTR ChooseDiffDlg::DlgProc(HWND hDlg, UINT iMsg, WPARAM wParam, LPARAM lPara EndDialog(hDlg, IDCANCEL); return TRUE; case WM_COMMAND: - switch (wParam) - { - // By pabs. - case IDCOPY: - {//copy button was pressed - int sumlen=1;//length of buffer initially is 1 for the '\0' - int len=0;//length of current string - char*buf=(char*)malloc(1);//buffer = '\0' - buf[0]=0;//init buffer with '\0' - char*bt=NULL;//temporary pointer - used so that if realloc returns NULL buf does not lose its value - HWND hwndList = GetDlgItem (hDlg, IDC_LIST1);//get the list - int num = SendMessage(hwndList,LB_GETCOUNT,0,0);//get the # items in the list - for(int i=0;i { public: + static const LANGID DefLangId; struct StringData { int refcount; @@ -21,4 +22,6 @@ public: BSTR TranslateStringW(int line); void TranslateDialogA(HWND); void TranslateDialogW(HWND); + static int LangCodeMajor(LANGID, LPTSTR); + static int LangCodeMinor(LANGID, LPTSTR); }; diff --git a/Externals/heksedit/ReplaceDlg.cpp b/Externals/heksedit/ReplaceDlg.cpp index ad1379cd0..c370b0af4 100644 --- a/Externals/heksedit/ReplaceDlg.cpp +++ b/Externals/heksedit/ReplaceDlg.cpp @@ -9,19 +9,6 @@ SimpleString ReplaceDlg::strToReplaceData; // String containing data to replace with. SimpleString ReplaceDlg::strReplaceWithData; -static void GetWindowText(HWND hwnd, SimpleString &str) -{ - int len = GetWindowTextLength(hwnd) + 1; - str.SetSize(len); - GetWindowText(hwnd, str, len); -} - -static void GetDlgItemText(HWND hwnd, int id, SimpleString &str) -{ - hwnd = GetDlgItem(hwnd, id); - GetWindowText(hwnd, str); -} - //------------------------------------------------------------------- // Translate the text in the string to binary data and store in the array. int ReplaceDlg::transl_text_to_binary(SimpleArray &out) diff --git a/Externals/heksedit/StringTable.cpp b/Externals/heksedit/StringTable.cpp new file mode 100644 index 000000000..96ce5bc17 --- /dev/null +++ b/Externals/heksedit/StringTable.cpp @@ -0,0 +1,10 @@ +#include "precomp.h" +#include "StringTable.h" +#include "resource.h" + +StringTable S; + +StringTable IDS = +{ + IDS_DiffListItemFormat +}; diff --git a/Externals/heksedit/StringTable.h b/Externals/heksedit/StringTable.h new file mode 100644 index 000000000..35ec04dac --- /dev/null +++ b/Externals/heksedit/StringTable.h @@ -0,0 +1,9 @@ +template +struct StringTable +{ + operator T *() { return reinterpret_cast(this); } + T DiffListItemFormat; +}; + +extern StringTable S; +extern StringTable IDS; diff --git a/Externals/heksedit/ViewSettingsDlg.cpp b/Externals/heksedit/ViewSettingsDlg.cpp new file mode 100644 index 000000000..e1c9fc56d --- /dev/null +++ b/Externals/heksedit/ViewSettingsDlg.cpp @@ -0,0 +1,256 @@ +#include "precomp.h" +#include "resource.h" +#include "hexwnd.h" +#include "hexwdlg.h" +#include "LangArray.h" + +#define AW(h, f) (IsWindowUnicode(h) ? f##W : f##A) + +static WNDPROC NTAPI SubclassAW(HWND hWnd, WNDPROC wndproc) +{ + return (WNDPROC)AW(hWnd, SetWindowLong)(hWnd, GWL_WNDPROC, (LONG)wndproc); +} + +static WNDPROC DefWndProcDroppedComboBox = 0; + +static LRESULT CALLBACK WndProcDroppedComboBox(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) +{ + switch (uMsg) + { + case WM_CTLCOLORLISTBOX: + { + int cxScreen = GetSystemMetrics(SM_CXSCREEN); + HWND hLb = (HWND)lParam; + RECT rcLb; + ::GetWindowRect(hLb, &rcLb); + if (rcLb.right > cxScreen) + rcLb.left -= rcLb.right - cxScreen; + if (rcLb.left < 0) + rcLb.left = 0; + ::SetWindowPos(hLb, 0, rcLb.left, rcLb.top, 0, 0, SWP_NOSIZE|SWP_NOZORDER); + } + break; + } + return AW(hWnd, CallWindowProc)(DefWndProcDroppedComboBox, hWnd, uMsg, wParam, lParam); +} + +HWND ViewSettingsDlg::hCbLang; + +BOOL ViewSettingsDlg::EnumLocalesProc(LPTSTR lpLocaleString) +{ + TCHAR path[MAX_PATH]; + GetModuleFileName(hMainInstance, path, MAX_PATH); + PathRenameExtension(path, _T(".lng")); + LPTSTR name = PathAddBackslash(path); + LCID lcid = 0; + if (sscanf(lpLocaleString, "%x", &lcid) == 1) + { + LANGID langid = (LANGID)lcid; + if (int i = GetLocaleInfo(langid, LOCALE_SISO639LANGNAME, name, 4)) + { + int j = GetLocaleInfo(langid, LOCALE_SISO3166CTRYNAME, name + i, 4); + name[--i] = '-'; + BOOL f = langid == LangArray::DefLangId; + while (f == 0) + { + strcpy(name + i + j, ".po"); + f = PathFileExists(path); + if (j == 0 || SUBLANGID(langid) != SUBLANG_DEFAULT) + break; + j = 0; + } + int k = SendMessage(hCbLang, CB_ADDSTRING, 0, MAKELONG(langid, f)); + if (langid == (langArray.m_langid ? langArray.m_langid : LangArray::DefLangId)) + SendMessage(hCbLang, CB_SETCURSEL, k, 0); + } + } + return TRUE; +} + +int ViewSettingsDlg::FormatLangId(LPWSTR bufW, LANGID langid, int verbose) +{ + char bufA[200]; + int i = LangArray::LangCodeMajor(langid, bufA); + if (i) + { + bufA[i - 1] = '-'; + i += LangArray::LangCodeMinor(langid, bufA + i); + switch (verbose) + { + case sizeof(WCHAR): + MultiByteToWideChar(CP_ACP, 0, bufA, i, bufW, i); + bufW[i - 1] = '\t'; + i += GetLocaleInfoW(langid, LOCALE_SNATIVELANGNAME|LOCALE_USE_CP_ACP, bufW + i, 40); + bufW[i - 1] = '\t'; + i += GetLocaleInfoW(langid, LOCALE_SNATIVECTRYNAME|LOCALE_USE_CP_ACP, bufW + i, 40); + bufW[i - 1] = '\t'; + i += GetLocaleInfoW(langid, LOCALE_SENGLANGUAGE, bufW + i, 40); + bufW[i - 1] = '\t'; + i += GetLocaleInfoW(langid, LOCALE_SENGCOUNTRY, bufW + i, 40); + break; + case sizeof(CHAR): + bufA[i - 1] = '\t'; + i += GetLocaleInfoA(langid, LOCALE_SNATIVELANGNAME|LOCALE_USE_CP_ACP, bufA + i, 40); + bufA[i - 1] = '\t'; + i += GetLocaleInfoA(langid, LOCALE_SNATIVECTRYNAME|LOCALE_USE_CP_ACP, bufA + i, 40); + bufA[i - 1] = '\t'; + i += GetLocaleInfoA(langid, LOCALE_SENGLANGUAGE, bufA + i, 40); + bufA[i - 1] = '\t'; + i += GetLocaleInfoA(langid, LOCALE_SENGCOUNTRY, bufA + i, 40); + // fall through + case 0: + MultiByteToWideChar(CP_ACP, 0, bufA, i, bufW, i); + break; + } + --i; + } + else + { + i = swprintf(bufW, L"%04x", langid); + } + return i; +} + +void ViewSettingsDlg::OnDrawitemLangId(DRAWITEMSTRUCT *pdis) +{ + int iColorText = COLOR_WINDOWTEXT; + int iColorTextBk = COLOR_WINDOW; + if (pdis->itemState & ODS_SELECTED) + { + iColorText = COLOR_HIGHLIGHTTEXT; + iColorTextBk = COLOR_HIGHLIGHT; + } + if (HIWORD(pdis->itemData) == 0) + { + iColorText = COLOR_GRAYTEXT; + } + SetTextColor(pdis->hDC, GetSysColor(iColorText)); + SetBkColor(pdis->hDC, GetSysColor(iColorTextBk)); + int x = pdis->rcItem.left + 2; + int y = pdis->rcItem.top + 2; + static const int rgcx[] = { 50, 120, 180, 120, 220, 0 }; + const int *pcx = rgcx; + UINT flags = ETO_OPAQUE; + WCHAR buffer[200]; + int length = FormatLangId(buffer, LOWORD(pdis->itemData), + IsWindowUnicode(pdis->hwndItem) ? sizeof(WCHAR) : sizeof(CHAR)); + LPWSTR p = buffer; + while (LPWSTR q = StrChrW(p, L'\t')) + { + ExtTextOutW(pdis->hDC, x, y, flags, &pdis->rcItem, p, q - p, 0); + x += *pcx ? *pcx++ : 100; + p = q + 1; + flags = 0; + } + ExtTextOutW(pdis->hDC, x, y, flags, &pdis->rcItem, p, length - (p - buffer), 0); + if (pdis->itemState & ODS_FOCUS) + { + DrawFocusRect(pdis->hDC, &pdis->rcItem); + } +} + +INT_PTR ViewSettingsDlg::OnCompareitemLangId(COMPAREITEMSTRUCT *pcis) +{ + WCHAR name1[20]; + FormatLangId(name1, LOWORD(pcis->itemData1)); + WCHAR name2[20]; + FormatLangId(name2, LOWORD(pcis->itemData2)); + int cmp = StrCmpIW(name1, name2); + return cmp < 0 ? -1 : cmp > 0 ? +1 : 0; + //Code below would yield numeric sort order by first PRIMARYLANGID, then SUBLANGID + /*WORD w1 = LOWORD(pcis->itemData1); + w1 = w1 << 10 | w1 >> 10; + WORD w2 = LOWORD(pcis->itemData2); + w2 = w2 << 10 | w2 >> 10; + return w1 < w2 ? -1 : w1 > w2 ? 1 : 0;*/ +} + +BOOL ViewSettingsDlg::OnInitDialog(HWND hDlg) +{ + SetDlgItemInt(hDlg, IDC_EDIT1, iBytesPerLine, TRUE); + SetDlgItemInt(hDlg, IDC_EDIT2, iMinOffsetLen, TRUE); + CheckDlgButton(hDlg, IDC_CHECK1, iAutomaticBPL); + CheckDlgButton(hDlg, bUnsignedView ? IDC_RADIO1 : IDC_RADIO2, BST_CHECKED); + CheckDlgButton(hDlg, IDC_CHECK5, bOpenReadOnly); + CheckDlgButton(hDlg, IDC_CHECK2, bAutoOffsetLen); + SetDlgItemText(hDlg, IDC_EDIT3, TexteditorName); + hCbLang = GetDlgItem(hDlg, IDC_COMBO1); + SendMessage(hCbLang, CB_SETDROPPEDWIDTH, 698, 0); + EnumSystemLocales(EnumLocalesProc, LCID_SUPPORTED); + return TRUE; +} + +BOOL ViewSettingsDlg::Apply(HWND hDlg) +{ + iBytesPerLine = GetDlgItemInt(hDlg, IDC_EDIT1, 0, TRUE); + if (iBytesPerLine < 1) + iBytesPerLine = 1; + iMinOffsetLen = GetDlgItemInt(hDlg, IDC_EDIT2, 0, TRUE); + if (iMinOffsetLen < 1) + iMinOffsetLen = 1; + // Get the text editor path and name. + GetDlgItemText(hDlg, IDC_EDIT3, TexteditorName); + iAutomaticBPL = IsDlgButtonChecked(hDlg, IDC_CHECK1); + bAutoOffsetLen = IsDlgButtonChecked(hDlg, IDC_CHECK2); + bUnsignedView = IsDlgButtonChecked(hDlg, IDC_RADIO1); + bOpenReadOnly = IsDlgButtonChecked(hDlg, IDC_CHECK5); + int i = SendMessage(hCbLang, CB_GETCURSEL, 0, 0); + if (i != -1) + { + DWORD itemData = (DWORD)SendMessage(hCbLang, CB_GETITEMDATA, i, 0); + load_lang((LANGID)itemData); + } + save_ini_data(); + resize_window(); + return TRUE; +} + +INT_PTR ViewSettingsDlg::DlgProc(HWND hDlg, UINT iMsg, WPARAM wParam, LPARAM lParam) +{ + switch (iMsg) + { + case WM_INITDIALOG: + return OnInitDialog(hDlg); + case WM_COMMAND: + switch (wParam) + { + case IDOK: + if (Apply(hDlg)) + { + case IDCANCEL: + EndDialog(hDlg, wParam); + } + return TRUE; + case MAKEWPARAM(IDC_COMBO1, CBN_DROPDOWN): + if (DefWndProcDroppedComboBox == 0) + { + DefWndProcDroppedComboBox = SubclassAW((HWND)lParam, WndProcDroppedComboBox); + } + return TRUE; + case MAKEWPARAM(IDC_COMBO1, CBN_CLOSEUP): + if (DefWndProcDroppedComboBox) + { + SubclassAW((HWND)lParam, DefWndProcDroppedComboBox); + DefWndProcDroppedComboBox = 0; + } + return TRUE; + } + break; + case WM_DRAWITEM: + switch (wParam) + { + case IDC_COMBO1: + OnDrawitemLangId(reinterpret_cast(lParam)); + return TRUE; + } + break; + case WM_COMPAREITEM: + switch (wParam) + { + case IDC_COMBO1: + return OnCompareitemLangId(reinterpret_cast(lParam)); + } + break; + } + return FALSE; +} diff --git a/Externals/heksedit/dllmain.cpp b/Externals/heksedit/dllmain.cpp index efec120ef..6fcdfc5d8 100644 --- a/Externals/heksedit/dllmain.cpp +++ b/Externals/heksedit/dllmain.cpp @@ -11,12 +11,14 @@ LRESULT CALLBACK HexWndProc(HWND, UINT, WPARAM, LPARAM); static const char szHexClassA[] = "hekseditA_" SHARPEN(A,FRHED_MAJOR_VERSION) "." SHARPEN(A,FRHED_MINOR_VERSION) "." - SHARPEN(A,FRHED_SUB_RELEASE_NO); + SHARPEN(A,FRHED_SUB_RELEASE_NO) "." + SHARPEN(A,FRHED_BUILD_NO); static const WCHAR szHexClassW[] = L"hekseditW_" SHARPEN(W,FRHED_MAJOR_VERSION) L"." SHARPEN(W,FRHED_MINOR_VERSION) L"." - SHARPEN(W,FRHED_SUB_RELEASE_NO); + SHARPEN(W,FRHED_SUB_RELEASE_NO) L"." + SHARPEN(W,FRHED_BUILD_NO); //-------------------------------------------------------------------------------------------- // WinMain: the starting point. @@ -40,8 +42,13 @@ BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID) RegisterClassExA(&wndclass.a); wndclass.w.lpszClassName = szHexClassW; RegisterClassExW(&wndclass.w); + HexEditorWindow::LoadStringTable(); return TRUE; } + if (dwReason == DLL_PROCESS_DETACH) + { + HexEditorWindow::FreeStringTable(); + } return FALSE; } diff --git a/Externals/heksedit/frhed.vcproj b/Externals/heksedit/frhed.vcproj index b52051ba0..b202816cb 100644 --- a/Externals/heksedit/frhed.vcproj +++ b/Externals/heksedit/frhed.vcproj @@ -229,7 +229,7 @@ RelativePath="frhed.rc"> + RelativePath=".\res\icon1.ico"> diff --git a/Externals/heksedit/heksedit.dsp b/Externals/heksedit/heksedit.dsp index 8d5b1790a..0f7157da0 100644 --- a/Externals/heksedit/heksedit.dsp +++ b/Externals/heksedit/heksedit.dsp @@ -275,8 +275,16 @@ SOURCE=.\Simparr.cpp # End Source File # Begin Source File +SOURCE=.\StringTable.cpp +# End Source File +# Begin Source File + SOURCE=.\UpgradeDlg.cpp # End Source File +# Begin Source File + +SOURCE=.\ViewSettingsDlg.cpp +# End Source File # End Group # Begin Group "Header Files" @@ -379,6 +387,10 @@ SOURCE=.\Simparr.h # End Source File # Begin Source File +SOURCE=.\StringTable.h +# End Source File +# Begin Source File + SOURCE=.\toolbar.h # End Source File # Begin Source File diff --git a/Externals/heksedit/heksedit.h b/Externals/heksedit/heksedit.h index 2e098229d..bd268d111 100644 --- a/Externals/heksedit/heksedit.h +++ b/Externals/heksedit/heksedit.h @@ -62,4 +62,6 @@ public: virtual BOOL STDMETHODCALLTYPE select_next_diff(BOOL bFromStart) = 0; virtual BOOL STDMETHODCALLTYPE select_prev_diff(BOOL bFromEnd) = 0; virtual BOOL STDMETHODCALLTYPE load_lang(LANGID) = 0; + virtual BSTR STDMETHODCALLTYPE load_string(UINT) = 0; + virtual void STDMETHODCALLTYPE free_string(BSTR) = 0; }; diff --git a/Externals/heksedit/heksedit.rc b/Externals/heksedit/heksedit.rc index b8d4c9439..6b11e9c4a 100644 --- a/Externals/heksedit/heksedit.rc +++ b/Externals/heksedit/heksedit.rc @@ -13,7 +13,7 @@ #undef APSTUDIO_READONLY_SYMBOLS ///////////////////////////////////////////////////////////////////////////// -// English (U.S.) resources +// Englisch (USA) resources #if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) #ifdef _WIN32 @@ -499,8 +499,9 @@ BEGIN PUSHBUTTON "Cancel",IDCANCEL,82,131,50,14 END -IDD_VIEWSETTINGSDIALOG DIALOGEX 0, 0, 229, 167 -STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +IDD_VIEWSETTINGSDIALOG DIALOGEX 0, 0, 249, 167 +STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | + WS_SYSMENU CAPTION "View Settings" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN @@ -509,13 +510,13 @@ BEGIN EDITTEXT IDC_EDIT1,7,16,68,12,ES_AUTOHSCROLL CONTROL "Automatically adjust number of bytes per line (uncheck this if you want frhed to use your own choice for bytes per line)", IDC_CHECK1,"Button",BS_AUTOCHECKBOX | BS_MULTILINE | - WS_TABSTOP,7,31,214,19 + WS_TABSTOP,7,31,234,19 LTEXT "Display length of offset in how many characters:", IDC_STATIC,7,51,151,8 EDITTEXT IDC_EDIT2,7,61,68,12,ES_AUTOHSCROLL CONTROL "Adjust offset len to that of the max offset",IDC_CHECK2, - "Button",BS_AUTOCHECKBOX | BS_MULTILINE | WS_TABSTOP,80, - 61,140,12 + "Button",BS_AUTOCHECKBOX | BS_MULTILINE | WS_TABSTOP,78, + 61,163,12 GROUPBOX "Display values at caret position as:",IDC_STATIC,7,76, 128,25,WS_GROUP CONTROL "unsigned",IDC_RADIO1,"Button",BS_AUTORADIOBUTTON | @@ -526,9 +527,12 @@ BEGIN BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,7,106,128,10 LTEXT "Path and filename of the text editor to call:", IDC_STATIC,7,122,133,8 - EDITTEXT IDC_EDIT3,7,132,214,13,ES_AUTOHSCROLL - DEFPUSHBUTTON "OK",IDOK,171,80,50,14 - PUSHBUTTON "Cancel",IDCANCEL,171,97,50,14 + EDITTEXT IDC_EDIT3,7,132,234,13,ES_AUTOHSCROLL + LTEXT "Language:",IDC_STATIC,7,151,50,8 + COMBOBOX IDC_COMBO1,69,147,172,189,CBS_DROPDOWNLIST | + CBS_OWNERDRAWFIXED | CBS_SORT | WS_VSCROLL | WS_TABSTOP + DEFPUSHBUTTON "OK",IDOK,191,80,50,14 + PUSHBUTTON "Cancel",IDCANCEL,191,97,50,14 END IDD_APPENDDIALOG DIALOGEX 0, 0, 192, 46 @@ -1054,7 +1058,6 @@ BEGIN LEFTMARGIN, 7 RIGHTMARGIN, 205 TOPMARGIN, 7 - BOTTOMMARGIN, 192 END IDD_HEXDUMPDIALOG, DIALOG @@ -1100,7 +1103,7 @@ BEGIN IDD_VIEWSETTINGSDIALOG, DIALOG BEGIN LEFTMARGIN, 7 - RIGHTMARGIN, 221 + RIGHTMARGIN, 241 TOPMARGIN, 7 BOTTOMMARGIN, 160 END @@ -1264,6 +1267,7 @@ BEGIN END #endif // APSTUDIO_INVOKED + ///////////////////////////////////////////////////////////////////////////// // // Bitmap @@ -1305,6 +1309,11 @@ BEGIN ID_DISK_GOTOLASTTRACK "Goto last sector" END +STRINGTABLE +BEGIN + IDS_DiffListItemFormat "%d) 0x%x=%n%d to 0x%x=%n%d (%d bytes)" +END + #endif // Englisch (USA) resources ///////////////////////////////////////////////////////////////////////////// diff --git a/Externals/heksedit/heksedit.vcproj b/Externals/heksedit/heksedit.vcproj index aa9309a65..eeee446e0 100644 --- a/Externals/heksedit/heksedit.vcproj +++ b/Externals/heksedit/heksedit.vcproj @@ -921,6 +921,9 @@ + + @@ -939,6 +942,9 @@ BrowseInformation="1"/> + + + + - - + RelativePath=".\res\Toolbar.bmp"> + diff --git a/Externals/heksedit/hexwdlg.cpp b/Externals/heksedit/hexwdlg.cpp index b2625b705..d0b04e3b1 100644 --- a/Externals/heksedit/hexwdlg.cpp +++ b/Externals/heksedit/hexwdlg.cpp @@ -2,6 +2,20 @@ #include "resource.h" #include "hexwnd.h" #include "hexwdlg.h" +#include "LangArray.h" + +void GetWindowText(HWND hwnd, SimpleString &str) +{ + int len = GetWindowTextLength(hwnd) + 1; + str.SetSize(len); + GetWindowText(hwnd, str, len); +} + +void GetDlgItemText(HWND hwnd, int id, SimpleString &str) +{ + hwnd = GetDlgItem(hwnd, id); + GetWindowText(hwnd, str); +} C_ASSERT(sizeof(DragDropOptionsDlg) == sizeof(HexEditorWindow)); // disallow instance members @@ -60,57 +74,6 @@ INT_PTR DragDropOptionsDlg::DlgProc(HWND h, UINT m, WPARAM w, LPARAM l) return FALSE; } -INT_PTR ViewSettingsDlg::DlgProc(HWND hDlg, UINT iMsg, WPARAM wParam, LPARAM lParam) -{ - char buf[512]; - switch (iMsg) - { - case WM_INITDIALOG: - SetDlgItemInt(hDlg, IDC_EDIT1, iBytesPerLine, TRUE); - SetDlgItemInt(hDlg, IDC_EDIT2, iMinOffsetLen, TRUE); - CheckDlgButton(hDlg, IDC_CHECK1, iAutomaticBPL); - CheckDlgButton(hDlg, bUnsignedView ? IDC_RADIO1 : IDC_RADIO2, BST_CHECKED); - CheckDlgButton(hDlg, IDC_CHECK5, bOpenReadOnly); -//Pabs inserted - CheckDlgButton( hDlg, IDC_CHECK2, bAutoOffsetLen); -//end - SetDlgItemText(hDlg, IDC_EDIT3, TexteditorName); - return TRUE; - - case WM_COMMAND: - switch (wParam) - { - case IDOK: - iBytesPerLine = GetDlgItemInt(hDlg, IDC_EDIT1, 0, TRUE); - if (iBytesPerLine < 1) - iBytesPerLine = 1; - iMinOffsetLen = GetDlgItemInt(hDlg, IDC_EDIT2, 0, TRUE); - if (iMinOffsetLen < 1) - iMinOffsetLen = 1; - // Get the text editor path and name. - if (GetDlgItemText(hDlg, IDC_EDIT3, buf, 512)) - TexteditorName.SetToString(buf); - else - MessageBox(hDlg, "Field for text editor name was empty: name not changed.", "View settings", MB_OK | MB_ICONERROR); -//end - iAutomaticBPL = IsDlgButtonChecked(hDlg, IDC_CHECK1); -//Pabs inserted - bAutoOffsetLen = IsDlgButtonChecked(hDlg, IDC_CHECK2); -//end - bUnsignedView = IsDlgButtonChecked(hDlg, IDC_RADIO1); - bOpenReadOnly = IsDlgButtonChecked(hDlg, IDC_CHECK5); - save_ini_data(); - resize_window(); - // fall through - case IDCANCEL: - EndDialog(hDlg, wParam); - return TRUE; - } - break; - } - return FALSE; -} - INT_PTR CharacterSetDlg::DlgProc(HWND hDlg, UINT iMsg, WPARAM wParam, LPARAM lParam) { switch (iMsg) @@ -202,11 +165,11 @@ INT_PTR ChangeInstDlg::DlgProc(HWND hw, UINT m, WPARAM w, LPARAM l) LONG range = MAKELONG(iLoadInst, iSaveInst); LONG pos = MAKELONG(iInstCount, 0); HWND hWndUpDown = GetDlgItem(hw, IDC_SINST); - SendMessage( hWndUpDown, UDM_SETRANGE, 0L, range); - SendMessage( hWndUpDown, UDM_SETPOS, 0L, pos); + SendMessage(hWndUpDown, UDM_SETRANGE, 0L, range); + SendMessage(hWndUpDown, UDM_SETPOS, 0L, pos); hWndUpDown = GetDlgItem(hw, IDC_LINST); - SendMessage( hWndUpDown, UDM_SETRANGE, 0L, range); - SendMessage( hWndUpDown, UDM_SETPOS, 0L, pos); + SendMessage(hWndUpDown, UDM_SETRANGE, 0L, range); + SendMessage(hWndUpDown, UDM_SETPOS, 0L, pos); return TRUE; } case WM_COMMAND: diff --git a/Externals/heksedit/hexwdlg.h b/Externals/heksedit/hexwdlg.h index b71710e20..61726ee96 100644 --- a/Externals/heksedit/hexwdlg.h +++ b/Externals/heksedit/hexwdlg.h @@ -1,3 +1,6 @@ +void GetWindowText(HWND, SimpleString &); +void GetDlgItemText(HWND, int, SimpleString &); + class DragDropOptionsDlg : public HexEditorWindow { public: @@ -10,6 +13,14 @@ class ViewSettingsDlg : public HexEditorWindow public: enum { IDD = IDD_VIEWSETTINGSDIALOG }; INT_PTR DlgProc(HWND, UINT, WPARAM, LPARAM); +private: + static HWND hCbLang; + static BOOL CALLBACK EnumLocalesProc(LPTSTR); + static int FormatLangId(LPWSTR, LANGID, int verbose = 0); + void OnDrawitemLangId(DRAWITEMSTRUCT *); + INT_PTR OnCompareitemLangId(COMPAREITEMSTRUCT *); + BOOL OnInitDialog(HWND); + BOOL Apply(HWND); }; class CharacterSetDlg : public HexEditorWindow @@ -123,6 +134,7 @@ public: INT_PTR DlgProc(HWND, UINT, WPARAM, LPARAM); private: BOOL OnInitDialog(HWND); + BOOL OnCommand(HWND, WPARAM, LPARAM); void add_diff(HWND hwndList, int diff, int lower, int upper); int get_diffs(HWND hwndList, char *ps, int sl, char *pd, int dl); }; diff --git a/Externals/heksedit/hexwnd.cpp b/Externals/heksedit/hexwnd.cpp index 157e6c246..0ae8fcd62 100644 --- a/Externals/heksedit/hexwnd.cpp +++ b/Externals/heksedit/hexwnd.cpp @@ -2,6 +2,7 @@ // Frhed main definition file. #include "precomp.h" #include "resource.h" +#include "StringTable.h" #include "VersionData.h" #include "hexwnd.h" #include "hexwdlg.h" @@ -14,11 +15,6 @@ #include "LoadHexFile.h" #include "LangArray.h" -/*In the following headers: - ULONG m_cRefCount; //The reference count that all objects based on IUnknown must have - //The following have to do with the automatic destruction IUnknown::Release is supposed to do - bool deleteself; //Should we delete ourself on zero reference count - C** pthis; //A pointer to a pointer that we should set to NULL on destruction*/ #include "idt.h" #include "ids.h" #include "ido.h" @@ -52,12 +48,6 @@ SimpleString HexEditorWindow::EncodeDlls; //Temporary stuff for CMD_move_copy int iMovePos; OPTYP iMoveOpTyp; -//end -//inserted to allow 32-bit scrolling -//end -//Pabs inserted -//char bPasteBinary, bPasteUnicode; -//end // RK: function by pabs. BOOL contextpresent(); @@ -99,20 +89,20 @@ HexEditorWindow::HexEditorWindow() iWindowHeight = CW_USEDEFAULT; iWindowShowCmd = SW_SHOW; - // iClipboardEncode = TRUE; - iBmkColor = RGB( 255, 0, 0 ); - iSelBkColorValue = RGB( 255, 255, 0 ); - iSelTextColorValue = RGB( 0, 0, 0 ); + iBmkColor = RGB(255, 0, 0); + iSelBkColorValue = RGB(255, 255, 0); + iSelTextColorValue = RGB(0, 0, 0); bOpenReadOnly = bReadOnly = FALSE; iPartialOffset = 0; bPartialStats = 0; bPartialOpen = FALSE; iBmkCount = 0; - int i; - for (i = 0 ; i < MRUMAX ; i++) - sprintf(strMRU[i], "dummy%d", i); - iMRU_count = 0; + + iMRU_count = MRUMAX; + while (iMRU_count) + sprintf(strMRU[--iMRU_count], "dummy%d", iMRU_count); + bFilestatusChanged = TRUE; iBinaryMode = LITTLEENDIAN_MODE; bUnsignedView = TRUE; @@ -214,11 +204,86 @@ int HexEditorWindow::translate_accelerator(MSG *pMsg) return TranslateAccelerator(hwnd, hAccel, pMsg); } -static LangArray langArray; +LangArray langArray; + +static LPWSTR NTAPI LoadStringResource(HMODULE hModule, UINT uStringID) +{ + LPWSTR pwchMem = 0; + HRSRC hResource = FindResourceEx( + hModule, RT_STRING, + MAKEINTRESOURCE(uStringID / 16 + 1), + MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT)); + if (hResource) + { + pwchMem = (LPWSTR)LoadResource(hModule, hResource); + if (pwchMem) + { + while (uStringID & 15) + { + pwchMem += *pwchMem + 1; + --uStringID; + } + } + } + return pwchMem; +} + +static LPWSTR NTAPI LoadResString(UINT uStringID) +{ + HINSTANCE hinst = langArray.m_hLangDll ? langArray.m_hLangDll : hMainInstance; + LPWSTR text = LoadStringResource(hinst, uStringID); + if (text) + { + text = SysAllocStringLen(text + 1, (WORD)*text); + if (langArray.m_hLangDll) + { + int line = 0; + if (LPWSTR p = wcschr(text, L':')) + line = _wtoi(p + 1); + SysFreeString(text); + text = langArray.TranslateStringW(line); + } + } + return text; +} + +void HexEditorWindow::LoadStringTable() +{ + for (int i = 0 ; i < RTL_NUMBER_OF(S) ; ++i) + S[i] = LoadResString(IDS[i]); +} + +void HexEditorWindow::FreeStringTable() +{ + for (int i = 0 ; i < RTL_NUMBER_OF(S) ; ++i) + SysFreeString(S[i]); +} +/** + * @brief Load translations for given language if present. + */ BOOL HexEditorWindow::load_lang(LANGID langid) { - return langArray.Load(hMainInstance, langid); + FreeStringTable(); + BOOL bDone = langArray.Load(hMainInstance, langid); + LoadStringTable(); + return bDone; +} + +/** + * @brief Load a string. + */ +BSTR HexEditorWindow::load_string(UINT uStringID) +{ + return LoadResString(uStringID); +} + +/** + * @brief Free a string obtained through load_string(). + */ +void HexEditorWindow::free_string(BSTR text) +{ + SysFreeString(text); } //-------------------------------------------------------------------------------------------- @@ -2311,7 +2376,7 @@ BOOL CALLBACK AboutDlgProc(HWND hDlg, UINT iMsg, WPARAM wParam, LPARAM) // Set the version information. SetDlgItemText(hDlg, IDC_STATIC1, "frhed - free hex editor for 32-bit Windows\nVersion "CURRENT_VERSION"." - SUB_RELEASE_NO"\n(c) Raihan Kibria 2000" + SUB_RELEASE_NO"."BUILD_NO"\n(c) Raihan Kibria 2000" "\nFill with by Pabs Dec 1999" "\nDisk-Access, Code/Decode Extension and some other bits by Gerson Kurz." "\nDLL interface by Jochen Neubeck."); @@ -3485,8 +3550,12 @@ void HexEditorWindow::read_ini_data(char *key) res = RegQueryValueEx( key1, "output_CF_TEXT", NULL, NULL, (BYTE*) &output_CF_TEXT, &datasize ); res = RegQueryValueEx( key1, "output_text_special", NULL, NULL, (BYTE*) &output_text_special, &datasize ); res = RegQueryValueEx( key1, "output_text_hexdump_display", NULL, NULL, (BYTE*) &output_text_hexdump_display, &datasize ); - res = RegQueryValueEx( key1, "output_CF_RTF", NULL, NULL, (BYTE*) &output_CF_RTF, &datasize ); //end + res = RegQueryValueEx( key1, "always_pick_move_copy", NULL, NULL, (BYTE*) &always_pick_move_copy, &datasize ); + + LCID lcid = 0; + res = RegQueryValueEx( key1, "locale", NULL, NULL, (BYTE*) &lcid, &datasize ); + load_lang((LANGID)lcid); char szPath[ _MAX_PATH + 1 ]; datasize = _MAX_PATH + 1; @@ -3534,11 +3603,11 @@ void HexEditorWindow::save_ini_data() HKEY key1; char keyname[64]; - sprintf( keyname, "Software\\frhed\\v"CURRENT_VERSION"." SUB_RELEASE_NO "\\%d", iInstCount ); + sprintf(keyname, "Software\\frhed\\v" CURRENT_VERSION "." SUB_RELEASE_NO "\\%d", iInstCount); - LONG res = RegCreateKey( HKEY_CURRENT_USER, keyname, &key1 ); + LONG res = RegCreateKey(HKEY_CURRENT_USER, keyname, &key1); - if( res == ERROR_SUCCESS ) + if (res == ERROR_SUCCESS) { RegSetValueEx( key1, "iTextColorValue", 0, REG_DWORD, (CONST BYTE*) &iTextColorValue, sizeof( int ) ); RegSetValueEx( key1, "iBkColorValue", 0, REG_DWORD, (CONST BYTE*) &iBkColorValue, sizeof( int ) ); @@ -3571,6 +3640,9 @@ void HexEditorWindow::save_ini_data() RegSetValueEx( key1, "output_text_hexdump_display", 0, REG_DWORD, (CONST BYTE*) &output_text_hexdump_display, sizeof( int ) ); RegSetValueEx( key1, "output_CF_RTF", 0, REG_DWORD, (CONST BYTE*) &output_CF_RTF, sizeof( int ) ); //end + LCID lcid = MAKELCID(langArray.m_langid, 0); + RegSetValueEx( key1, "locale", 0, REG_DWORD, (CONST BYTE*) &lcid, sizeof lcid); + RegSetValueEx( key1, "TexteditorName", 0, REG_SZ, (CONST BYTE*) (char*) TexteditorName, TexteditorName.StrLen() + 1 ); RegSetValueEx( key1, "iWindowShowCmd", 0, REG_DWORD, (CONST BYTE*) &iWindowShowCmd, sizeof( int ) ); diff --git a/Externals/heksedit/hexwnd.h b/Externals/heksedit/hexwnd.h index 7cc55ae00..aa2a006c3 100644 --- a/Externals/heksedit/hexwnd.h +++ b/Externals/heksedit/hexwnd.h @@ -11,6 +11,7 @@ #define CURRENT_VERSION SHARPEN(A,FRHED_MAJOR_VERSION) "." SHARPEN(A,FRHED_MINOR_VERSION) #define SUB_RELEASE_NO SHARPEN(A,FRHED_SUB_RELEASE_NO) +#define BUILD_NO SHARPEN(A,FRHED_BUILD_NO) #include "PhysicalDrive.h" #include "PMemoryBlock.h" @@ -55,6 +56,9 @@ class hexfile_stream; class load_hexfile_0; class load_hexfile_1; +class LangArray; +extern LangArray langArray; + interface CDropTarget; class HexEditorWindow @@ -224,6 +228,8 @@ public: Status *STDMETHODCALLTYPE get_status(); int STDMETHODCALLTYPE translate_accelerator(MSG *); BOOL STDMETHODCALLTYPE load_lang(LANGID); + BSTR STDMETHODCALLTYPE load_string(UINT); + void STDMETHODCALLTYPE free_string(BSTR); virtual int STDMETHODCALLTYPE load_file(const char* fname); int file_is_loadable(const char* fname); @@ -244,6 +250,9 @@ public: void print_text(HDC hdc, int x, int y, char *pch, int cch); virtual HRESULT STDMETHODCALLTYPE ResolveIt(LPCSTR lpszLinkFile, LPSTR lpszPath); + static void LoadStringTable(); + static void FreeStringTable(); + public: int iWindowShowCmd, iWindowX, iWindowY, iWindowWidth, iWindowHeight; int iInstCount; @@ -265,6 +274,7 @@ protected: static int iPasteAsText; static int iPasteTimes; static int iPasteSkip; + int bOpenReadOnly;//Pabs inserted ", iPartialOpenLen, iPartialFileLen, bPartialStats" int iPartialOffset, bPartialOpen, iPartialOpenLen, iPartialFileLen, bPartialStats; int iBmkCount; diff --git a/Externals/heksedit/ido.cpp b/Externals/heksedit/ido.cpp index 52566a67b..a4c1dc4b3 100644 --- a/Externals/heksedit/ido.cpp +++ b/Externals/heksedit/ido.cpp @@ -7,96 +7,69 @@ certain APIs in their import libraries. Specifically _wremove, _wopen & GetEnhMe //CDataObject //Members -CDataObject::CDataObject( bool delself, CDataObject** p )//When using C++ new need to call like so someptr = new CDataObject(1,someptr); +CDataObject::CDataObject() { -#ifdef _DEBUG - printf("IDataObject::IDataObject\n"); -#endif //_DEBUG m_cRefCount = 0; - deleteself = delself; - pthis = p; - allowSetData = true; data = NULL; enums = NULL; numdata = numenums = 0; } -CDataObject::~CDataObject( void ) +CDataObject::~CDataObject() { -#ifdef _DEBUG - printf("IDataObject::~IDataObject\n"); - if( m_cRefCount != 0 ) - printf("Deleting %s too early 0x%x.m_cRefCount = %d\n", "IDataObject", this, m_cRefCount); -#endif //_DEBUG + assert(m_cRefCount == 0); Empty(); - if(enums){ - for(UINT i = 0;iAddRef(); + if (iid == IID_IUnknown || iid == IID_IDataObject) + { + *ppvObject = static_cast(this); + AddRef(); return S_OK; } - + *ppvObject = NULL; return E_NOINTERFACE; } -STDMETHODIMP_(ULONG) CDataObject::AddRef( void ) +STDMETHODIMP_(ULONG) CDataObject::AddRef() { -#ifdef _DEBUG - printf("IDataObject::AddRef\n"); -#endif //_DEBUG return ++m_cRefCount; } -STDMETHODIMP_(ULONG) CDataObject::Release( void ) +STDMETHODIMP_(ULONG) CDataObject::Release() { -#ifdef _DEBUG - printf("IDataObject::Release\n"); -#endif //_DEBUG - if( --m_cRefCount == 0 && deleteself ) delete this; - return m_cRefCount; + return --m_cRefCount; } - //IDataObject members STDMETHODIMP CDataObject::GetData( FORMATETC* pFormatetc, STGMEDIUM* pmedium ) { -#ifdef _DEBUG - printf("IDataObject::GetData\n"); -#endif //_DEBUG //Error handling if (pFormatetc == 0 || pmedium == 0) return E_INVALIDARG; @@ -123,48 +96,28 @@ STDMETHODIMP CDataObject::GetData( FORMATETC* pFormatetc, STGMEDIUM* pmedium ) return hr; } -STDMETHODIMP CDataObject::GetDataHere( FORMATETC* pFormatetc, STGMEDIUM* pmedium ) +STDMETHODIMP CDataObject::GetDataHere(FORMATETC *, STGMEDIUM *pmedium) { - UNREFERENCED_PARAMETER( pFormatetc ); - UNREFERENCED_PARAMETER( pmedium ); -#ifdef _DEBUG - printf("IDataObject::GetDataHere\n"); -#endif //_DEBUG pmedium->pUnkForRelease = NULL; return E_NOTIMPL; } -STDMETHODIMP CDataObject::QueryGetData( FORMATETC* pFormatetc ) +STDMETHODIMP CDataObject::QueryGetData(FORMATETC *pFormatetc) { -#ifdef _DEBUG - printf("IDataObject::QueryGetData\n"); -#endif //_DEBUG - for( UINT i = 0; i < numdata; i++ ){ - if( data[i].format.cfFormat == pFormatetc->cfFormat ){ - if( data[i].format.dwAspect == pFormatetc->dwAspect){ + for (UINT i = 0 ; i < numdata ; i++) + if (data[i].format.cfFormat == pFormatetc->cfFormat) + if (data[i].format.dwAspect == pFormatetc->dwAspect) return S_OK; - } - } - } return DV_E_FORMATETC; } -STDMETHODIMP CDataObject::GetCanonicalFormatEtc( FORMATETC* pFormatetcIn, FORMATETC* pFormatetcOut ) +STDMETHODIMP CDataObject::GetCanonicalFormatEtc(FORMATETC *, FORMATETC *) { - UNREFERENCED_PARAMETER( pFormatetcIn ); - UNREFERENCED_PARAMETER( pFormatetcOut ); -#ifdef _DEBUG - printf("IDataObject::GetCanonicalFormatEtc\n"); -#endif //_DEBUG return E_NOTIMPL; } -STDMETHODIMP CDataObject::SetData(FORMATETC* pFormatetc, STGMEDIUM* pmedium, BOOL fRelease) +STDMETHODIMP CDataObject::SetData(FORMATETC *pFormatetc, STGMEDIUM *pmedium, BOOL fRelease) { -#ifdef _DEBUG - printf("IDataObject::SetData\n"); -#endif //_DEBUG - if (!allowSetData) return E_NOTIMPL; @@ -190,10 +143,6 @@ STDMETHODIMP CDataObject::SetData(FORMATETC* pFormatetc, STGMEDIUM* pmedium, BOO STDMETHODIMP CDataObject::EnumFormatEtc( DWORD dwDirection, IEnumFORMATETC** ppenumFormatetc ) { -#ifdef _DEBUG - printf("IDataObject::EnumFormatEtc\n"); -#endif //_DEBUG - //Don't support DATADIR_SET since we accept any format if(dwDirection!=DATADIR_GET) return E_NOTIMPL; @@ -203,90 +152,66 @@ STDMETHODIMP CDataObject::EnumFormatEtc( DWORD dwDirection, IEnumFORMATETC** ppe or resize the array to make space for one*/ unsigned int i = numenums; if(enums) for( i = 0; i < numenums && enums[i] != NULL; i++ ); - CEnumFORMATETC** t; - if( i == numenums ) t = (CEnumFORMATETC**) realloc(enums,sizeof(CEnumFORMATETC*)*(numenums+1)); - else t = enums; - if(t){ - enums = t; t[i] = new CEnumFORMATETC(this,true,&t[i]); - if(t[i]){ - HRESULT ret = t[i]->QueryInterface(IID_IEnumFORMATETC,(void**)ppenumFormatetc); - if( i == numenums ) numenums++; - if( ret != S_OK || *ppenumFormatetc == NULL ) - //FIXME: Should we return E_INVALIDARG or E_OUTOFMEMORY or what? - return E_OUTOFMEMORY; - } - else return E_OUTOFMEMORY; - } else return E_OUTOFMEMORY; + CEnumFORMATETC **t; + if (i == numenums) + t = (CEnumFORMATETC**) realloc(enums, sizeof(CEnumFORMATETC *) * (numenums + 1)); + else + t = enums; + if (t == 0) + return E_OUTOFMEMORY; + enums = t; + t[i] = new CEnumFORMATETC(this); + if (t[i] == 0) + return E_OUTOFMEMORY; + HRESULT ret = t[i]->QueryInterface(IID_IEnumFORMATETC, (void**)ppenumFormatetc); + if (i == numenums) + numenums++; + if (ret != S_OK || *ppenumFormatetc == NULL) + //FIXME: Should we return E_INVALIDARG or E_OUTOFMEMORY or what? + return E_OUTOFMEMORY; return S_OK; } //CEnumFORMATETC //Members -CEnumFORMATETC::CEnumFORMATETC( CDataObject*par, bool delself, CEnumFORMATETC** p ) +CEnumFORMATETC::CEnumFORMATETC(CDataObject *par) { -#ifdef _DEBUG - printf("IEnumFORMATETC::IEnumFORMATETC\n"); -#endif //_DEBUG m_cRefCount = 0; - deleteself = delself; - pthis = p; - parent = par; index = 0; } -CEnumFORMATETC::~CEnumFORMATETC( void ) +CEnumFORMATETC::~CEnumFORMATETC() { -#ifdef _DEBUG - printf("IEnumFORMATETC::~IEnumFORMATETC\n"); - if( m_cRefCount != 0 ) - printf("Deleting %s too early 0x%x.m_cRefCount = %d\n", "IEnumFORMATETC", this, m_cRefCount); -#endif //_DEBUG - if( pthis ) *pthis = NULL; + assert(m_cRefCount == 0); } //IUnknown members -STDMETHODIMP CEnumFORMATETC::QueryInterface( REFIID iid, void** ppvObject ) +STDMETHODIMP CEnumFORMATETC::QueryInterface(REFIID iid, void **ppvObject) { -#ifdef _DEBUG - printf("IEnumFORMATETC::QueryInterface\n"); -#endif //_DEBUG - - *ppvObject = NULL; - - if ( iid == IID_IUnknown ) *ppvObject = (IUnknown*)this; - else if ( iid == IID_IEnumFORMATETC ) *ppvObject = (IEnumFORMATETC*)this; - - if(*ppvObject){ - ((IUnknown*)*ppvObject)->AddRef(); + if (iid == IID_IUnknown || iid == IID_IEnumFORMATETC) + { + *ppvObject = static_cast(this); + AddRef(); return S_OK; } - + *ppvObject = NULL; return E_NOINTERFACE; } -STDMETHODIMP_(ULONG) CEnumFORMATETC::AddRef( void ) +STDMETHODIMP_(ULONG) CEnumFORMATETC::AddRef() { -#ifdef _DEBUG - printf("IEnumFORMATETC::AddRef\n"); -#endif //_DEBUG return ++m_cRefCount; } -STDMETHODIMP_(ULONG) CEnumFORMATETC::Release( void ) +STDMETHODIMP_(ULONG) CEnumFORMATETC::Release() { -#ifdef _DEBUG - printf("IEnumFORMATETC::Release\n"); -#endif //_DEBUG - if( --m_cRefCount == 0 && deleteself ) delete this; - return m_cRefCount; + return --m_cRefCount; } //IEnumFORMATETC members -STDMETHODIMP CEnumFORMATETC::Next( ULONG celt, FORMATETC* rgelt, ULONG* pceltFetched ){ -#ifdef _DEBUG - printf("IEnumFORMATETC::Next\n"); -#endif //_DEBUG +STDMETHODIMP CEnumFORMATETC::Next(ULONG celt, FORMATETC *rgelt, ULONG *pceltFetched) +{ if (rgelt == 0) return E_INVALIDARG; ULONG fetched = 0; @@ -300,57 +225,35 @@ STDMETHODIMP CEnumFORMATETC::Next( ULONG celt, FORMATETC* rgelt, ULONG* pceltFet return fetched == celt ? S_OK : S_FALSE; } -STDMETHODIMP CEnumFORMATETC::Skip( ULONG celt ){ -#ifdef _DEBUG - printf("IEnumFORMATETC::Skip\n"); -#endif //_DEBUG +STDMETHODIMP CEnumFORMATETC::Skip(ULONG celt) +{ index += celt; return S_FALSE; } -STDMETHODIMP CEnumFORMATETC::Reset( void ){ -#ifdef _DEBUG - printf("IEnumFORMATETC::Reset\n"); -#endif //_DEBUG +STDMETHODIMP CEnumFORMATETC::Reset() +{ index = 0; return S_OK; } -STDMETHODIMP CEnumFORMATETC::Clone( IEnumFORMATETC** ppenum ){ -#ifdef _DEBUG - printf("IEnumFORMATETC::Clone\n"); -#endif //_DEBUG - return parent->EnumFormatEtc( DATADIR_GET, ppenum ); +STDMETHODIMP CEnumFORMATETC::Clone(IEnumFORMATETC **ppenum) +{ + return parent->EnumFormatEtc(DATADIR_GET, ppenum); } - //Following methods not implemented yet -STDMETHODIMP CDataObject::DAdvise( FORMATETC* pFormatetc, DWORD advf, IAdviseSink* pAdvSink, DWORD* pdwConnection ) +STDMETHODIMP CDataObject::DAdvise(FORMATETC *, DWORD, IAdviseSink *, DWORD *) { - UNREFERENCED_PARAMETER( pFormatetc ); - UNREFERENCED_PARAMETER( advf ); - UNREFERENCED_PARAMETER( pAdvSink ); - UNREFERENCED_PARAMETER( pdwConnection ); -#ifdef _DEBUG - printf("IDataObject::DAdvise\n"); -#endif //_DEBUG return E_NOTIMPL; } -STDMETHODIMP CDataObject::DUnadvise( DWORD dwConnection ) +STDMETHODIMP CDataObject::DUnadvise(DWORD) { - UNREFERENCED_PARAMETER( dwConnection ); -#ifdef _DEBUG - printf("IDataObject::DUnadvise\n"); -#endif //_DEBUG return E_NOTIMPL; } -STDMETHODIMP CDataObject::EnumDAdvise( IEnumSTATDATA** ppenumAdvise ) +STDMETHODIMP CDataObject::EnumDAdvise(IEnumSTATDATA **) { - UNREFERENCED_PARAMETER( ppenumAdvise ); -#ifdef _DEBUG - printf("IDataObject::EnumDAdvise\n"); -#endif //_DEBUG return E_NOTIMPL; } diff --git a/Externals/heksedit/ido.h b/Externals/heksedit/ido.h index 2d0e04858..bd7f46a33 100644 --- a/Externals/heksedit/ido.h +++ b/Externals/heksedit/ido.h @@ -15,37 +15,35 @@ class CDataObject: public IDataObject friend CEnumFORMATETC; private: ULONG m_cRefCount; - bool deleteself; - CDataObject** pthis; bool allowSetData; //Allow the IDataObject::SetData call - DataSpecifier* data; //Pointer to an array of STGMEDIUM+FORMATETC pairs + DataSpecifier *data; //Pointer to an array of STGMEDIUM+FORMATETC pairs unsigned int numdata; //Number of data objects in data - CEnumFORMATETC** enums; //An array of pointers to IEnumFORMATETC objects + CEnumFORMATETC **enums; //An array of pointers to IEnumFORMATETC objects unsigned int numenums; //Number of pointers in enums public: //Members - CDataObject( bool delself = false, CDataObject** p = NULL ); - ~CDataObject( void ); - void DisableSetData( void ); - void Empty( void ); + CDataObject(); + ~CDataObject(); + void DisableSetData(); + void Empty(); //IUnknown members - STDMETHODIMP QueryInterface( REFIID iid, void** ppvObject ); - STDMETHODIMP_(ULONG) AddRef( void ); - STDMETHODIMP_(ULONG) Release( void ); + STDMETHODIMP QueryInterface(REFIID iid, void **ppvObject); + STDMETHODIMP_(ULONG) AddRef(); + STDMETHODIMP_(ULONG) Release(); //IDataObject members - STDMETHODIMP GetData( FORMATETC* pFormatetc, STGMEDIUM* pmedium ); - STDMETHODIMP GetDataHere( FORMATETC* pFormatetc, STGMEDIUM* pmedium ); - STDMETHODIMP QueryGetData( FORMATETC* pFormatetc ); - STDMETHODIMP GetCanonicalFormatEtc( FORMATETC* pFormatetcIn, FORMATETC* pFormatetcOut ); - STDMETHODIMP SetData( FORMATETC* pFormatetc, STGMEDIUM* pmedium, BOOL fRelease ); - STDMETHODIMP EnumFormatEtc( DWORD dwDirection, IEnumFORMATETC** ppenumFormatetc ); - STDMETHODIMP DAdvise( FORMATETC* pFormatetc, DWORD advf, IAdviseSink* pAdvSink, DWORD* pdwConnection ); - STDMETHODIMP DUnadvise( DWORD dwConnection ); - STDMETHODIMP EnumDAdvise( IEnumSTATDATA** ppenumAdvise ); + STDMETHODIMP GetData(FORMATETC *pFormatetc, STGMEDIUM *pmedium); + STDMETHODIMP GetDataHere(FORMATETC *pFormatetc, STGMEDIUM* pmedium); + STDMETHODIMP QueryGetData(FORMATETC *pFormatetc); + STDMETHODIMP GetCanonicalFormatEtc(FORMATETC *pFormatetcIn, FORMATETC *pFormatetcOut); + STDMETHODIMP SetData(FORMATETC *pFormatetc, STGMEDIUM *pmedium, BOOL fRelease); + STDMETHODIMP EnumFormatEtc(DWORD dwDirection, IEnumFORMATETC **ppenumFormatetc); + STDMETHODIMP DAdvise(FORMATETC *pFormatetc, DWORD advf, IAdviseSink *pAdvSink, DWORD *pdwConnection); + STDMETHODIMP DUnadvise(DWORD dwConnection); + STDMETHODIMP EnumDAdvise(IEnumSTATDATA **ppenumAdvise); }; class CEnumFORMATETC : public IEnumFORMATETC @@ -60,19 +58,19 @@ private: public: //Members - CEnumFORMATETC( CDataObject*par, bool delself = false, CEnumFORMATETC** p = NULL ); - ~CEnumFORMATETC( void ); + CEnumFORMATETC(CDataObject *); + ~CEnumFORMATETC(); //IUnknown members - STDMETHODIMP QueryInterface( REFIID iid, void** ppvObject ); - STDMETHODIMP_(ULONG) AddRef( void ); - STDMETHODIMP_(ULONG) Release( void ); + STDMETHODIMP QueryInterface(REFIID iid, void **ppvObject); + STDMETHODIMP_(ULONG) AddRef(); + STDMETHODIMP_(ULONG) Release(); //IEnumFORMATETC members - STDMETHODIMP Next( ULONG celt, FORMATETC* rgelt, ULONG* pceltFetched ); - STDMETHODIMP Skip( ULONG celt ); - STDMETHODIMP Reset( void ); - STDMETHODIMP Clone( IEnumFORMATETC** ppenum ); + STDMETHODIMP Next(ULONG celt, FORMATETC *rgelt, ULONG* pceltFetched); + STDMETHODIMP Skip(ULONG celt); + STDMETHODIMP Reset(); + STDMETHODIMP Clone(IEnumFORMATETC ** ppenum); }; #endif // ido_h \ No newline at end of file diff --git a/Externals/heksedit/ids.cpp b/Externals/heksedit/ids.cpp index fdd1d412a..cb0517c39 100644 --- a/Externals/heksedit/ids.cpp +++ b/Externals/heksedit/ids.cpp @@ -2,86 +2,53 @@ #include "ids.h" #include "hexwnd.h" - //Members -CDropSource::CDropSource( bool delself, CDropSource** p )//When using C++ new need to call like so someptr = new CDataObject(1,someptr); +CDropSource::CDropSource() +: m_cRefCount(0) { -#ifdef _DEBUG - printf("IDropSource::IDropSource\n"); -#endif //_DEBUG - m_cRefCount = 0; - deleteself = delself; - pthis = p; } -CDropSource::~CDropSource( void ) +CDropSource::~CDropSource() { -#ifdef _DEBUG - printf("IDropSource::~IDropSource\n"); - if( m_cRefCount != 0 ) - printf("Deleting %s too early 0x%x.m_cRefCount = %d\n", "IDropSource", this, m_cRefCount); -#endif //_DEBUG - if( pthis ) *pthis = NULL; + assert(m_cRefCount == 0); } - //IUnknown members -STDMETHODIMP CDropSource::QueryInterface( REFIID iid, void** ppvObject ) +STDMETHODIMP CDropSource::QueryInterface(REFIID iid, void **ppvObject) { -#ifdef _DEBUG - printf("IDropSource::QueryInterface\n"); -#endif //_DEBUG - - *ppvObject = NULL; - - if ( iid == IID_IUnknown ) *ppvObject = (IUnknown*)this; - else if ( iid == IID_IDropSource ) *ppvObject = (IDropSource*)this; - - if(*ppvObject){ - ((IUnknown*)*ppvObject)->AddRef(); + if (iid == IID_IUnknown || iid == IID_IDropSource) + { + *ppvObject = static_cast(this); + AddRef(); return S_OK; } - + *ppvObject = NULL; return E_NOINTERFACE; } -STDMETHODIMP_(ULONG) CDropSource::AddRef( void ) +STDMETHODIMP_(ULONG) CDropSource::AddRef() { -#ifdef _DEBUG - printf("IDropSource::AddRef\n"); -#endif //_DEBUG return ++m_cRefCount; } -STDMETHODIMP_(ULONG) CDropSource::Release( void ) +STDMETHODIMP_(ULONG) CDropSource::Release() { -#ifdef _DEBUG - printf("IDropSource::Release\n"); -#endif //_DEBUG - if( --m_cRefCount == 0 && deleteself ) delete this; - return m_cRefCount; + return --m_cRefCount; } - //IDropSource members -STDMETHODIMP CDropSource::GiveFeedback( DWORD dwEffect ) +STDMETHODIMP CDropSource::GiveFeedback(DWORD) { - UNREFERENCED_PARAMETER( dwEffect ); -#ifdef _DEBUG - printf("IDropSource::GiveFeedback\n"); -#endif //_DEBUG return DRAGDROP_S_USEDEFAULTCURSORS; } -STDMETHODIMP CDropSource::QueryContinueDrag( BOOL fEscapePressed, DWORD grfKeyState ) +STDMETHODIMP CDropSource::QueryContinueDrag(BOOL fEscapePressed, DWORD grfKeyState) { -#ifdef _DEBUG - printf("IDropSource::QueryContinueDrag\n"); -#endif //_DEBUG //Cancel when escape is pressed - if(fEscapePressed) return DRAGDROP_S_CANCEL; + if (fEscapePressed) + return DRAGDROP_S_CANCEL; //Complete if there are no mouse buttons pressed - if(!(grfKeyState&(MK_LBUTTON|MK_MBUTTON|MK_RBUTTON))) + if(!(grfKeyState & (MK_LBUTTON|MK_MBUTTON|MK_RBUTTON))) return DRAGDROP_S_DROP; //Otherwise continue the drag operation return S_OK; diff --git a/Externals/heksedit/ids.h b/Externals/heksedit/ids.h index 237ea2722..c5eeaf85b 100644 --- a/Externals/heksedit/ids.h +++ b/Externals/heksedit/ids.h @@ -6,22 +6,20 @@ class CDropSource: public IDropSource { private: ULONG m_cRefCount; - bool deleteself; - CDropSource** pthis; public: //Members - CDropSource( bool delself = false, CDropSource** p = NULL); - ~CDropSource( void ); + CDropSource(); + ~CDropSource(); //IUnknown members - STDMETHODIMP QueryInterface( REFIID iid, void** ppvObject ); - STDMETHODIMP_(ULONG) AddRef( void ); - STDMETHODIMP_(ULONG) Release( void ); + STDMETHODIMP QueryInterface(REFIID iid, void **ppvObject); + STDMETHODIMP_(ULONG) AddRef(); + STDMETHODIMP_(ULONG) Release(); //IDataObject members - STDMETHODIMP GiveFeedback( DWORD dwEffect ); - STDMETHODIMP QueryContinueDrag( BOOL fEscapePressed,DWORD grfKeyState ); + STDMETHODIMP GiveFeedback(DWORD dwEffect); + STDMETHODIMP QueryContinueDrag(BOOL fEscapePressed, DWORD grfKeyState); }; diff --git a/Externals/heksedit/main.cpp b/Externals/heksedit/main.cpp index a08641a3c..a3090654c 100644 --- a/Externals/heksedit/main.cpp +++ b/Externals/heksedit/main.cpp @@ -7,10 +7,11 @@ #include "toolbar.h" static const char szMainClass[] = "frhed wndclass"; -static const char szHexClassA[] = "hekseditA_" CURRENT_VERSION "." SUB_RELEASE_NO; -static const char szHexClassW[] = "hekseditW_" CURRENT_VERSION "." SUB_RELEASE_NO; +static const char szHexClassA[] = "hekseditA_" CURRENT_VERSION "." SUB_RELEASE_NO "." BUILD_NO; +static const char szHexClassW[] = "hekseditW_" CURRENT_VERSION "." SUB_RELEASE_NO "." BUILD_NO; HINSTANCE hMainInstance; + LRESULT CALLBACK MainWndProc(HWND, UINT, WPARAM, LPARAM); static BOOL NTAPI IsNT() @@ -23,7 +24,6 @@ static BOOL NTAPI IsNT() return osvi.dwPlatformId == VER_PLATFORM_WIN32_NT; } - static BOOL CALLBACK WndEnumProcCountInstances(HWND hwnd, LPARAM lParam) { char buf[64]; @@ -78,11 +78,10 @@ int WINAPI WinMain(HINSTANCE hIconInstance, HINSTANCE, char *szCmdLine, int) pHexWnd->iInstCount = iInstCount; pHexWnd->read_ini_data(); - /*The if prevents the window from being resized to 0x0 - it becomes just a title bar*/ + // The if prevents the window from being resized to 0x0 it becomes just a title bar if (pHexWnd->iWindowX != CW_USEDEFAULT) { - //Prevent window creep when Taskbar is at top or left of screen + // Prevent window creep when Taskbar is at top or left of screen WINDOWPLACEMENT wp; wp.length = sizeof wp; GetWindowPlacement(hwndMain, &wp); @@ -188,6 +187,7 @@ LRESULT CALLBACK MainWndProc(HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam) hwndMain = hwnd; DragAcceptFiles(hwnd, TRUE); // Accept files dragged into main window. hwndToolBar = CreateTBar(hwnd, hMainInstance); + SendMessage(hwndToolBar, CCM_SETUNICODEFORMAT, TRUE, 0); hwndHex = CreateWindowEx(WS_EX_CLIENTEDGE, IsNT() ? szHexClassW : szHexClassA, 0, WS_TABSTOP | WS_CHILD | WS_VISIBLE | WS_VSCROLL | WS_HSCROLL, @@ -201,6 +201,7 @@ LRESULT CALLBACK MainWndProc(HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam) pHexWnd->hwndStatusBar = hwndStatusBar; pHexWnd->bSaveIni = TRUE; pHexWnd->bCenterCaret = TRUE; + pHexWnd->load_lang((LANGID)GetThreadLocale()); pHexWnd->set_wnd_title(); return 0; case WM_COMMAND: @@ -221,22 +222,29 @@ LRESULT CALLBACK MainWndProc(HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam) break; case WM_SIZE: { - SendMessage(hwndStatusBar, WM_SIZE, 0 , 0); //Moves status bar back to the bottom - SendMessage(hwndToolBar, WM_SIZE, 0 , 0); //Moves tool bar back to the top - + int cx = GET_X_LPARAM(lParam); + int cy = GET_Y_LPARAM(lParam); + RECT rect; + // Adjust tool bar width so buttons will wrap accordingly. + MoveWindow(hwndToolBar, 0, 0, cx, 0, TRUE); + // Set tool bar height to bottom of last button plus some padding. + if (int n = SendMessage(hwndToolBar, TB_BUTTONCOUNT, 0, 0)) + { + SendMessage(hwndToolBar, TB_GETITEMRECT, n - 1, (LPARAM)&rect); + MoveWindow(hwndToolBar, 0, 0, cx, rect.bottom + 2, TRUE); + } + GetWindowRect(hwndToolBar, &rect); + int cyToolBar = rect.bottom - rect.top; + // Moves status bar back to the bottom + SendMessage(hwndStatusBar, WM_SIZE, 0, 0); + GetWindowRect(hwndStatusBar, &rect); + int cyStatusBar = rect.bottom - rect.top; //-------------------------------------------- // Set statusbar divisions. - int statbarw = LOWORD(lParam); // Calculate the right edge coordinate for each part - int parts[] = { statbarw * 4 / 6, statbarw * 5 / 6, statbarw }; - - SendMessage(hwndStatusBar, SB_SETPARTS, (WPARAM) 3, (LPARAM)parts); - - RECT rect; - GetClientRect(hwndToolBar, &rect); - int iToolbarHeight = rect.bottom - rect.top; - GetClientRect(hwndStatusBar, &rect); - MoveWindow(hwndHex, 0, iToolbarHeight, LOWORD(lParam), HIWORD(lParam)-rect.bottom-iToolbarHeight, TRUE); + int parts[] = { MulDiv(cx, 4, 6), MulDiv(cx, 5, 6), cx }; + SendMessage(hwndStatusBar, SB_SETPARTS, RTL_NUMBER_OF(parts), (LPARAM)parts); + MoveWindow(hwndHex, 0, cyToolBar, cx, cy - cyToolBar - cyStatusBar, TRUE); } break; case WM_NOTIFY: @@ -251,15 +259,14 @@ LRESULT CALLBACK MainWndProc(HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam) } else if (hwndFrom == hwndToolBar) { - if (code == TBN_GETINFOTIPA) - { - NMTBGETINFOTIPA *pi = (NMTBGETINFOTIPA *)lParam; - LoadStringA(hMainInstance, pi->iItem, pi->pszText, pi->cchTextMax); - } - else if (code == TBN_GETINFOTIPW) + if (code == TBN_GETINFOTIPW) { NMTBGETINFOTIPW *pi = (NMTBGETINFOTIPW *)lParam; - LoadStringW(hMainInstance, pi->iItem, pi->pszText, pi->cchTextMax); + if (BSTR text = pHexWnd->load_string(pi->iItem)) + { + StrCpyNW(pi->pszText, text, pi->cchTextMax); + pHexWnd->free_string(text); + } } } } diff --git a/Externals/heksedit/resource.h b/Externals/heksedit/resource.h index 2045f5364..597ee7b1b 100644 --- a/Externals/heksedit/resource.h +++ b/Externals/heksedit/resource.h @@ -244,6 +244,8 @@ #define IDC_ENABLE_DROP 1080 #define IDC_EXPORTDIGITS 1081 #define IDC_APPICON 1082 +#define IDC_COMBO1 1083 +#define IDS_DiffListItemFormat 10001 #define IDM_OLE_DRAG_DROP 40142 // Next default values for new objects @@ -253,7 +255,7 @@ #define _APS_NO_MFC 1 #define _APS_NEXT_RESOURCE_VALUE 145 #define _APS_NEXT_COMMAND_VALUE 40143 -#define _APS_NEXT_CONTROL_VALUE 1083 +#define _APS_NEXT_CONTROL_VALUE 1084 #define _APS_NEXT_SYMED_VALUE 101 #endif #endif diff --git a/Externals/heksedit/toolbar.cpp b/Externals/heksedit/toolbar.cpp index 5c89d44f7..e34bc78be 100644 --- a/Externals/heksedit/toolbar.cpp +++ b/Externals/heksedit/toolbar.cpp @@ -3,11 +3,11 @@ #include "resource.h" #define IMAGEWIDTH 16 -#define IMAGEHEIGHT 17 +#define IMAGEHEIGHT 16 #define BUTTONWIDTH 0 #define BUTTONHEIGHT 0 -TBBUTTON tbButtons[] = // Array defining the toolbar buttons +static const TBBUTTON tbButtons[] = // Array defining the toolbar buttons { { 0, IDM_NEW, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0 }, { 1, IDM_OPEN, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0 }, @@ -31,18 +31,18 @@ TBBUTTON tbButtons[] = // Array defining the toolbar buttons HWND CreateTBar(HWND hWnd, HINSTANCE hInst) { HWND hwndToolBar = CreateToolbarEx(hWnd, - WS_CHILD | WS_VISIBLE | TBSTYLE_TOOLTIPS | TBSTYLE_FLAT | TBSTYLE_WRAPABLE, + WS_CHILD | WS_VISIBLE | CCS_NORESIZE | + TBSTYLE_TOOLTIPS | TBSTYLE_FLAT | TBSTYLE_WRAPABLE, 0, - sizeof(tbButtons)/sizeof(TBBUTTON), + RTL_NUMBER_OF(tbButtons) - 4, hInst, IDB_TOOLBAR, tbButtons, - sizeof(tbButtons)/sizeof(TBBUTTON), + RTL_NUMBER_OF(tbButtons), BUTTONWIDTH, BUTTONHEIGHT, IMAGEWIDTH, IMAGEHEIGHT, sizeof(TBBUTTON)); - return hwndToolBar; } diff --git a/Externals/heksedit/version.h b/Externals/heksedit/version.h index 10e35cdd1..cdf44a476 100644 --- a/Externals/heksedit/version.h +++ b/Externals/heksedit/version.h @@ -1,3 +1,4 @@ #define FRHED_MAJOR_VERSION 1 #define FRHED_MINOR_VERSION 2 #define FRHED_SUB_RELEASE_NO 1 +#define FRHED_BUILD_NO 1 diff --git a/Externals/heksedit/version.rc b/Externals/heksedit/version.rc index 74877484f..5ad4b741e 100644 --- a/Externals/heksedit/version.rc +++ b/Externals/heksedit/version.rc @@ -6,10 +6,11 @@ #define CURRENT_VERSION SHARPEN(A,FRHED_MAJOR_VERSION) "." SHARPEN(A,FRHED_MINOR_VERSION) #define SUB_RELEASE_NO SHARPEN(A,FRHED_SUB_RELEASE_NO) +#define BUILD_NO SHARPEN(A,FRHED_BUILD_NO) VS_VERSION_INFO VERSIONINFO - FILEVERSION FRHED_MAJOR_VERSION,FRHED_MINOR_VERSION,FRHED_SUB_RELEASE_NO,0 - PRODUCTVERSION FRHED_MAJOR_VERSION,FRHED_MINOR_VERSION,FRHED_SUB_RELEASE_NO,0 + FILEVERSION FRHED_MAJOR_VERSION,FRHED_MINOR_VERSION,FRHED_SUB_RELEASE_NO,FRHED_BUILD_NO + PRODUCTVERSION FRHED_MAJOR_VERSION,FRHED_MINOR_VERSION,FRHED_SUB_RELEASE_NO,FRHED_BUILD_NO FILEFLAGSMASK 0x3fL #ifdef _DEBUG FILEFLAGS 0x21L @@ -26,15 +27,15 @@ BEGIN BEGIN VALUE "Comments", "Homepage: http://www.kibria.de, http://zip.to/pabs3\0" VALUE "CompanyName", "(c) Raihan Kibria 2000\0" - VALUE "FileDescription", "frhed - free hex editor " CURRENT_VERSION "." SUB_RELEASE_NO - VALUE "FileVersion", CURRENT_VERSION "." SUB_RELEASE_NO + VALUE "FileDescription", "frhed - free hex editor " CURRENT_VERSION "." SUB_RELEASE_NO "." BUILD_NO + VALUE "FileVersion", CURRENT_VERSION "." SUB_RELEASE_NO "." BUILD_NO VALUE "InternalName", "frhed\0" VALUE "LegalCopyright", "GNU General Public License v2.0\0" VALUE "LegalTrademarks", "\0" VALUE "OriginalFilename", "frhed.exe\0" VALUE "PrivateBuild", "\0" VALUE "ProductName", "frhed\0" - VALUE "ProductVersion", CURRENT_VERSION "." SUB_RELEASE_NO + VALUE "ProductVersion", CURRENT_VERSION "." SUB_RELEASE_NO "." BUILD_NO VALUE "SpecialBuild", "\0" END END