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......
