From: Giannis Adamopoulos Date: Mon, 1 May 2017 13:43:22 +0000 (+0000) Subject: [BROWSEUI] Don't leak the image lists created by CAddressBand and CToolsBand. X-Git-Tag: ReactOS-0.4.6~793 X-Git-Url: https://git.reactos.org/?p=reactos.git;a=commitdiff_plain;h=cb488db9b7ec0ce9703a8d65d050a9c3804dfb90 [BROWSEUI] Don't leak the image lists created by CAddressBand and CToolsBand. svn path=/trunk/; revision=74441 --- diff --git a/reactos/dll/win32/browseui/addressband.cpp b/reactos/dll/win32/browseui/addressband.cpp index 3cc67e02d1c..618ad24df55 100644 --- a/reactos/dll/win32/browseui/addressband.cpp +++ b/reactos/dll/win32/browseui/addressband.cpp @@ -205,6 +205,12 @@ HRESULT STDMETHODCALLTYPE CAddressBand::CloseDW(DWORD dwReserved) if (fAddressEditBox) fAddressEditBox.Release(); if (fSite) fSite.Release(); + if (m_himlNormal) + ImageList_Destroy(m_himlNormal); + + if (m_himlHot) + ImageList_Destroy(m_himlHot); + return S_OK; } @@ -521,15 +527,12 @@ LRESULT CAddressBand::OnWindowPosChanging(UINT uMsg, WPARAM wParam, LPARAM lPara void CAddressBand::CreateGoButton() { const TBBUTTON buttonInfo [] = { { 0, 1, TBSTATE_ENABLED, 0 } }; - HIMAGELIST normalImagelist; - HIMAGELIST hotImageList; HINSTANCE shellInstance; - shellInstance = GetModuleHandle(_T("shell32.dll")); - normalImagelist = ImageList_LoadImageW(shellInstance, MAKEINTRESOURCE(IDB_GOBUTTON_NORMAL), + m_himlNormal = ImageList_LoadImageW(shellInstance, MAKEINTRESOURCE(IDB_GOBUTTON_NORMAL), 20, 0, RGB(255, 0, 255), IMAGE_BITMAP, LR_CREATEDIBSECTION); - hotImageList = ImageList_LoadImageW(shellInstance, MAKEINTRESOURCE(IDB_GOBUTTON_HOT), + m_himlHot = ImageList_LoadImageW(shellInstance, MAKEINTRESOURCE(IDB_GOBUTTON_HOT), 20, 0, RGB(255, 0, 255), IMAGE_BITMAP, LR_CREATEDIBSECTION); fGoButton = CreateWindowEx(WS_EX_TOOLWINDOW, TOOLBARCLASSNAMEW, 0, WS_CHILD | WS_CLIPSIBLINGS | @@ -538,10 +541,10 @@ void CAddressBand::CreateGoButton() 0, 0, 0, 0, m_hWnd, NULL, _AtlBaseModule.GetModuleInstance(), NULL); SendMessage(fGoButton, TB_BUTTONSTRUCTSIZE, sizeof(TBBUTTON), 0); SendMessage(fGoButton, TB_SETMAXTEXTROWS, 1, 0); - if (normalImagelist) - SendMessage(fGoButton, TB_SETIMAGELIST, 0, reinterpret_cast(normalImagelist)); - if (hotImageList) - SendMessage(fGoButton, TB_SETHOTIMAGELIST, 0, reinterpret_cast(hotImageList)); + if (m_himlNormal) + SendMessage(fGoButton, TB_SETIMAGELIST, 0, reinterpret_cast(m_himlNormal)); + if (m_himlHot) + SendMessage(fGoButton, TB_SETHOTIMAGELIST, 0, reinterpret_cast(m_himlHot)); SendMessage(fGoButton, TB_ADDSTRINGW, reinterpret_cast(_AtlBaseModule.GetResourceInstance()), IDS_GOBUTTONLABEL); SendMessage(fGoButton, TB_ADDBUTTONSW, 1, (LPARAM) &buttonInfo); diff --git a/reactos/dll/win32/browseui/addressband.h b/reactos/dll/win32/browseui/addressband.h index 33b6d9a2bdc..5d345bcb140 100644 --- a/reactos/dll/win32/browseui/addressband.h +++ b/reactos/dll/win32/browseui/addressband.h @@ -41,6 +41,9 @@ private: HWND fGoButton; HWND fComboBox; bool fGoButtonShown; + HIMAGELIST m_himlNormal; + HIMAGELIST m_himlHot; + public: CAddressBand(); virtual ~CAddressBand(); diff --git a/reactos/dll/win32/browseui/toolsband.cpp b/reactos/dll/win32/browseui/toolsband.cpp index 5318f3ad581..3c58ab66d2e 100644 --- a/reactos/dll/win32/browseui/toolsband.cpp +++ b/reactos/dll/win32/browseui/toolsband.cpp @@ -40,6 +40,8 @@ private: CComPtr fDockSite; GUID fExecCommandCategory; CComPtr fExecCommandTarget; + HIMAGELIST m_himlNormal; + HIMAGELIST m_himlHot; public: CToolsBand(); virtual ~CToolsBand(); @@ -294,36 +296,16 @@ HRESULT STDMETHODCALLTYPE CToolsBand::SetSite(IUnknown* pUnkSite){ SendMessage(TB_SETEXTENDEDSTYLE, 0, TBSTYLE_EX_HIDECLIPPEDBUTTONS | TBSTYLE_EX_MIXEDBUTTONS | TBSTYLE_EX_DRAWDDARROWS); HINSTANCE shell32Instance = GetModuleHandle(_T("shell32.dll")); - HBITMAP imgNormal = reinterpret_cast( - LoadImage(shell32Instance, MAKEINTRESOURCE(214), - IMAGE_BITMAP, 0, 0, LR_DEFAULTSIZE | LR_CREATEDIBSECTION)); + m_himlNormal = ImageList_LoadImageW(shell32Instance, MAKEINTRESOURCE(214), + 0, 0, RGB(255, 0, 255), IMAGE_BITMAP, LR_DEFAULTSIZE | LR_CREATEDIBSECTION); - HBITMAP imgHot = reinterpret_cast( - LoadImage(shell32Instance, MAKEINTRESOURCE(215), - IMAGE_BITMAP, 0, 0, LR_DEFAULTSIZE | LR_CREATEDIBSECTION)); - - if (imgNormal && imgHot) - { - BITMAP bitmapInfo; - GetObjectW(imgNormal, sizeof(bitmapInfo), &bitmapInfo); - HIMAGELIST himlNormal = ImageList_Create(bitmapInfo.bmHeight, bitmapInfo.bmHeight, ILC_COLOR32, 4, 4); - ImageList_Add(himlNormal, imgNormal, NULL); - - GetObjectW(imgHot, sizeof(bitmapInfo), &bitmapInfo); - HIMAGELIST himlHot = ImageList_Create(bitmapInfo.bmHeight, bitmapInfo.bmHeight, ILC_COLOR32, 4, 4); - ImageList_Add(himlHot, imgHot, NULL); - - SendMessage(TB_SETIMAGELIST, 0, (LPARAM) himlNormal); - SendMessage(TB_SETHOTIMAGELIST, 0, (LPARAM) himlHot); - } + m_himlHot = ImageList_LoadImageW(shell32Instance, MAKEINTRESOURCE(215), + 0, 0, RGB(255, 0, 255), IMAGE_BITMAP, LR_DEFAULTSIZE | LR_CREATEDIBSECTION); + SendMessage(TB_SETIMAGELIST, 0, (LPARAM) m_himlNormal); + SendMessage(TB_SETHOTIMAGELIST, 0, (LPARAM) m_himlHot); SendMessage(TB_ADDBUTTONSW, numShownButtons, (LPARAM)&tbButtonsAdd); - if (imgNormal) - DeleteObject(imgNormal); - if (imgHot) - DeleteObject(imgHot); - return hResult; } @@ -344,7 +326,6 @@ HRESULT STDMETHODCALLTYPE CToolsBand::GetWindow(HWND *lphwnd) HRESULT STDMETHODCALLTYPE CToolsBand::ContextSensitiveHelp(BOOL fEnterMode) { - return E_NOTIMPL; } @@ -357,7 +338,14 @@ HRESULT STDMETHODCALLTYPE CToolsBand::CloseDW(DWORD dwReserved) m_hWnd = NULL; - if (fDockSite) fDockSite.Release(); + if (fDockSite) + fDockSite.Release(); + + if (m_himlNormal) + ImageList_Destroy(m_himlNormal); + + if (m_himlHot) + ImageList_Destroy(m_himlHot); return S_OK; }