BOOL APIENTRY DllMain(HANDLE hModule, DWORD reasonForCall, LPVOID /*lpReserved*/) { g_hModule = hModule; switch (reasonForCall) { case DLL_PROCESS_ATTACH: { funcItem[CMD_COMPARE]._pFunc = compare; lstrcpy(funcItem[CMD_COMPARE]._itemName, TEXT("Compare")); funcItem[CMD_COMPARE]._pShKey = new ShortcutKey; funcItem[CMD_COMPARE]._pShKey->_isAlt = true; funcItem[CMD_COMPARE]._pShKey->_isCtrl = false; funcItem[CMD_COMPARE]._pShKey->_isShift = false; funcItem[CMD_COMPARE]._pShKey->_key = 'D'; funcItem[CMD_COMPARE]._init2Check = false; funcItem[CMD_CLEAR_RESULTS]._pFunc = reset; lstrcpy(funcItem[CMD_CLEAR_RESULTS]._itemName, TEXT("Clear Results")); funcItem[CMD_CLEAR_RESULTS]._pShKey = new ShortcutKey; funcItem[CMD_CLEAR_RESULTS]._pShKey->_isAlt = true; funcItem[CMD_CLEAR_RESULTS]._pShKey->_isCtrl = true; funcItem[CMD_CLEAR_RESULTS]._pShKey->_isShift = false; funcItem[CMD_CLEAR_RESULTS]._pShKey->_key = 'D'; funcItem[CMD_CLEAR_RESULTS]._init2Check = false; funcItem[CMD_SEPARATOR_1]._pFunc = NULL; lstrcpy(funcItem[CMD_SEPARATOR_1]._itemName, TEXT("-----------")); funcItem[CMD_SEPARATOR_1]._pShKey = NULL; funcItem[CMD_COMPARE_LAST_SAVE]._pFunc = compareLocal; lstrcpy(funcItem[CMD_COMPARE_LAST_SAVE]._itemName, TEXT("Compare to last save")); funcItem[CMD_COMPARE_LAST_SAVE]._pShKey = new ShortcutKey; funcItem[CMD_COMPARE_LAST_SAVE]._pShKey->_isAlt = true; funcItem[CMD_COMPARE_LAST_SAVE]._pShKey->_isCtrl = false; funcItem[CMD_COMPARE_LAST_SAVE]._pShKey->_isShift = false; funcItem[CMD_COMPARE_LAST_SAVE]._pShKey->_key = 'S'; funcItem[CMD_COMPARE_LAST_SAVE]._init2Check = false; funcItem[CMD_COMAPRE_SVN_BASE]._pFunc = compareBase; lstrcpy(funcItem[CMD_COMAPRE_SVN_BASE]._itemName, TEXT("Compare against SVN base")); funcItem[CMD_COMAPRE_SVN_BASE]._pShKey = new ShortcutKey; funcItem[CMD_COMAPRE_SVN_BASE]._pShKey->_isAlt = true; funcItem[CMD_COMAPRE_SVN_BASE]._pShKey->_isCtrl = false; funcItem[CMD_COMAPRE_SVN_BASE]._pShKey->_isShift = false; funcItem[CMD_COMAPRE_SVN_BASE]._pShKey->_key = 'B'; funcItem[CMD_COMAPRE_SVN_BASE]._init2Check = false; funcItem[CMD_SEPARATOR_2]._pFunc = NULL; lstrcpy(funcItem[CMD_SEPARATOR_2]._itemName, TEXT("------------")); funcItem[CMD_SEPARATOR_2]._pShKey = NULL; funcItem[CMD_ALIGN_MATCHES]._pFunc = alignMatches; lstrcpy(funcItem[CMD_ALIGN_MATCHES]._itemName, TEXT("Align Matches")); funcItem[CMD_ALIGN_MATCHES]._pShKey = NULL; funcItem[CMD_ALIGN_MATCHES]._init2Check = false; funcItem[CMD_IGNORE_SPACING]._pFunc = includeSpacing; lstrcpy(funcItem[CMD_IGNORE_SPACING]._itemName, TEXT("Ignore Spacing")); funcItem[CMD_IGNORE_SPACING]._pShKey = NULL; funcItem[CMD_IGNORE_SPACING]._init2Check = false; funcItem[CMD_DETECT_MOVES]._pFunc = detectMoves; lstrcpy(funcItem[CMD_DETECT_MOVES]._itemName, TEXT("Detect Moves")); funcItem[CMD_DETECT_MOVES]._pShKey = NULL; funcItem[CMD_DETECT_MOVES]._init2Check = false; funcItem[CMD_USE_NAV_BAR]._pFunc = ViewNavigationBar; lstrcpy(funcItem[CMD_USE_NAV_BAR]._itemName, TEXT("Navigation bar")); funcItem[CMD_USE_NAV_BAR]._pShKey = NULL; funcItem[CMD_USE_NAV_BAR]._init2Check = false; funcItem[CMD_SEPARATOR_3]._pFunc = NULL; lstrcpy(funcItem[CMD_SEPARATOR_3]._itemName, TEXT("-----------")); funcItem[CMD_SEPARATOR_3]._pShKey = NULL; funcItem[CMD_PREV]._pFunc = Prev; lstrcpy(funcItem[CMD_PREV]._itemName, TEXT("Previous")); funcItem[CMD_PREV]._pShKey = new ShortcutKey; funcItem[CMD_PREV]._pShKey->_isAlt = false; funcItem[CMD_PREV]._pShKey->_isCtrl = true; funcItem[CMD_PREV]._pShKey->_isShift = false; funcItem[CMD_PREV]._pShKey->_key = VK_PRIOR; funcItem[CMD_PREV]._init2Check = false; funcItem[CMD_NEXT]._pFunc = Next; lstrcpy(funcItem[CMD_NEXT]._itemName, TEXT("Next")); funcItem[CMD_NEXT]._pShKey = new ShortcutKey; funcItem[CMD_NEXT]._pShKey->_isAlt = false; funcItem[CMD_NEXT]._pShKey->_isCtrl = true; funcItem[CMD_NEXT]._pShKey->_isShift = false; funcItem[CMD_NEXT]._pShKey->_key = VK_NEXT; funcItem[CMD_NEXT]._init2Check = false; funcItem[CMD_FIRST]._pFunc = First; lstrcpy(funcItem[CMD_FIRST]._itemName, TEXT("First")); funcItem[CMD_FIRST]._pShKey = new ShortcutKey; funcItem[CMD_FIRST]._pShKey->_isAlt = false; funcItem[CMD_FIRST]._pShKey->_isCtrl = true; funcItem[CMD_FIRST]._pShKey->_isShift = true; funcItem[CMD_FIRST]._pShKey->_key = VK_PRIOR; funcItem[CMD_FIRST]._init2Check = false; funcItem[CMD_LAST]._pFunc = Last; lstrcpy(funcItem[CMD_LAST]._itemName, TEXT("Last")); funcItem[CMD_LAST]._pShKey = new ShortcutKey; funcItem[CMD_LAST]._pShKey->_isAlt = false; funcItem[CMD_LAST]._pShKey->_isCtrl = true; funcItem[CMD_LAST]._pShKey->_isShift = true; funcItem[CMD_LAST]._pShKey->_key = VK_NEXT; funcItem[CMD_LAST]._init2Check = false; funcItem[CMD_SEPARATOR_4]._pFunc = NULL; lstrcpy(funcItem[CMD_SEPARATOR_4]._itemName, TEXT("-----------")); funcItem[CMD_SEPARATOR_4]._pShKey = NULL; funcItem[CMD_OPTION]._pFunc = openOptionDlg; lstrcpy(funcItem[CMD_OPTION]._itemName, TEXT("Option")); funcItem[CMD_OPTION]._pShKey = NULL; funcItem[CMD_OPTION]._init2Check = false; funcItem[CMD_ABOUT]._pFunc = openAboutDlg; lstrcpy(funcItem[CMD_ABOUT]._itemName, TEXT("About")); funcItem[CMD_ABOUT]._pShKey = NULL; funcItem[CMD_ABOUT]._init2Check = false; for(int i = 0; i < MAXCOMPARE; i++) { compareDocs[i]=-1; } TCHAR nppPath[MAX_PATH]; GetModuleFileName((HMODULE)hModule, nppPath, sizeof(nppPath)); // remove the module name : get plugins directory path PathRemoveFileSpec(nppPath); // cd .. : get npp executable path PathRemoveFileSpec(nppPath); // Make localConf.xml path TCHAR localConfPath[MAX_PATH]; lstrcpy(localConfPath, nppPath); PathAppend(localConfPath, localConfFile); // Test if localConf.xml exist bool isLocal = (PathFileExists(localConfPath) == TRUE); if (isLocal) { lstrcpy(iniFilePath, nppPath); lstrcpy(compareFilePath, nppPath); PathAppend(iniFilePath, TEXT("plugins\\config\\Compare.ini")); } else { ITEMIDLIST *pidl; SHGetSpecialFolderLocation(NULL, CSIDL_APPDATA, &pidl); SHGetPathFromIDList(pidl, iniFilePath); SHGetPathFromIDList(pidl, compareFilePath); PathAppend(iniFilePath, TEXT("Notepad++\\Compare.ini")); } loadSettings(); } break; case DLL_PROCESS_DETACH: if (tbNext.hToolbarBmp) ::DeleteObject(tbNext.hToolbarBmp); if (tbPrev.hToolbarBmp) ::DeleteObject(tbPrev.hToolbarBmp); if (tbFirst.hToolbarBmp) ::DeleteObject(tbFirst.hToolbarBmp); if (tbLast.hToolbarBmp) ::DeleteObject(tbLast.hToolbarBmp); saveSettings(); OptionDlg.destroy(); AboutDlg.destroy(); NavDlg.destroy(); // Don't forget to deallocate your shortcut here delete funcItem[CMD_COMPARE]._pShKey; delete funcItem[CMD_CLEAR_RESULTS]._pShKey; delete funcItem[CMD_COMPARE_LAST_SAVE]._pShKey; delete funcItem[CMD_COMAPRE_SVN_BASE]._pShKey; delete funcItem[CMD_PREV]._pShKey; delete funcItem[CMD_NEXT]._pShKey; delete funcItem[CMD_FIRST]._pShKey; delete funcItem[CMD_LAST]._pShKey; break; case DLL_THREAD_ATTACH: break; case DLL_THREAD_DETACH: break; } return TRUE; }