Kawe Mazidjatari b7057a1204 Set correct icon resolution
Small icon handle is no longer equal to large if Icon::ApplicationIcon() is called
2022-05-21 22:41:15 +02:00

70 lines
1.7 KiB
C++

#include "stdafx.h"
#include "Icon.h"
#include "Path.h"
#include "Environment.h"
#include <shellapi.h>
namespace Drawing
{
Icon::Icon()
: _IconHandleSm(nullptr) ,_IconHandleLg(nullptr)
{
}
Icon::Icon(HICON Icon)
: _IconHandleSm(Icon), _IconHandleLg(Icon)
{
}
Icon::~Icon()
{
if (_IconHandleSm != nullptr)
DestroyIcon(_IconHandleSm);
if (_IconHandleLg != nullptr)
DestroyIcon(_IconHandleLg);
_IconHandleLg = nullptr;
_IconHandleLg = nullptr;
}
HICON Icon::LargeHandle()
{
return this->_IconHandleLg;
}
HICON Icon::SmallHandle()
{
return this->_IconHandleSm;
}
std::unique_ptr<Icon> Icon::FromFile(const String& File)
{
auto Result = std::make_unique<Icon>();
Result->_IconHandleLg = (HICON)LoadImageA(NULL, (char*)File, IMAGE_ICON, GetSystemMetrics(SM_CXICON), GetSystemMetrics(SM_CYICON), LR_LOADFROMFILE);
Result->_IconHandleSm = (HICON)LoadImageA(NULL, (char*)File, IMAGE_ICON, GetSystemMetrics(SM_CXSMICON), GetSystemMetrics(SM_CYSMICON), LR_LOADFROMFILE);
return Result;
}
std::unique_ptr<Icon> Icon::FromResource(const int32_t ID)
{
auto Result = std::make_unique<Icon>();
Result->_IconHandleLg = (HICON)LoadImageA(GetModuleHandle(NULL), MAKEINTRESOURCEA(ID), IMAGE_ICON, GetSystemMetrics(SM_CXICON), GetSystemMetrics(SM_CYICON), NULL);
Result->_IconHandleSm = (HICON)LoadImageA(GetModuleHandle(NULL), MAKEINTRESOURCEA(ID), IMAGE_ICON, GetSystemMetrics(SM_CXSMICON), GetSystemMetrics(SM_CYSMICON), NULL);
return Result;
}
std::unique_ptr<Icon> Icon::ApplicationIcon()
{
auto Result = std::make_unique<Icon>();
auto Exe = System::Environment::GetApplication();
ExtractIconExA(Exe, 0, &Result->_IconHandleLg, &Result->_IconHandleSm, 1);
return Result;
}
}