mirror of
https://github.com/mirror/processhacker
synced 2026-06-08 16:03:24 +00:00
ToolStatus: Fix toolbar disappearing by scaling images
git-svn-id: svn://svn.code.sf.net/p/processhacker/code@5404 21ef857c-d57f-4fe0-8362-d861dc6d29cd
This commit is contained in:
@@ -279,15 +279,10 @@ BOOLEAN ProcessTreeFilterCallback(
|
||||
{
|
||||
showItem = processNode->ProcessItem->IsSuspended == TRUE;
|
||||
}
|
||||
|
||||
if (WSTR_IEQUAL(textboxText->Buffer, L"IsWow32"))
|
||||
{
|
||||
showItem = processNode->ProcessItem->IsWow64 == TRUE;
|
||||
}
|
||||
|
||||
if (WSTR_IEQUAL(textboxText->Buffer, L"IsWow64"))
|
||||
{
|
||||
showItem = processNode->ProcessItem->IsWow64 == FALSE;
|
||||
showItem = processNode->ProcessItem->IsWow64 == TRUE;
|
||||
}
|
||||
|
||||
if (WSTR_IEQUAL(textboxText->Buffer, L"IsImmersive"))
|
||||
|
||||
@@ -345,13 +345,13 @@ VOID ApplyToolbarSettings(
|
||||
// Set the number of images
|
||||
ImageList_SetImageCount(ToolBarImageList, 7);
|
||||
// Add the images to the imagelist - same index as the first tbButtonArray field
|
||||
ImageList_Replace(ToolBarImageList, 0, LoadImageFromResources(MAKEINTRESOURCE(IDB_ARROW_REFRESH), L"PNG"), NULL);
|
||||
ImageList_Replace(ToolBarImageList, 1, LoadImageFromResources(MAKEINTRESOURCE(IDB_COG_EDIT), L"PNG"), NULL);
|
||||
ImageList_Replace(ToolBarImageList, 2, LoadImageFromResources(MAKEINTRESOURCE(IDB_FIND), L"PNG"), NULL);
|
||||
ImageList_Replace(ToolBarImageList, 3, LoadImageFromResources(MAKEINTRESOURCE(IDB_CHART_LINE), L"PNG"), NULL);
|
||||
ImageList_Replace(ToolBarImageList, 4, LoadImageFromResources(MAKEINTRESOURCE(IDB_APPLICATION), L"PNG"), NULL);
|
||||
ImageList_Replace(ToolBarImageList, 5, LoadImageFromResources(MAKEINTRESOURCE(IDB_APPLICATION_GO), L"PNG"), NULL);
|
||||
ImageList_Replace(ToolBarImageList, 6, LoadImageFromResources(MAKEINTRESOURCE(IDB_CROSS), L"PNG"), NULL);
|
||||
ImageList_Replace(ToolBarImageList, 0, LoadScaledImageFromResources(16, 16, MAKEINTRESOURCE(IDB_ARROW_REFRESH), L"PNG"), NULL);
|
||||
ImageList_Replace(ToolBarImageList, 1, LoadScaledImageFromResources(16, 16, MAKEINTRESOURCE(IDB_COG_EDIT), L"PNG"), NULL);
|
||||
ImageList_Replace(ToolBarImageList, 2, LoadScaledImageFromResources(16, 16, MAKEINTRESOURCE(IDB_FIND), L"PNG"), NULL);
|
||||
ImageList_Replace(ToolBarImageList, 3, LoadScaledImageFromResources(16, 16, MAKEINTRESOURCE(IDB_CHART_LINE), L"PNG"), NULL);
|
||||
ImageList_Replace(ToolBarImageList, 4, LoadScaledImageFromResources(16, 16, MAKEINTRESOURCE(IDB_APPLICATION), L"PNG"), NULL);
|
||||
ImageList_Replace(ToolBarImageList, 5, LoadScaledImageFromResources(16, 16, MAKEINTRESOURCE(IDB_APPLICATION_GO), L"PNG"), NULL);
|
||||
ImageList_Replace(ToolBarImageList, 6, LoadScaledImageFromResources(16, 16, MAKEINTRESOURCE(IDB_CROSS), L"PNG"), NULL);
|
||||
// Configure the toolbar imagelist
|
||||
SendMessage(ToolBarHandle, TB_SETIMAGELIST, 0, (LPARAM)ToolBarImageList);
|
||||
// Add the buttons to the toolbar
|
||||
|
||||
@@ -535,6 +535,127 @@ HBITMAP LoadImageFromResources(
|
||||
return bitmapHandle;
|
||||
}
|
||||
|
||||
HBITMAP LoadScaledImageFromResources(
|
||||
__in UINT Width,
|
||||
__in UINT Height,
|
||||
__in LPCTSTR Name,
|
||||
__in LPCTSTR Type
|
||||
)
|
||||
{
|
||||
UINT width = 0;
|
||||
UINT height = 0;
|
||||
UINT frameCount = 0;
|
||||
ULONG resLength = 0;
|
||||
HRSRC resHandleSrc = NULL;
|
||||
HGLOBAL resHandle = NULL;
|
||||
BITMAPINFO bitmapInfo = { 0 };
|
||||
HBITMAP bitmapHandle = NULL;
|
||||
HDC bitmapHdc = NULL;
|
||||
BYTE* bitmapBuffer = NULL;
|
||||
IWICStream* wicStream = NULL;
|
||||
IWICBitmapSource* wicBitmap = NULL;
|
||||
IWICBitmapDecoder* wicDecoder = NULL;
|
||||
IWICBitmapFrameDecode* wicFrame = NULL;
|
||||
IWICBitmapScaler* wicScaler = NULL;
|
||||
WICInProcPointer pvSourceResourceData = NULL;
|
||||
|
||||
static PH_INITONCE initOnce = PH_INITONCE_INIT;
|
||||
static IWICImagingFactory* wicFactory = NULL;
|
||||
|
||||
__try
|
||||
{
|
||||
if ((resHandleSrc = FindResource((HINSTANCE)PluginInstance->DllBase, Name, Type)) == NULL)
|
||||
__leave;
|
||||
if ((resHandle = LoadResource((HINSTANCE)PluginInstance->DllBase, resHandleSrc)) == NULL)
|
||||
__leave;
|
||||
if ((pvSourceResourceData = (WICInProcPointer)LockResource(resHandle)) == NULL)
|
||||
__leave;
|
||||
|
||||
resLength = SizeofResource((HINSTANCE)PluginInstance->DllBase, resHandleSrc);
|
||||
|
||||
if (PhBeginInitOnce(&initOnce))
|
||||
{
|
||||
if (FAILED(CoCreateInstance(&CLSID_WICImagingFactory1, NULL, CLSCTX_INPROC_SERVER, &IID_IWICImagingFactory, (PVOID*)&wicFactory)))
|
||||
{
|
||||
PhEndInitOnce(&initOnce);
|
||||
__leave;
|
||||
}
|
||||
|
||||
PhEndInitOnce(&initOnce);
|
||||
}
|
||||
|
||||
if (FAILED(CoCreateInstance(&CLSID_WICPngDecoder1, NULL, CLSCTX_INPROC_SERVER, &IID_IWICBitmapDecoder, (PVOID*)&wicDecoder)))
|
||||
__leave;
|
||||
if (FAILED(IWICImagingFactory_CreateStream(wicFactory, &wicStream)))
|
||||
__leave;
|
||||
if (FAILED(IWICStream_InitializeFromMemory(wicStream, pvSourceResourceData, resLength)))
|
||||
__leave;
|
||||
if (FAILED(IWICBitmapDecoder_Initialize(wicDecoder, (IStream*)wicStream, WICDecodeMetadataCacheOnLoad)))
|
||||
__leave;
|
||||
if (FAILED(IWICBitmapDecoder_GetFrameCount(wicDecoder, &frameCount)) || frameCount != 1)
|
||||
__leave;
|
||||
if (FAILED(IWICBitmapDecoder_GetFrame(wicDecoder, 0, &wicFrame)))
|
||||
__leave;
|
||||
if (FAILED(WICConvertBitmapSource(&GUID_WICPixelFormat32bppPBGRA, (IWICBitmapSource*)wicFrame, &wicBitmap)))
|
||||
__leave;
|
||||
if (FAILED(IWICBitmapSource_GetSize(wicBitmap, &width, &height)) || width == 0 || height == 0)
|
||||
__leave;
|
||||
|
||||
bitmapInfo.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
|
||||
bitmapInfo.bmiHeader.biWidth = Width;
|
||||
bitmapInfo.bmiHeader.biHeight = -((LONG)Height);
|
||||
bitmapInfo.bmiHeader.biPlanes = 1;
|
||||
bitmapInfo.bmiHeader.biBitCount = 32;
|
||||
bitmapInfo.bmiHeader.biCompression = BI_RGB;
|
||||
|
||||
bitmapHdc = GetDC(NULL);
|
||||
|
||||
if ((bitmapHandle = CreateDIBSection(bitmapHdc, &bitmapInfo, DIB_RGB_COLORS, (PVOID*)&bitmapBuffer, NULL, 0)) != NULL)
|
||||
{
|
||||
WICRect rect = { 0, 0, Width, Height };
|
||||
|
||||
if (FAILED(IWICImagingFactory_CreateBitmapScaler(wicFactory, &wicScaler)))
|
||||
__leave;
|
||||
if (FAILED(IWICBitmapScaler_Initialize(wicScaler, (IWICBitmapSource*)wicFrame, Width, Height, WICBitmapInterpolationModeFant)))
|
||||
__leave;
|
||||
if (SUCCEEDED(IWICBitmapScaler_CopyPixels(wicScaler, &rect, Width * 4, Width * Height * 4, bitmapBuffer)))
|
||||
__leave;
|
||||
}
|
||||
}
|
||||
__finally
|
||||
{
|
||||
if (bitmapHdc)
|
||||
{
|
||||
ReleaseDC(NULL, bitmapHdc);
|
||||
}
|
||||
|
||||
if (wicBitmap)
|
||||
{
|
||||
IWICBitmapSource_Release(wicBitmap);
|
||||
}
|
||||
|
||||
if (wicFrame)
|
||||
{
|
||||
IWICBitmapFrameDecode_Release(wicFrame);
|
||||
}
|
||||
|
||||
if (wicStream)
|
||||
{
|
||||
IWICStream_Release(wicStream);
|
||||
}
|
||||
|
||||
if (wicDecoder)
|
||||
{
|
||||
IWICBitmapDecoder_Release(wicDecoder);
|
||||
}
|
||||
|
||||
//if (wicFactory)
|
||||
//IWICImagingFactory_Release(wicFactory);
|
||||
}
|
||||
|
||||
return bitmapHandle;
|
||||
}
|
||||
|
||||
BOOLEAN InsertButton(
|
||||
__in HWND hwndDlg,
|
||||
__in UINT CommandID
|
||||
|
||||
@@ -89,8 +89,15 @@ BOOLEAN NetworkTreeFilterCallback(
|
||||
);
|
||||
|
||||
HBITMAP LoadImageFromResources(
|
||||
__in LPCTSTR lpName,
|
||||
__in LPCTSTR lpType
|
||||
__in LPCTSTR Name,
|
||||
__in LPCTSTR Type
|
||||
);
|
||||
|
||||
HBITMAP LoadScaledImageFromResources(
|
||||
__in UINT Width,
|
||||
__in UINT Height,
|
||||
__in LPCTSTR Name,
|
||||
__in LPCTSTR Type
|
||||
);
|
||||
|
||||
typedef HRESULT (WINAPI *_GetThemeColor)(
|
||||
|
||||
Reference in New Issue
Block a user