微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

缩放父窗体的MenuStrip中最大化的MDI子级使用的图标

如何解决缩放父窗体的MenuStrip中最大化的MDI子级使用的图标

| 在MDI应用程序中,当MDI子窗体最大化时,该窗体的图标用作上下文菜单图标,显示在父窗体的MenuStrip的左侧。当我将MDI应用程序中使用的表单的图标设置为大于16x16(我使用的是32x32)时,该图标将按比例缩放,菜单也将调整为适合自己的尺寸。请注意,如果ICO文件还包含图标的16x16版本,则可以正常工作。 下面创建了一个显示该行为的基本应用程序: 创建一个新的解决方案和WinForms项目 将Form1 \的IsMdiContainer更改为
true
向Form1添加ѭ1 创建一个新表格,将其命名为“2ѭ” 将
MdiChildForm
的图标设置为32x32 ICO文件,这是我之前准备的 在
Form1
添加菜单项,双击它以创建
Click
事件处理程序并添加以下内容
var child = new MdiChildForm();
child.MdiParent = this;
child.Show();
child.WindowState = FormWindowState.Maximized;
生成并运行,单击菜单项 请注意,再次单击菜单项时,图标将更改为认图标,这在此问题中有所描述,而不是此处的问题。 我很确定这将被描述为“按设计”,但这仍然很烦人。有没有一种方法可以强制上下文菜单图标按比例缩小,从而改变源图标的大小?我可能也会这样做,但是我正在某种形式的代码包罗万象。     

解决方法

受@Jeremy Thompson的回答启发,我找到了一种可能的解决方法。我将尺寸过大的图标绘制到新的16x16位图上,从中创建一个新图标,然后将其分配回子窗体。在显示表单之前,需要分配新图标。 该代码未经测试,可能有错误和漏洞,而且我不是GDI专家,因此请注意,它可能会破坏东西:
var bmp = new Bitmap(16,16);
using (var g = Graphics.FromImage(bmp))
{
    g.DrawImage(child.Icon.ToBitmap(),new Rectangle(0,16,16));
}
var newIcon = Icon.FromHandle(bmp.GetHicon());
child.Icon = newIcon;
// ...
child.Show();
    ,我尝试了各种方法,并且使它正常工作的唯一方法是使用16x16大小的图标以及标准的32x32图标形式:
var child = new MdiChildForm();
child.MdiParent = this;
child.Icon = new System.Drawing.Icon(\"scanner_magnifier_16x16.ico\",new Size(16,16));    
child.Show();
child.WindowState = FormWindowState.Maximized;
    ,我遇到了同样的问题。但似乎只需将其他16x16图标图像添加到* .ICO文件即可成功解决。 我使用了以下Axialis AX-Icons: 1)打开* .ICO文件,单击Ctrl + A选择完整的图标图像,单击Ctrl + C(复制到剪贴板) 2)单击“新图像格式”,选择16x16,为此* .ICO文件选择合适的颜色 3)点击Ctrl + V(粘贴),选择“调整图片大小以适合编辑器区域” 4)点击“保存” 5)对我的应用程序中MDI表单使用的每个* .ICO文件重复相同的操作 6)然后在我的应用程序中打开每个MDI表单,单击“ Icon \”属性作为表单,然后选择使用同一* .ICO文件的新版本 正如我现在所看到的,它工作正常。在菜单菜单中,它使用小图标,因此当MDI形式最大化时,主菜单的大小不再跳跃。     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。