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:
dmex
2013-08-09 08:08:16 +00:00
parent 6de1b1fe5a
commit 695ddcc2df
4 changed files with 138 additions and 15 deletions
+1 -6
View File
@@ -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"))
+7 -7
View File
@@ -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
+121
View File
@@ -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
+9 -2
View File
@@ -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)(