Skip to content

Commit d2eaa6c

Browse files
committed
ShellExtension:
- Add Compare As menu item - Change the &WinMerge menu item to Win&Merge to avoid conflicting with Explorer's Ne&w menu item accelerator key
1 parent 9e3714e commit d2eaa6c

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

85 files changed

+678
-332
lines changed

ShellExtension/Common/WinMergeContextMenu.cpp

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ static BOOL GetWinMergeDir(String &strDir)
5858
}
5959

6060
/// Format commandline used to start WinMerge
61-
static String FormatCmdLine(const String &winmergePath,
61+
static String FormatCmdLine(DWORD verb, const String &winmergePath,
6262
const std::vector<String>& paths, BOOL bAlterSubFolders)
6363
{
6464
String strCommandline = winmergePath.empty() ? _T("") : _T("\"") + winmergePath + _T("\"");
@@ -82,6 +82,9 @@ static String FormatCmdLine(const String &winmergePath,
8282
if (paths.size() > 2)
8383
strCommandline += _T(" \"") + paths[2] + _T("\"");
8484

85+
if (verb == WinMergeContextMenu::CMD_COMPARE_AS)
86+
strCommandline += _T(" /show-compare-as-menu");
87+
8588
return strCommandline;
8689
}
8790

@@ -179,17 +182,17 @@ static HRESULT ShellExecuteFromExplorer(
179182
CComVariant(nShowCmd));
180183
}
181184

182-
static BOOL LaunchWinMerge(const String &winmergePath,
185+
static BOOL LaunchWinMerge(DWORD verb, const String &winmergePath,
183186
const std::vector<String>& paths, BOOL bAlterSubFolders, IUnknown* pSite)
184187
{
185188
if (pSite)
186189
{
187-
String strCommandLine = FormatCmdLine(_T(""), paths, bAlterSubFolders);
190+
String strCommandLine = FormatCmdLine(verb, _T(""), paths, bAlterSubFolders);
188191
if (SUCCEEDED(ShellExecuteFromExplorer(pSite, winmergePath.c_str(), strCommandLine.c_str())))
189192
return TRUE;
190193
}
191194

192-
String strCommandLine = FormatCmdLine(winmergePath, paths, bAlterSubFolders);
195+
String strCommandLine = FormatCmdLine(verb, winmergePath, paths, bAlterSubFolders);
193196

194197
// Finally start a new WinMerge process
195198
BOOL retVal = FALSE;
@@ -208,7 +211,7 @@ static BOOL LaunchWinMerge(const String &winmergePath,
208211
}
209212
else if (GetLastError() == ERROR_ELEVATION_REQUIRED)
210213
{
211-
String strCommandLine = FormatCmdLine(_T(""), paths, bAlterSubFolders);
214+
String strCommandLine = FormatCmdLine(verb, _T(""), paths, bAlterSubFolders);
212215
HINSTANCE hInstance = ShellExecute(nullptr, _T("runas"), winmergePath.c_str(), strCommandLine.c_str(), 0, SW_SHOWNORMAL);
213216
if (reinterpret_cast<intptr_t>(hInstance) < 32)
214217
return FALSE;
@@ -305,6 +308,8 @@ std::vector<MenuItem> WinMergeContextMenu::GetMenuItemList() const
305308
// Allow re-selecting first item or selecting second item
306309
case MENU_ONESEL_PREV:
307310
list.push_back({ enabled, icon, CMD_COMPARE, IDS_COMPARE, GetResourceString(IDS_COMPARE) });
311+
if ((m_dwContextMenuEnabled & EXT_COMPARE_AS) != 0 && !isdir)
312+
list.push_back({ enabled, icon, CMD_COMPARE_AS, IDS_COMPARE_AS, GetResourceString(IDS_COMPARE_AS) });
308313
list.push_back({ enabled, icon, CMD_SELECT_MIDDLE, IDS_SELECT_MIDDLE, GetResourceString(IDS_SELECT_MIDDLE) });
309314
list.push_back({ enabled, icon, CMD_RESELECT_LEFT, IDS_RESELECT_LEFT, GetResourceString(IDS_RESELECT_LEFT) });
310315
break;
@@ -313,6 +318,8 @@ std::vector<MenuItem> WinMergeContextMenu::GetMenuItemList() const
313318
// Allow re-selecting first item or selecting second item
314319
case MENU_ONESEL_TWO_PREV:
315320
list.push_back({ enabled, icon, CMD_COMPARE, IDS_COMPARE, GetResourceString(IDS_COMPARE) });
321+
if ((m_dwContextMenuEnabled & EXT_COMPARE_AS) != 0 && !isdir)
322+
list.push_back({ enabled, icon, CMD_COMPARE_AS, IDS_COMPARE_AS, GetResourceString(IDS_COMPARE_AS) });
316323
list.push_back({ enabled, icon, CMD_RESELECT_LEFT, IDS_RESELECT_LEFT, GetResourceString(IDS_RESELECT_LEFT) });
317324
break;
318325

@@ -322,6 +329,8 @@ std::vector<MenuItem> WinMergeContextMenu::GetMenuItemList() const
322329
case MENU_THREESEL:
323330
default:
324331
list.push_back({ enabled, icon, CMD_COMPARE, IDS_COMPARE, GetResourceString(IDS_COMPARE) });
332+
if ((m_dwContextMenuEnabled & EXT_COMPARE_AS) != 0 && !isdir)
333+
list.push_back({ enabled, icon, CMD_COMPARE_AS, IDS_COMPARE_AS, GetResourceString(IDS_COMPARE_AS) });
325334
break;
326335
}
327336
return list;
@@ -343,7 +352,7 @@ HRESULT WinMergeContextMenu::InvokeCommand(DWORD verb)
343352
if (!PathFileExists(strWinMergePath.c_str()))
344353
return S_FALSE;
345354

346-
if (verb == CMD_COMPARE)
355+
if (verb == CMD_COMPARE || verb == CMD_COMPARE_AS)
347356
{
348357
bCompare = TRUE;
349358
switch (m_dwMenuState)
@@ -423,7 +432,7 @@ HRESULT WinMergeContextMenu::InvokeCommand(DWORD verb)
423432
if ((GetAsyncKeyState(VK_CONTROL) & 0x8000) != 0)
424433
bAlterSubFolders = TRUE;
425434

426-
return LaunchWinMerge(strWinMergePath, m_strPaths, bAlterSubFolders, m_pSite) ? S_OK : S_FALSE;
435+
return LaunchWinMerge(verb, strWinMergePath, m_strPaths, bAlterSubFolders, m_pSite) ? S_OK : S_FALSE;
427436
}
428437

429438
/**

ShellExtension/Common/WinMergeContextMenu.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,12 +26,14 @@ class WinMergeContextMenu
2626
{
2727
EXT_ENABLED = 0x01, /**< ShellExtension enabled/disabled. */
2828
EXT_ADVANCED = 0x02, /**< Advanced menuitems enabled/disabled. */
29+
EXT_COMPARE_AS = 0x04, /**< Show Compare As menu. */
2930
};
3031

3132
enum
3233
{
3334
CMD_COMPARE,
3435
CMD_COMPARE_ELLIPSIS,
36+
CMD_COMPARE_AS,
3537
CMD_SELECT_LEFT,
3638
CMD_SELECT_MIDDLE,
3739
CMD_RESELECT_LEFT,

ShellExtension/ShellExtension/Resource.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
#define IDS_PROJNAME 100
66
#define IDS_CONTEXT_MENU 101
77
#define IDR_WINMERGESHELL 102
8+
#define IDS_COMPARE_AS 103
89
#define IDS_COMPARE 104
910
#define IDS_COMPARE_ELLIPSIS 105
1011
#define IDS_SELECT_LEFT 106

ShellExtension/ShellExtension/ShellExtension.rc

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -53,8 +53,8 @@ END
5353
//
5454

5555
VS_VERSION_INFO VERSIONINFO
56-
FILEVERSION 1,18,5,0
57-
PRODUCTVERSION 1,18,5,0
56+
FILEVERSION 1,18,6,0
57+
PRODUCTVERSION 1,18,6,0
5858
FILEFLAGSMASK 0x3fL
5959
#ifdef _DEBUG
6060
FILEFLAGS 0x1L
@@ -71,12 +71,12 @@ BEGIN
7171
BEGIN
7272
VALUE "CompanyName", "https://winmerge.org"
7373
VALUE "FileDescription", "WinMerge Shell Integration library"
74-
VALUE "FileVersion", "1.18.5.0"
74+
VALUE "FileVersion", "1.18.6.0"
7575
VALUE "InternalName", "ShellExtension"
76-
VALUE "LegalCopyright", "Copyright 2003-2022"
76+
VALUE "LegalCopyright", "Copyright 2003-2023"
7777
VALUE "OriginalFilename", "ShellExtension.DLL"
7878
VALUE "ProductName", "WinMerge Shell Integration library"
79-
VALUE "ProductVersion", "1.18.5.0"
79+
VALUE "ProductVersion", "1.18.6.0"
8080
END
8181
END
8282
BLOCK "VarFileInfo"
@@ -109,7 +109,8 @@ IDI_WINMERGEDIR ICON "..\Resources\WinMergeDir.ico"
109109
STRINGTABLE
110110
BEGIN
111111
IDS_PROJNAME "ShellExtension"
112-
IDS_CONTEXT_MENU "&WinMerge"
112+
IDS_CONTEXT_MENU "Win&Merge"
113+
IDS_COMPARE_AS "Compare &As"
113114
IDS_COMPARE "&Compare"
114115
IDS_COMPARE_ELLIPSIS "Compare&..."
115116
IDS_SELECT_LEFT "Select &Left"

ShellExtension/WinMergeContextMenu/WinMergeContextMenu.rc

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,8 @@ END
4545
//
4646

4747
VS_VERSION_INFO VERSIONINFO
48-
FILEVERSION 1,0,5,0
49-
PRODUCTVERSION 1,0,5,0
48+
FILEVERSION 1,0,6,0
49+
PRODUCTVERSION 1,0,6,0
5050
FILEFLAGSMASK 0x3fL
5151
#ifdef _DEBUG
5252
FILEFLAGS 0x1L
@@ -63,12 +63,12 @@ BEGIN
6363
BEGIN
6464
VALUE "CompanyName", "https://winmerge.org"
6565
VALUE "FileDescription", "WinMerge Shell Integration library"
66-
VALUE "FileVersion", "1.0.5.0"
66+
VALUE "FileVersion", "1.0.6.0"
6767
VALUE "InternalName", "WinMergeContextMenu"
68-
VALUE "LegalCopyright", "Copyright 2021-2022"
68+
VALUE "LegalCopyright", "Copyright 2021-2023"
6969
VALUE "OriginalFilename", "WinMergeContextMenu.dll"
7070
VALUE "ProductName", "WinMerge Shell Integration library"
71-
VALUE "ProductVersion", "1.0.5.0"
71+
VALUE "ProductVersion", "1.0.6.0"
7272
END
7373
END
7474
BLOCK "VarFileInfo"
@@ -98,7 +98,8 @@ IDI_WINMERGEDIR ICON "..\\Resources\\WinMergeDir.ico"
9898
STRINGTABLE
9999
BEGIN
100100
IDS_PROJNAME "ShellExtension"
101-
IDS_CONTEXT_MENU "&WinMerge"
101+
IDS_CONTEXT_MENU "Win&Merge"
102+
IDS_COMPARE_AS "Compare &As"
102103
IDS_COMPARE "&Compare"
103104
IDS_COMPARE_ELLIPSIS "Compare&..."
104105
IDS_SELECT_LEFT "Select &Left"

ShellExtension/WinMergeContextMenu/dllmain.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -258,7 +258,7 @@ class __declspec(uuid("90340779-F37E-468E-9728-A2593498ED32")) WinMergeFileDirEx
258258
, WinMergeExplorerCommandBase(&m_contextMenu)
259259
{
260260
}
261-
const wchar_t* Title() override { return L"&WinMerge"; }
261+
const wchar_t* Title() override { return L"Win&Merge"; }
262262
const int IconId(_In_opt_ IShellItemArray* selection) override
263263
{
264264
auto paths = GetPaths(selection);

ShellExtension/WinMergeContextMenu/resource.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
#define IDS_PROJNAME 100
66
#define IDS_CONTEXT_MENU 101
77
#define IDR_WINMERGESHELL 102
8+
#define IDS_COMPARE_AS 103
89
#define IDS_COMPARE 104
910
#define IDS_COMPARE_ELLIPSIS 105
1011
#define IDS_SELECT_LEFT 106

Src/Merge.rc

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2151,15 +2151,16 @@ STYLE DS_SETFONT | DS_FIXEDSYS | WS_POPUP | WS_CAPTION
21512151
CAPTION "Shell Integration"
21522152
FONT 8, "MS Shell Dlg", 0, 0, 0x1
21532153
BEGIN
2154-
GROUPBOX "Explorer",IDC_STATIC,7,6,270,144
2155-
CONTROL "E&nable advanced menu",IDC_EXPLORER_ADVANCED,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,27,30,240,10
2154+
GROUPBOX "Explorer",IDC_STATIC,7,6,270,156
21562155
CONTROL "&Add to context menu",IDC_EXPLORER_CONTEXT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,17,18,250,10
2157-
PUSHBUTTON "&Register shell extension",IDC_REGISTER_SHELLEXTENSION,17,48,250,14
2158-
PUSHBUTTON "&Unregister shell extension",IDC_UNREGISTER_SHELLEXTENSION,17,64,250,14
2159-
PUSHBUTTON "Register shell extension for current user &only",IDC_REGISTER_SHELLEXTENSION_PERUSER,17,80,250,14
2160-
PUSHBUTTON "Unregister shell extension for current user on&ly",IDC_UNREGISTER_SHELLEXTENSION_PERUSER,17,96,250,14
2161-
PUSHBUTTON "Register shell extension for &Windows 11 or later",IDC_REGISTER_WINMERGECONTEXTMENU,17,112,250,14
2162-
PUSHBUTTON "Unregister shell extension for W&indows 11 or later",IDC_UNREGISTER_WINMERGECONTEXTMENU,17,128,250,14
2156+
CONTROL "E&nable advanced menu",IDC_EXPLORER_ADVANCED,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,17,30,240,10
2157+
CONTROL "Enable &Compare As menu",IDC_EXPLORER_COMPARE_AS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,17,42,240,10
2158+
PUSHBUTTON "&Register shell extension",IDC_REGISTER_SHELLEXTENSION,17,60,250,14
2159+
PUSHBUTTON "&Unregister shell extension",IDC_UNREGISTER_SHELLEXTENSION,17,76,250,14
2160+
PUSHBUTTON "Register shell extension for current user &only",IDC_REGISTER_SHELLEXTENSION_PERUSER,17,92,250,14
2161+
PUSHBUTTON "Unregister shell extension for current user on&ly",IDC_UNREGISTER_SHELLEXTENSION_PERUSER,17,108,250,14
2162+
PUSHBUTTON "Register shell extension for &Windows 11 or later",IDC_REGISTER_WINMERGECONTEXTMENU,17,124,250,14
2163+
PUSHBUTTON "Unregister shell extension for W&indows 11 or later",IDC_UNREGISTER_WINMERGECONTEXTMENU,17,140,250,14
21632164
END
21642165

21652166
IDD_PROPPAGE_COMPARE_FOLDER DIALOGEX 0, 0, 285, 242

Src/PropShell.cpp

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
/// Flags for enabling and mode of extension
2323
#define CONTEXT_F_ENABLED 0x01
2424
#define CONTEXT_F_ADVANCED 0x02
25+
#define CONTEXT_F_COMPARE_AS 0x04
2526

2627
// registry values
2728
static LPCTSTR f_RegValueEnabled = _T("ContextMenuEnabled");
@@ -139,6 +140,7 @@ PropShell::PropShell(COptionsMgr *optionsMgr)
139140
: OptionsPanel(optionsMgr, PropShell::IDD)
140141
, m_bContextAdded(false)
141142
, m_bContextAdvanced(false)
143+
, m_bContextCompareAs(false)
142144
{
143145
}
144146

@@ -170,12 +172,14 @@ void PropShell::DoDataExchange(CDataExchange* pDX)
170172
//{{AFX_DATA_MAP(PropShell)
171173
DDX_Check(pDX, IDC_EXPLORER_CONTEXT, m_bContextAdded);
172174
DDX_Check(pDX, IDC_EXPLORER_ADVANCED, m_bContextAdvanced);
175+
DDX_Check(pDX, IDC_EXPLORER_COMPARE_AS, m_bContextCompareAs);
173176
//}}AFX_DATA_MAP
174177
}
175178

176179
BEGIN_MESSAGE_MAP(PropShell, OptionsPanel)
177180
//{{AFX_MSG_MAP(PropShell)
178181
ON_BN_CLICKED(IDC_EXPLORER_CONTEXT, OnAddToExplorer)
182+
ON_BN_CLICKED(IDC_EXPLORER_ADVANCED, OnAddToExplorerAdvanced)
179183
ON_BN_CLICKED(IDC_REGISTER_SHELLEXTENSION, OnRegisterShellExtension)
180184
ON_BN_CLICKED(IDC_UNREGISTER_SHELLEXTENSION, OnUnregisterShellExtension)
181185
ON_BN_CLICKED(IDC_REGISTER_SHELLEXTENSION_PERUSER, OnRegisterShellExtensionPerUser)
@@ -228,6 +232,9 @@ void PropShell::GetContextRegValues()
228232

229233
if (dwContextEnabled & CONTEXT_F_ADVANCED)
230234
m_bContextAdvanced = true;
235+
236+
if (dwContextEnabled & CONTEXT_F_COMPARE_AS)
237+
m_bContextCompareAs = true;
231238
}
232239

233240
/// Set registry values for ShellExtension
@@ -237,6 +244,12 @@ void PropShell::OnAddToExplorer()
237244
UpdateButtons();
238245
}
239246

247+
void PropShell::OnAddToExplorerAdvanced()
248+
{
249+
CompareAsContextMenuCheck();
250+
UpdateButtons();
251+
}
252+
240253
/// Saves given path to registry for ShellExtension, and Context Menu settings
241254
void PropShell::SaveMergePath()
242255
{
@@ -275,6 +288,11 @@ void PropShell::SaveMergePath()
275288
else
276289
dwContextEnabled &= ~CONTEXT_F_ADVANCED;
277290

291+
if (m_bContextCompareAs)
292+
dwContextEnabled |= CONTEXT_F_COMPARE_AS;
293+
else
294+
dwContextEnabled &= ~CONTEXT_F_COMPARE_AS;
295+
278296
retVal = reg.WriteDword(f_RegValueEnabled, dwContextEnabled);
279297
if (retVal != ERROR_SUCCESS)
280298
{
@@ -291,6 +309,16 @@ void PropShell::AdvancedContextMenuCheck()
291309
{
292310
CheckDlgButton(IDC_EXPLORER_ADVANCED, FALSE);
293311
m_bContextAdvanced = false;
312+
CompareAsContextMenuCheck();
313+
}
314+
}
315+
316+
void PropShell::CompareAsContextMenuCheck()
317+
{
318+
if (!IsDlgButtonChecked(IDC_EXPLORER_ADVANCED))
319+
{
320+
CheckDlgButton(IDC_EXPLORER_COMPARE_AS, FALSE);
321+
m_bContextCompareAs = false;
294322
}
295323
}
296324

@@ -309,6 +337,8 @@ void PropShell::UpdateButtons()
309337
EnableDlgItem(IDC_UNREGISTER_WINMERGECONTEXTMENU, registerdWinMergeContextMenu && win11);
310338
EnableDlgItem(IDC_EXPLORER_ADVANCED,
311339
(registered || registeredPerUser || registerdWinMergeContextMenu) && IsDlgButtonChecked(IDC_EXPLORER_CONTEXT));
340+
EnableDlgItem(IDC_EXPLORER_COMPARE_AS,
341+
(registered || registeredPerUser || registerdWinMergeContextMenu) && IsDlgButtonChecked(IDC_EXPLORER_ADVANCED));
312342
}
313343

314344
void PropShell::OnRegisterShellExtension()

Src/PropShell.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ class PropShell : public OptionsPanel
2525
enum { IDD = IDD_PROPPAGE_SHELL };
2626
bool m_bContextAdded;
2727
bool m_bContextAdvanced;
28+
bool m_bContextCompareAs;
2829

2930
// Overrides
3031
protected:
@@ -34,6 +35,7 @@ class PropShell : public OptionsPanel
3435
protected:
3536
virtual BOOL OnInitDialog() override;
3637
afx_msg void OnAddToExplorer();
38+
afx_msg void OnAddToExplorerAdvanced();
3739
afx_msg void OnRegisterShellExtension();
3840
afx_msg void OnUnregisterShellExtension();
3941
afx_msg void OnRegisterShellExtensionPerUser();
@@ -44,6 +46,7 @@ class PropShell : public OptionsPanel
4446

4547
void GetContextRegValues();
4648
void AdvancedContextMenuCheck();
49+
void CompareAsContextMenuCheck();
4750
void UpdateButtons();
4851

4952
DECLARE_MESSAGE_MAP()

Src/resource.h

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -235,18 +235,19 @@
235235
#define IDC_SEL_DIFFERENCE_TEXT_COLOR 1048
236236
#define IDC_EXPLORER_CONTEXT 1049
237237
#define IDC_EXPLORER_ADVANCED 1050
238-
#define IDC_TRIVIAL_DIFF_USE_TEXT_COLOR 1051
239-
#define IDC_TRIVIAL_DIFF_TEXT_COLOR 1052
240-
#define IDC_MOVEDBLOCK_COLOR 1053
241-
#define IDC_MOVEDBLOCK_USE_TEXT_COLOR 1054
242-
#define IDC_MOVEDBLOCK_TEXT_COLOR 1055
243-
#define IDC_MOVEDBLOCK_DELETED_COLOR 1056
244-
#define IDC_SEL_MOVEDBLOCK_COLOR 1057
245-
#define IDC_SEL_MOVEDBLOCK_USE_TEXT_COLOR 1058
246-
#define IDC_SEL_MOVEDBLOCK_TEXT_COLOR 1059
247-
#define IDC_SEL_MOVEDBLOCK_DELETED_COLOR 1060
248-
#define IDC_UP 1061
249-
#define IDC_DOWN 1062
238+
#define IDC_EXPLORER_COMPARE_AS 1051
239+
#define IDC_TRIVIAL_DIFF_USE_TEXT_COLOR 1052
240+
#define IDC_TRIVIAL_DIFF_TEXT_COLOR 1053
241+
#define IDC_MOVEDBLOCK_COLOR 1054
242+
#define IDC_MOVEDBLOCK_USE_TEXT_COLOR 1055
243+
#define IDC_MOVEDBLOCK_TEXT_COLOR 1056
244+
#define IDC_MOVEDBLOCK_DELETED_COLOR 1057
245+
#define IDC_SEL_MOVEDBLOCK_COLOR 1058
246+
#define IDC_SEL_MOVEDBLOCK_USE_TEXT_COLOR 1059
247+
#define IDC_SEL_MOVEDBLOCK_TEXT_COLOR 1060
248+
#define IDC_SEL_MOVEDBLOCK_DELETED_COLOR 1061
249+
#define IDC_UP 1062
250+
#define IDC_DOWN 1063
250251
#define IDC_MIXED_EOL 1064
251252
#define IDC_DIFF_FILE1 1065
252253
#define IDC_DIFF_FILE2 1066

0 commit comments

Comments
 (0)