[CRT] Massively improve performance of rand_s
[reactos.git] / dll / shellext / acppage / CLayerUIPropPage.hpp
1 /*
2 * PROJECT: ReactOS Compatibility Layer Shell Extension
3 * LICENSE: GPL-2.0-or-later (https://spdx.org/licenses/GPL-2.0-or-later)
4 * PURPOSE: CLayerUIPropPage definition
5 * COPYRIGHT: Copyright 2015-2019 Mark Jansen (mark.jansen@reactos.org)
6 */
7
8 #pragma once
9
10 class CLayerUIPropPage :
11 public CPropertyPageImpl<CLayerUIPropPage>,
12 public CComCoClass<CLayerUIPropPage, &CLSID_CLayerUIPropPage>,
13 public CComObjectRootEx<CComMultiThreadModelNoCS>,
14 public IShellExtInit,
15 public IShellPropSheetExt
16 {
17 public:
18 CSimpleArray<CString> m_CustomLayers;
19
20 CLayerUIPropPage();
21 ~CLayerUIPropPage();
22
23 // IShellExtInit
24 STDMETHODIMP Initialize(PCIDLIST_ABSOLUTE pidlFolder, LPDATAOBJECT pdtobj, HKEY hkeyProgID);
25
26
27 // IShellPropSheetExt
28 STDMETHODIMP AddPages(LPFNADDPROPSHEETPAGE pfnAddPage, LPARAM lParam)
29 {
30 HPROPSHEETPAGE hPage = Create();
31 if (hPage && !pfnAddPage(hPage, lParam))
32 DestroyPropertySheetPage(hPage);
33
34 return S_OK;
35 }
36
37 STDMETHODIMP ReplacePage(UINT, LPFNADDPROPSHEETPAGE, LPARAM)
38 {
39 return E_NOTIMPL;
40 }
41
42 VOID OnPageAddRef()
43 {
44 InterlockedIncrement(&g_ModuleRefCnt);
45 }
46
47 VOID OnPageRelease()
48 {
49 InterlockedDecrement(&g_ModuleRefCnt);
50 }
51
52 HRESULT InitFile(PCWSTR Filename);
53 void UpdateControls();
54 INT_PTR DisableControls();
55 BOOL HasChanges() const;
56
57 int OnSetActive();
58 int OnApply();
59 LRESULT OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled);
60 LRESULT OnCtrlCommand(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled);
61 LRESULT OnEditModes(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled);
62 LRESULT OnClickNotify(INT uCode, LPNMHDR hdr, BOOL& bHandled);
63
64 protected:
65 CString m_Filename;
66 BOOL m_IsSfcProtected;
67 BOOL m_AllowPermLayer;
68 DWORD m_LayerQueryFlags;
69 DWORD m_RegistryOSMode, m_OSMode;
70 DWORD m_RegistryEnabledLayers, m_EnabledLayers;
71 CSimpleArray<CString> m_RegistryCustomLayers;
72
73 public:
74 enum { IDD = IDD_ACPPAGESHEET };
75
76 BEGIN_MSG_MAP(CLayerUIPropPage)
77 MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog)
78 COMMAND_RANGE_HANDLER(IDC_CHKRUNCOMPATIBILITY, IDC_CHKDISABLEVISUALTHEMES, OnCtrlCommand)
79 COMMAND_ID_HANDLER(IDC_EDITCOMPATIBILITYMODES, OnEditModes)
80 NOTIFY_CODE_HANDLER(NM_CLICK, OnClickNotify)
81 NOTIFY_CODE_HANDLER(NM_RETURN, OnClickNotify)
82 CHAIN_MSG_MAP(CPropertyPageImpl<CLayerUIPropPage>)
83 END_MSG_MAP()
84
85 DECLARE_REGISTRY_RESOURCEID(IDR_ACPPAGE)
86 DECLARE_NOT_AGGREGATABLE(CLayerUIPropPage)
87
88 DECLARE_PROTECT_FINAL_CONSTRUCT()
89
90 BEGIN_COM_MAP(CLayerUIPropPage)
91 COM_INTERFACE_ENTRY_IID(IID_IShellExtInit, IShellExtInit)
92 COM_INTERFACE_ENTRY_IID(IID_IShellPropSheetExt, IShellPropSheetExt)
93 END_COM_MAP()
94 };