在C#中调整系统图标的大小

伊默洛夫

我想使用,SystemIcons.Warning但是对于我来说太大了。我要调整大小。

我试过了 :

Icon sizedIcon = new Icon(SystemIcons.Warning, new Size(10,10));

但它不起作用,图标保持不变。

有什么建议么?

汉斯·帕桑特

在.NET Icon类是相当残缺,它是停留在过去十年中由于一次相关的Windows 98和Windows 2000的支持在此之上,Windows不支持任何尺寸装载系统图标其他较系统的默认图标大小。通常为32x32。调整大小将不可避免地看起来很糟糕。

请记住,没有任何图标在10x10的分辨率下看起来会很好。在现代显示器上,它只是一个斑点。您可以从接近所需最终尺寸的图标尺寸开始,取得一定的进步,所需的重新调整尺寸越少,看起来合理的几率就越大。如果可以的话,请偏爱图标中可能存在的尺寸。像16x16、32x32、48x48。

任何,这可修复的。请记住,由于Windows不直接支持此操作,因此这需要花费大量的时间。所需要的是直接从系统DLL资源中读取图标。并且使用一种更现代的winapi LoadImage()而不是.NET使用的WinAPI LoadIcon()。适用于XP及更高版本。

在您的项目中添加一个新类,并粘贴以下代码:

using System;
using System.Drawing;
using System.Reflection;
using System.Runtime.InteropServices;

public class IconEx : IDisposable {
    public enum SystemIcons {
        Application = 100,
        Asterisk = 104,
        Error = 103,
        Exclamation = 101,
        Hand = 103,
        Information = 104,
        Question = 102,
        Shield = 106,
        Warning = 101,
        WinLogo = 100
    }

    public IconEx(string path, Size size) {
        IntPtr hIcon = LoadImage(IntPtr.Zero, path, IMAGE_ICON, size.Width, size.Height, LR_LOADFROMFILE);
        if (hIcon == IntPtr.Zero) throw new System.ComponentModel.Win32Exception();
        attach(hIcon);

    }
    public IconEx(SystemIcons sysicon, Size size) {
        IntPtr hUser = GetModuleHandle("user32");
        IntPtr hIcon = LoadImage(hUser, (IntPtr)sysicon, IMAGE_ICON, size.Width, size.Height, 0);
        if (hIcon == IntPtr.Zero) throw new System.ComponentModel.Win32Exception();
        attach(hIcon);
    }


    public Icon Icon {
        get { return this.icon; }
    }

    public void Dispose() {
        if (icon != null) icon.Dispose();
    }

    private Icon icon;

    private void attach(IntPtr hIcon) {
        // Invoke the private constructor so we can get the Icon object to own the handle
        var ci = typeof(Icon).GetConstructor(BindingFlags.NonPublic | BindingFlags.Instance, 
            null, new Type[] { typeof(IntPtr), typeof(bool) }, null);
        this.icon = (Icon)ci.Invoke(new object[] { hIcon, true});
    }

    private const int IMAGE_ICON = 1;
    private const int LR_LOADFROMFILE = 0x10;
    private const int LR_SHARED = 0x8000;

    [DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Auto)]
    private static extern IntPtr GetModuleHandle(string name);
    [DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
    private static extern IntPtr LoadImage(IntPtr hinst, string lpszName, int uType,
                                 int cxDesired, int cyDesired, int fuLoad);
    [DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
    private static extern IntPtr LoadImage(IntPtr hinst, IntPtr resId, int uType,
                                 int cxDesired, int cyDesired, int fuLoad);
}

用法示例:

    using (var icon = new IconEx(IconEx.SystemIcons.Warning, new Size(10, 10))) {
        e.Graphics.DrawIcon(icon.Icon, 0, 0);
    }

看起来确实比SystemIcons.Warning好。使用16x16时干净利落。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

@HTML调整图标的大小

来自分类Dev

在Qt中,如何调整表格中图标的大小?

来自分类Dev

在KDE中增加系统任务栏图标的大小

来自分类Dev

如何根据其图标的大小调整QPushButton的大小?

来自分类Dev

如何在iOS版Google Maps中调整GMSMarker图标的大小?

来自分类Dev

如何在设置 PreferenceScreen Android 中调整矢量图标的大小

来自分类Dev

调整基金会Zurb图标的大小

来自分类Dev

在整个项目中调整fontawesome图标的大小

来自分类Dev

调整基金会Zurb图标的大小

来自分类Dev

如何调整桌面图标的大小?

来自分类Dev

从动态BitMap调整AlertDialog图标的大小

来自分类Dev

Ubuntu 16.10。如何调整字体和图标的大小?

来自分类Dev

在C#中调整图像大小

来自分类Dev

是否可以立即调整固定在Windows 10中开始菜单上的所有图标的大小?

来自分类Dev

如何在Ubuntu 18.04上的应用程序概述中调整应用程序图标的大小?

来自分类Dev

调整图标大小以适合Java中的JButton?

来自分类Dev

调整材质图标的宽度

来自分类Dev

如何在C#中调整datagridview中的列大小

来自分类Dev

在gparted中调整根文件系统的大小

来自分类Dev

如何在Flutter中调整图标/图标按钮的大小?

来自分类Dev

根据C#中的Windows大小调整框

来自分类Dev

如何在C#中调整按钮上图片的大小?

来自分类Dev

在Windows Phone 8的C#中调整WriteableBitmap的大小

来自分类Dev

C#中的Picturebox和调整大小的图像提取

来自分类Dev

在C#中调整图片大小-空异常?

来自分类Dev

在 UWP C# 中调整焦点网格元素的大小

来自分类Dev

在 C# 中调整列表大小是否值得?

来自分类Dev

是否可以在EditText中更改图标的大小

来自分类Dev

在Flutter中更改AppBar返回图标的大小

Related 相关文章

  1. 1

    @HTML调整图标的大小

  2. 2

    在Qt中,如何调整表格中图标的大小?

  3. 3

    在KDE中增加系统任务栏图标的大小

  4. 4

    如何根据其图标的大小调整QPushButton的大小?

  5. 5

    如何在iOS版Google Maps中调整GMSMarker图标的大小?

  6. 6

    如何在设置 PreferenceScreen Android 中调整矢量图标的大小

  7. 7

    调整基金会Zurb图标的大小

  8. 8

    在整个项目中调整fontawesome图标的大小

  9. 9

    调整基金会Zurb图标的大小

  10. 10

    如何调整桌面图标的大小?

  11. 11

    从动态BitMap调整AlertDialog图标的大小

  12. 12

    Ubuntu 16.10。如何调整字体和图标的大小?

  13. 13

    在C#中调整图像大小

  14. 14

    是否可以立即调整固定在Windows 10中开始菜单上的所有图标的大小?

  15. 15

    如何在Ubuntu 18.04上的应用程序概述中调整应用程序图标的大小?

  16. 16

    调整图标大小以适合Java中的JButton?

  17. 17

    调整材质图标的宽度

  18. 18

    如何在C#中调整datagridview中的列大小

  19. 19

    在gparted中调整根文件系统的大小

  20. 20

    如何在Flutter中调整图标/图标按钮的大小?

  21. 21

    根据C#中的Windows大小调整框

  22. 22

    如何在C#中调整按钮上图片的大小?

  23. 23

    在Windows Phone 8的C#中调整WriteableBitmap的大小

  24. 24

    C#中的Picturebox和调整大小的图像提取

  25. 25

    在C#中调整图片大小-空异常?

  26. 26

    在 UWP C# 中调整焦点网格元素的大小

  27. 27

    在 C# 中调整列表大小是否值得?

  28. 28

    是否可以在EditText中更改图标的大小

  29. 29

    在Flutter中更改AppBar返回图标的大小

热门标签

归档