RSS| 首页| 山顶道| 布珞阁¹| GoodUI| 土产| 关于

C#中设置系统所有窗口的默认图标
2007.08.3 1:28 bruce:

写一个Form的基类,其他Form都从他继承,
在InitializeComponent()前设置this.Icon = icon;
icon可以是来自资源文件,也可以来自进程的Res资源,如下代码获取系统进程的程序图标。设为全局唯一


[StructLayout(LayoutKind.Sequential)]
public struct SHFileInfo
{
public IntPtr hIcon;
public int iIcon;
public uint dwAttribs;
[MarshalAs(UnmanagedType.LPStr, SizeConst = 260)]
public string pszDisplayName;
[MarshalAs(UnmanagedType.LPStr, SizeConst = 80)]
public string pszTypeName;
};

public enum SHGFI { SmallIcon = 0x00000001, LargeIcon = 0x00000000, ICON = 0x000000100, DISPLAYNAME = 0x000000200, TYPENAME = 0x000000400, SysIconIndex = 0x00004000, UseFileAttributes = 0x00000010 }
[DllImport("shell32")]
static extern IntPtr SHGetFileInfo(string pszPath, uint dwAttribs, out SHFileInfo lpfi, int cb, SHGFI flags);

private static System.Drawing.Icon icon_Exe = null;
public static System.Drawing.Icon getExeIcon(){
if (icon_Exe == null)
{
SHFileInfo fileiconinfo = new SHFileInfo();
SHGetFileInfo(Application.ExecutablePath, 0, out fileiconinfo, Marshal.SizeOf(fileiconinfo), SHGFI.ICON | SHGFI.SmallIcon);
icon_Exe = Icon.FromHandle(fileiconinfo.hIcon);
}
return icon_Exe;
}

public FormBase()
{
this.Icon = getExeIcon(); //必须放在初始化组件之前
InitializeComponent();
}

可惜设计器浏览的时候会执行这段代码,显示的图标成了VS2005的图标,FT......

分类  日经| 1个评论


1个评论
  1. Quotation 留言:

    用DesignMode()判断一下撒

垃圾太厉害了
说几句吧






*注意: 回复可能需要审查.您不必重复提交.