wxWidgets/include/wx/msw/wrapshl.h
Václav Slavík e37f1a84ce Disable warnings in the standard shlobj.h header with MSVC14
There is nothing we can do about these (harmless) warnings, so just
disable them. Also make sure that the header is included via
wx/msw/wrapshl.h  everywhere.
2016-03-23 14:46:59 +01:00

101 lines
2.4 KiB
C++

///////////////////////////////////////////////////////////////////////////////
// Name: wx/msw/wrapshl.h
// Purpose: wrapper class for stuff from shell32.dll
// Author: Vadim Zeitlin
// Modified by:
// Created: 2004-10-19
// Copyright: (c) 2004 Vadim Zeitlin <vadim@wxwindows.org>
// Licence: wxWindows licence
///////////////////////////////////////////////////////////////////////////////
#ifndef _WX_MSW_WRAPSHL_H_
#define _WX_MSW_WRAPSHL_H_
#include "wx/msw/wrapwin.h"
#ifdef __VISUALC__
// Disable a warning that we can do nothing about: we get it for
// shlobj.h at least from 7.1a Windows kit when using VC14.
#pragma warning(push)
// 'typedef ': ignored on left of '' when no variable is declared
#pragma warning(disable:4091)
#endif
#include <shlobj.h>
#ifdef __VISUALC__
#pragma warning(pop)
#endif
#include "wx/msw/winundef.h"
#include "wx/log.h"
// ----------------------------------------------------------------------------
// wxItemIdList implements RAII on top of ITEMIDLIST
// ----------------------------------------------------------------------------
class wxItemIdList
{
public:
// ctor takes ownership of the item and will free it
wxItemIdList(LPITEMIDLIST pidl)
{
m_pidl = pidl;
}
static void Free(LPITEMIDLIST pidl)
{
if ( pidl )
{
LPMALLOC pMalloc;
SHGetMalloc(&pMalloc);
if ( pMalloc )
{
pMalloc->Free(pidl);
pMalloc->Release();
}
else
{
wxLogLastError(wxT("SHGetMalloc"));
}
}
}
~wxItemIdList()
{
Free(m_pidl);
}
// implicit conversion to LPITEMIDLIST
operator LPITEMIDLIST() const { return m_pidl; }
// get the corresponding path, returns empty string on error
wxString GetPath() const
{
wxString path;
if ( !SHGetPathFromIDList(m_pidl, wxStringBuffer(path, MAX_PATH)) )
{
wxLogLastError(wxT("SHGetPathFromIDList"));
}
return path;
}
private:
LPITEMIDLIST m_pidl;
wxDECLARE_NO_COPY_CLASS(wxItemIdList);
};
// enable autocompleting filenames in the text control with given HWND
//
// this only works on systems with shlwapi.dll 5.0 or later
//
// implemented in src/msw/utilsgui.cpp
extern bool wxEnableFileNameAutoComplete(HWND hwnd);
#endif // _WX_MSW_WRAPSHL_H_