From 27fe3d475f48a9d591b05f709aa03ed1ea360020 Mon Sep 17 00:00:00 2001 From: Giannis Adamopoulos Date: Mon, 23 Oct 2017 18:56:57 +0300 Subject: [PATCH] [ACPPAGE] Convert CLayerUIPropPage to use CPropertyPageImpl --- dll/shellext/acppage/CLayerUIPropPage.cpp | 192 +++++++--------------- dll/shellext/acppage/CLayerUIPropPage.hpp | 47 +++++- dll/shellext/acppage/precomp.h | 2 + 3 files changed, 97 insertions(+), 144 deletions(-) diff --git a/dll/shellext/acppage/CLayerUIPropPage.cpp b/dll/shellext/acppage/CLayerUIPropPage.cpp index 10739ddd78a..a923281a55a 100644 --- a/dll/shellext/acppage/CLayerUIPropPage.cpp +++ b/dll/shellext/acppage/CLayerUIPropPage.cpp @@ -226,24 +226,26 @@ static BOOL GetLayerInfo(PCWSTR Filename, DWORD QueryFlags, PDWORD OSMode, PDWOR return TRUE; } -void CLayerUIPropPage::OnRefresh(HWND hWnd) +int CLayerUIPropPage::OnSetActive() { if (!GetLayerInfo(m_Filename, m_LayerQueryFlags, &m_RegistryOSMode, &m_RegistryEnabledLayers, m_RegistryCustomLayers)) m_RegistryOSMode = m_RegistryEnabledLayers = 0; for (size_t n = 0; g_Layers[n].Name; ++n) - CheckDlgButton(hWnd, g_Layers[n].Id, (m_RegistryEnabledLayers & (1<lParam; - SetProp(hWnd, ACP_WNDPROP, page); - return page->InitDialog(hWnd); - - case WM_ENDSESSION: - case WM_DESTROY: - page = (CLayerUIPropPage*)GetProp(hWnd, ACP_WNDPROP); - RemoveProp(hWnd, ACP_WNDPROP); - page->Release(); - break; - - case WM_COMMAND: - page = (CLayerUIPropPage*)GetProp(hWnd, ACP_WNDPROP); - return page->OnCommand(hWnd, LOWORD(wParam)); - case WM_NOTIFY: - switch (((LPNMHDR)lParam)->code) - { - case PSN_SETACTIVE: - if (((LPNMHDR)lParam)->hwndFrom == GetParent(hWnd)) - { - page = (CLayerUIPropPage*)GetProp(hWnd, ACP_WNDPROP); - page->OnRefresh(hWnd); - } - break; - case PSN_APPLY: - if (((LPNMHDR)lParam)->hwndFrom == GetParent(hWnd)) - { - page = (CLayerUIPropPage*)GetProp(hWnd, ACP_WNDPROP); - page->OnApply(hWnd); - } - break; - case NM_CLICK: - case NM_RETURN: - if (((LPNMHDR)lParam)->idFrom == IDC_INFOLINK) - { - ShellExecute(NULL, L"open", L"https://www.reactos.org/forum/viewforum.php?f=4", NULL, NULL, SW_SHOW); - } - break; - default: - break; - } - break; - } - - return FALSE; +LRESULT CLayerUIPropPage::OnClickNotify(INT uCode, LPNMHDR hdr, BOOL& bHandled) +{ + if (hdr->idFrom == IDC_INFOLINK) + ShellExecute(NULL, L"open", L"https://www.reactos.org/forum/viewforum.php?f=4", NULL, NULL, SW_SHOW); + return 0; } static void ListboxChanged(HWND hWnd) @@ -487,9 +425,9 @@ INT_PTR CALLBACK CLayerUIPropPage::EditModesProc(HWND hWnd, UINT uMsg, WPARAM wP case WM_INITDIALOG: page = (CLayerUIPropPage*)lParam; page->AddRef(); - SetProp(hWnd, ACP_WNDPROP, page); + ::SetProp(hWnd, ACP_WNDPROP, page); { - HWND Combo = GetDlgItem(hWnd, IDC_NEWCOMPATIBILITYMODE); + HWND Combo = ::GetDlgItem(hWnd, IDC_NEWCOMPATIBILITYMODE); CComObject pList; while (TRUE) @@ -501,7 +439,7 @@ INT_PTR CALLBACK CLayerUIPropPage::EditModesProc(HWND hWnd, UINT uMsg, WPARAM wP ComboBox_AddString(Combo, str); } - HWND List = GetDlgItem(hWnd, IDC_COMPATIBILITYMODE); + HWND List = ::GetDlgItem(hWnd, IDC_COMPATIBILITYMODE); for (int n = 0; n < page->m_CustomLayers.GetSize(); ++n) { const WCHAR* Str = page->m_CustomLayers[n].GetString(); @@ -513,8 +451,8 @@ INT_PTR CALLBACK CLayerUIPropPage::EditModesProc(HWND hWnd, UINT uMsg, WPARAM wP break; case WM_ENDSESSION: case WM_DESTROY: - page = (CLayerUIPropPage*)GetProp(hWnd, ACP_WNDPROP); - RemoveProp(hWnd, ACP_WNDPROP); + page = (CLayerUIPropPage*)::GetProp(hWnd, ACP_WNDPROP); + ::RemoveProp(hWnd, ACP_WNDPROP); page->Release(); break; @@ -526,23 +464,23 @@ INT_PTR CALLBACK CLayerUIPropPage::EditModesProc(HWND hWnd, UINT uMsg, WPARAM wP break; case IDC_EDIT: { - HWND List = GetDlgItem(hWnd, IDC_COMPATIBILITYMODE); + HWND List = ::GetDlgItem(hWnd, IDC_COMPATIBILITYMODE); int Cur = ListBox_GetCurSel(List); int Length = ListBox_GetTextLen(List, Cur); CComBSTR Str(Length); ListBox_GetText(List, Cur, Str); ListBox_DeleteString(List, Cur); - HWND Combo = GetDlgItem(hWnd, IDC_NEWCOMPATIBILITYMODE); + HWND Combo = ::GetDlgItem(hWnd, IDC_NEWCOMPATIBILITYMODE); ComboBox_SetCurSel(Combo, -1); - ComboBox_SetText(Combo, Str); + ::SetWindowText(Combo,Str); ListboxChanged(hWnd); ComboBox_SetEditSel(Combo, 30000, 30000); - SetFocus(Combo); + ::SetFocus(Combo); } break; case IDC_DELETE: { - HWND List = GetDlgItem(hWnd, IDC_COMPATIBILITYMODE); + HWND List = ::GetDlgItem(hWnd, IDC_COMPATIBILITYMODE); ListBox_DeleteString(List, ListBox_GetCurSel(List)); ListboxChanged(hWnd); } @@ -552,7 +490,7 @@ INT_PTR CALLBACK CLayerUIPropPage::EditModesProc(HWND hWnd, UINT uMsg, WPARAM wP break; case IDC_NEWCOMPATIBILITYMODE: { - EnableWindow(GetDlgItem(hWnd, IDC_ADD), ComboHasData(hWnd)); + ::EnableWindow(::GetDlgItem(hWnd, IDC_ADD), ComboHasData(hWnd)); } break; case IDOK: @@ -563,7 +501,7 @@ INT_PTR CALLBACK CLayerUIPropPage::EditModesProc(HWND hWnd, UINT uMsg, WPARAM wP CComBSTR question, title; title.LoadString(g_hModule, IDS_TABTITLE); question.LoadString(g_hModule, IDS_YOU_DID_NOT_ADD); - int result = MessageBoxW(hWnd, question, title, MB_YESNOCANCEL | MB_ICONQUESTION); + int result = ::MessageBoxW(hWnd, question, title, MB_YESNOCANCEL | MB_ICONQUESTION); switch (result) { case IDYES: @@ -576,9 +514,9 @@ INT_PTR CALLBACK CLayerUIPropPage::EditModesProc(HWND hWnd, UINT uMsg, WPARAM wP } } - page = (CLayerUIPropPage*)GetProp(hWnd, ACP_WNDPROP); + page = (CLayerUIPropPage*)::GetProp(hWnd, ACP_WNDPROP); - HWND List = GetDlgItem(hWnd, IDC_COMPATIBILITYMODE); + HWND List = ::GetDlgItem(hWnd, IDC_COMPATIBILITYMODE); int Count = ListBox_GetCount(List); page->m_CustomLayers.RemoveAll(); for (int Cur = 0; Cur < Count; ++Cur) @@ -593,12 +531,12 @@ INT_PTR CALLBACK CLayerUIPropPage::EditModesProc(HWND hWnd, UINT uMsg, WPARAM wP } /* Fall trough */ case IDCANCEL: - EndDialog(hWnd, LOWORD(wParam)); + ::EndDialog(hWnd, LOWORD(wParam)); break; } break; case WM_CLOSE: - EndDialog(hWnd, IDCANCEL); + ::EndDialog(hWnd, IDCANCEL); break; } return FALSE; @@ -678,21 +616,3 @@ STDMETHODIMP CLayerUIPropPage::Initialize(LPCITEMIDLIST pidlFolder, LPDATAOBJECT ReleaseStgMedium(&stg); return hr; } - -STDMETHODIMP CLayerUIPropPage::AddPages(LPFNADDPROPSHEETPAGE pfnAddPage, LPARAM lParam) -{ - PROPSHEETPAGEW psp = { 0 }; - psp.dwSize = sizeof(psp); - psp.dwFlags = PSP_USEREFPARENT | PSP_USETITLE; - psp.hInstance = g_hModule; - psp.pszTemplate = MAKEINTRESOURCE(IDD_ACPPAGESHEET); - psp.pszTitle = MAKEINTRESOURCE(IDS_TABTITLE); - psp.pfnDlgProc = PropDlgProc; - psp.lParam = (LPARAM)this; - psp.pcRefParent = (PUINT)&g_ModuleRefCnt; - HPROPSHEETPAGE hPage = CreatePropertySheetPageW(&psp); - if (hPage && !pfnAddPage(hPage, lParam)) - DestroyPropertySheetPage(hPage); - - return S_OK; -} diff --git a/dll/shellext/acppage/CLayerUIPropPage.hpp b/dll/shellext/acppage/CLayerUIPropPage.hpp index 8b9cce879d1..ac4886d33a7 100644 --- a/dll/shellext/acppage/CLayerUIPropPage.hpp +++ b/dll/shellext/acppage/CLayerUIPropPage.hpp @@ -6,6 +6,7 @@ */ class CLayerUIPropPage : + public CPropertyPageImpl, public CComCoClass, public CComObjectRootEx, public IShellExtInit, @@ -20,26 +21,45 @@ public: // IShellPropSheetExt - STDMETHODIMP AddPages(LPFNADDPROPSHEETPAGE pfnAddPage, LPARAM lParam); + STDMETHODIMP AddPages(LPFNADDPROPSHEETPAGE pfnAddPage, LPARAM lParam) + { + HPROPSHEETPAGE hPage = Create(); + if (hPage && !pfnAddPage(hPage, lParam)) + DestroyPropertySheetPage(hPage); + + return S_OK; + } + STDMETHODIMP ReplacePage(UINT, LPFNADDPROPSHEETPAGE, LPARAM) { return E_NOTIMPL; } + VOID OnPageAddRef() + { + InterlockedIncrement(&g_ModuleRefCnt); + } + + VOID OnPageRelease() + { + InterlockedDecrement(&g_ModuleRefCnt); + } + HRESULT InitFile(PCWSTR Filename); - INT_PTR InitDialog(HWND hWnd); - INT_PTR OnCommand(HWND hWnd, WORD id); - void UpdateControls(HWND hWnd); - INT_PTR DisableControls(HWND hWnd); + void UpdateControls(); + INT_PTR DisableControls(); BOOL HasChanges() const; - void OnRefresh(HWND hWnd); - void OnApply(HWND hWnd); + int OnSetActive(); + int OnApply(); + LRESULT OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled); + LRESULT OnCtrlCommand(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled); + LRESULT OnEditModes(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled); + LRESULT OnClickNotify(INT uCode, LPNMHDR hdr, BOOL& bHandled); static INT_PTR CALLBACK PropDlgProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam); static INT_PTR CALLBACK EditModesProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam); - protected: CString m_Filename; BOOL m_IsSfcProtected; @@ -50,6 +70,17 @@ protected: CSimpleArray m_RegistryCustomLayers, m_CustomLayers; public: + enum { IDD = IDD_ACPPAGESHEET }; + + BEGIN_MSG_MAP(CLayerUIPropPage) + MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog) + COMMAND_RANGE_HANDLER(IDC_CHKRUNCOMPATIBILITY, IDC_CHKDISABLEVISUALTHEMES, OnCtrlCommand) + COMMAND_ID_HANDLER(IDC_EDITCOMPATIBILITYMODES, OnEditModes) + NOTIFY_CODE_HANDLER(NM_CLICK, OnClickNotify) + NOTIFY_CODE_HANDLER(NM_RETURN, OnClickNotify) + CHAIN_MSG_MAP(CPropertyPageImpl) + END_MSG_MAP() + DECLARE_REGISTRY_RESOURCEID(IDR_ACPPAGE) DECLARE_NOT_AGGREGATABLE(CLayerUIPropPage) diff --git a/dll/shellext/acppage/precomp.h b/dll/shellext/acppage/precomp.h index 967564810a5..21dd0c159c6 100644 --- a/dll/shellext/acppage/precomp.h +++ b/dll/shellext/acppage/precomp.h @@ -16,6 +16,8 @@ #include #include #include +#include +#include ULONG DbgPrint(PCH Format,...); #include