Updated to match new GetThemeStream format

pull/10/head
David Hall 2018-06-08 11:18:49 -06:00
parent ae8dc4bb59
commit a24cfac33c
2 changed files with 31 additions and 5 deletions

View File

@ -1,5 +1,8 @@
using NUnit.Framework;
using System;
using System.Runtime.InteropServices;
using System.Windows.Forms;
using Vanara.Extensions;
namespace Vanara.PInvoke.Tests
{
@ -141,7 +144,29 @@ namespace Vanara.PInvoke.Tests
[Test()]
public void GetThemeStreamTest()
{
throw new NotImplementedException();
const int WP_MINCAPTION = 3;
const int MNCS_ACTIVE = 1;
const int TMT_ATLASRECT = 8002;
Application.EnableVisualStyles();
var w = new NativeWindow();
var cp = new CreateParams();
w.CreateHandle(cp);
using (var h = UxTheme.OpenThemeData(new HandleRef(w, w.Handle), "DWMWINDOW"))
{
if (!h.IsInvalid)
{
UxTheme.GetThemeRect(h, WP_MINCAPTION, MNCS_ACTIVE, TMT_ATLASRECT, out var rect);
using (var hInstance = Kernel32.LoadLibraryEx(@"C:\Windows\resources\themes\Aero\Aero.msstyles", dwFlags: Kernel32.LoadLibraryExFlags.LOAD_LIBRARY_AS_DATAFILE))
{
var hr = UxTheme.GetThemeStream(h, WP_MINCAPTION, MNCS_ACTIVE, TMT_ATLASRECT, out var themeStream, out var streamSize, hInstance);
byte[] bytes = hr.Succeeded ? themeStream.ToArray<byte>((int)streamSize) : new byte[0];
}
}
}
w.DestroyHandle();
}
[Test()]

View File

@ -4,6 +4,7 @@ using System.Drawing;
using System.Runtime.InteropServices;
using System.Text;
using System.Windows.Forms;
using Vanara.Extensions;
using Vanara.PInvoke;
using static Vanara.PInvoke.Gdi32;
using static Vanara.PInvoke.Kernel32;
@ -300,16 +301,16 @@ namespace Vanara.Windows.Forms
public byte[] GetDiskStream(SafeLibraryHandle hInst, int partId, int stateId, int propId)
{
var r = GetThemeStream(hTheme, partId, stateId, propId, out byte[] bytes, out int bLen, hInst);
if (r.Succeeded) return bytes;
var r = GetThemeStream(hTheme, partId, stateId, propId, out var bytes, out var bLen, hInst);
if (r.Succeeded) return bytes.ToArray<byte>((int)bLen);
if (r != 0x80070490) throw new InvalidOperationException("Bad GetThemeStream");
return null;
}
public byte[] GetStream(int partId, int stateId, int propId)
{
var r = GetThemeStream(hTheme, partId, stateId, propId, out byte[] bytes, out int bLen, IntPtr.Zero);
if (r.Succeeded) return bytes;
var r = GetThemeStream(hTheme, partId, stateId, propId, out var bytes, out var bLen, IntPtr.Zero);
if (r.Succeeded) return bytes.ToArray<byte>((int)bLen);
if (r != 0x80070490) throw new InvalidOperationException("Bad GetThemeStream");
return null;
}