void CWinMain::SetQuickMenu(HMENU hMenu) { COption clOption; SOption& stOption = clOption.GetOpt(); struct SQuickSet { LPBOOL pbOption; int nID; } stQuickSet[] = { {&stOption.bHighSearchOgg, IDM_QUICKSET_STD_SEARCHOGG}, {&stOption.bCreateFolder, IDM_QUICKSET_EXTRACT_CREATEFOLDER}, {&stOption.bFixOgg, IDM_QUICKSET_EXTRACT_FIXOGG}, {&stOption.bEasyDecrypt, IDM_QUICKSET_EXTRACT_EASYDECRYPT}, {&stOption.bDstPNG, IDM_QUICKSET_EXTRACT_DSTPNG}, {&stOption.bAlphaBlend, IDM_QUICKSET_EXTRACT_ALPHABLEND}, {&stOption.bSusieUse, IDM_QUICKSET_SUSIE_USE}, {&stOption.bSusieFirst, IDM_QUICKSET_SUSIE_FIRST} }; for (int i = 0; i < ARRAYSIZE(stQuickSet); i++) { UINT uCheck = MF_BYCOMMAND | (*stQuickSet[i].pbOption == TRUE) ? MF_CHECKED : MF_UNCHECKED; CheckMenuItem(hMenu, stQuickSet[i].nID, uCheck); } }
void CWinMain::SetQuickMenuItem(int nID) { COption clOption; SOption& stOption = clOption.GetOpt(); struct SQuickSet { LPBOOL pbOption; int nID; } stQuickSet[] = { {&stOption.bHighSearchOgg, IDM_QUICKSET_STD_SEARCHOGG}, {&stOption.bCreateFolder, IDM_QUICKSET_EXTRACT_CREATEFOLDER}, {&stOption.bFixOgg, IDM_QUICKSET_EXTRACT_FIXOGG}, {&stOption.bEasyDecrypt, IDM_QUICKSET_EXTRACT_EASYDECRYPT}, {&stOption.bDstPNG, IDM_QUICKSET_EXTRACT_DSTPNG}, {&stOption.bAlphaBlend, IDM_QUICKSET_EXTRACT_ALPHABLEND}, {&stOption.bSusieUse, IDM_QUICKSET_SUSIE_USE}, {&stOption.bSusieFirst, IDM_QUICKSET_SUSIE_FIRST} }; for (int i = 0; i < ARRAYSIZE(stQuickSet); i++) { if (stQuickSet[i].nID == nID) *stQuickSet[i].pbOption ^= 1; } if (nID == IDM_QUICKSET_EXTRACT_DSTPNG) { // Extract images as PNG or BMP depending on setting stOption.bDstBMP ^= 1; } else if (nID == IDM_QUICKSET_SUSIE_USE && stOption.bSusieUse == TRUE) { // Load Susie Plug-ins CSusie clSusie; clSusie.LoadSpi(stOption.SusieDir); } clOption.SaveIni(); }
// Window Procedure LRESULT CWinMain::WndProc(HWND window, UINT msg, WPARAM wp, LPARAM lp) { static CMainToolBar main_tool_bar; static CSearchToolBar search_tool_bar; static CMainListView list_view; static CStatusBar status_bar; static CExtractData extract; static COption option; static CVersionInfo version; static CLastDir last_dir; static TCHAR readme_file_name[MAX_PATH]; static TCHAR history_file_name[MAX_PATH]; static TCHAR state_file_name[MAX_PATH]; INITCOMMONCONTROLSEX ic; switch (msg) { case WM_CREATE: { // Allow D&D (Drag & Drop) DragAcceptFiles(window, TRUE); option.Init(search_tool_bar, list_view); // Initialization of the common installation configuration ic.dwSize = sizeof(INITCOMMONCONTROLSEX); ic.dwICC = ICC_WIN95_CLASSES; InitCommonControlsEx(&ic); // Create main toolbar main_tool_bar.Create(window); search_tool_bar.Create(window); // Create list view list_view.Create(window, option.GetOpt()); // Create status bar status_bar.Create(window, option.GetOpt(), list_view); // Get full path TCHAR ModulePath[MAX_PATH]; GetModuleFileName(nullptr, ModulePath, MAX_PATH); PathRemoveFileSpec(ModulePath); // Retrieves full path of the location of Readme.txt lstrcpy(readme_file_name, ModulePath); PathAppend(readme_file_name, _T("Readme.txt")); // Retrieves full path of the location of History.txt lstrcpy(history_file_name, ModulePath); PathAppend(history_file_name, _T("History.txt")); // Retrieves full path of the location of State.txt lstrcpy(state_file_name, ModulePath); PathAppend(state_file_name, _T("State.txt")); extract.Init(window, option.GetOpt(), list_view); break; } case WM_DROPFILES: extract.OpenDrop(wp); main_tool_bar.AddOpenHistory(extract.GetArcList()); status_bar.SetCount(); break; case WM_COMMAND: switch (LOWORD(wp)) { case IDM_OPEN: // Open a file to load extract.Open(last_dir.GetOpen()); main_tool_bar.AddOpenHistory(extract.GetArcList()); status_bar.SetCount(); last_dir.SaveIni(); break; case IDM_CLOSE: // Close the opened file extract.Close(); status_bar.SetCount(); break; // Open a file from history case ID_TOOLBAR_OPEN_HISTORY: case ID_TOOLBAR_OPEN_HISTORY+1: case ID_TOOLBAR_OPEN_HISTORY+2: case ID_TOOLBAR_OPEN_HISTORY+3: case ID_TOOLBAR_OPEN_HISTORY+4: case ID_TOOLBAR_OPEN_HISTORY+5: case ID_TOOLBAR_OPEN_HISTORY+6: case ID_TOOLBAR_OPEN_HISTORY+7: case ID_TOOLBAR_OPEN_HISTORY+8: case ID_TOOLBAR_OPEN_HISTORY+9: extract.OpenHistory(main_tool_bar.GetHistory()[LOWORD(wp)-ID_TOOLBAR_OPEN_HISTORY]); main_tool_bar.AddOpenHistory(extract.GetArcList()); status_bar.SetCount(); break; // Search button configuration file case IDM_AHX: case IDM_BMP: case IDM_JPG: case IDM_MID: case IDM_MPG: case IDM_OGG: case IDM_PNG: case IDM_WAV: case IDM_WMV: search_tool_bar.SetSearch(LOWORD(wp)); break; // Quick settings case IDM_QUICKSET_STD_SEARCHOGG: case IDM_QUICKSET_EXTRACT_CREATEFOLDER: case IDM_QUICKSET_EXTRACT_FIXOGG: case IDM_QUICKSET_EXTRACT_EASYDECRYPT: case IDM_QUICKSET_EXTRACT_DSTPNG: case IDM_QUICKSET_EXTRACT_ALPHABLEND: case IDM_QUICKSET_SUSIE_USE: case IDM_QUICKSET_SUSIE_FIRST: SetQuickMenuItem(LOWORD(wp)); break; case IDM_EXIT: // Exit SendMessage(window, WM_CLOSE, 0, 0); break; case IDM_EXTRACT: // Extract the selected range if (list_view.GetCountSel() > 0) { extract.SaveSel(last_dir.GetSave(), true); } last_dir.SaveIni(); break; case IDM_EXTRACTALL: // Extract all if( list_view.GetCount() > 0 ) { extract.SaveAll(last_dir.GetSave(), true); } last_dir.SaveIni(); break; case IDM_EXTRACT_NOTCONVERT: // Extracts the selection without converting it if (list_view.GetCountSel() > 0) { extract.SaveSel(last_dir.GetSave(), false); } last_dir.SaveIni(); break; case IDM_EXTRACTALL_NOTCONVERT: // Extracts all without conversion if (list_view.GetCount() > 0) { extract.SaveAll(last_dir.GetSave(), false); } last_dir.SaveIni(); break; case IDM_SELECTALL: // Select all list_view.SetItemSelAll(LVIS_SELECTED); break; case IDM_OPTION: // Options option.DoModal(window); break; case IDM_README: // Open Readme.txt ShellExecute(nullptr, _T("open"), readme_file_name, nullptr, nullptr, SW_SHOWNORMAL); break; case IDM_HISTORY: // Open History.txt ShellExecute(nullptr, _T("open"), history_file_name, nullptr, nullptr, SW_SHOWNORMAL); break; case IDM_STATE: // Open State.txt ShellExecute(nullptr, _T("open"), state_file_name, nullptr, nullptr, SW_SHOWNORMAL); break; case IDM_VERSION: // Version info version.DoModal(window); break; } break; // Right-click Menu case WM_CONTEXTMENU: CreateMenu(lp); break; case WM_MOUSEWHEEL: { POINT pos; GetCursorPos(&pos); HWND point_window = WindowFromPoint(pos); if (point_window == list_view.GetHandle()) SendMessage(point_window, WM_MOUSEWHEEL, wp, lp); break; } case WM_NOTIFY: { // Toolbar if (wp == ID_TOOLBAR) { LPNMTOOLBAR nm = reinterpret_cast<LPNMTOOLBAR>(lp); switch (nm->hdr.code) { // File History case TBN_DROPDOWN: main_tool_bar.CreateMenuHistory(nm->iItem); break; } } // List view if (wp == idsMainList) { LPNMLISTVIEW nm = reinterpret_cast<LPNMLISTVIEW>(lp); switch (nm->hdr.code) { // Sort case LVN_COLUMNCLICK: list_view.Sort(nm->iSubItem); break; // Show Tooltips case LVN_GETINFOTIP: list_view.ShowTip(reinterpret_cast<LPNMLVGETINFOTIP>(lp)); break; // View case LVN_GETDISPINFO: list_view.Show(reinterpret_cast<NMLVDISPINFO*>(lp)); break; // D&D (Drag & Drop) case LVN_BEGINDRAG: { //extract.SaveDrop(); LRESULT result; list_view.OnBeginDrag(reinterpret_cast<NMHDR*>(lp), &result); break; } // Playback / Viewing by double-clicking case NM_DBLCLK: if (list_view.GetCountSel() > 0) { extract.DecodeTmp(); extract.OpenRelate(); } break; } } break; } case WM_SIZE: main_tool_bar.SetWindowPos(0, 0, 100, 26); search_tool_bar.SetWindowPos(100, 0, LOWORD(lp), 26); list_view.SetWindowPos(0, 28, LOWORD(lp), HIWORD(lp) - 48); status_bar.SetWindowPos(LOWORD(lp)); break; case WM_CLOSE: // Save SaveIni(); list_view.SaveIni(); // Clean up extract.Close(); DestroyWindow(window); break; case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc(window, msg, wp, lp); } return 0; }