孤独的猫

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

 

怎样在c#(winform)中给mdi中的父窗口中加上背景图片

 

 

修改MDI窗口的主背景是MS不推荐的,但如果你需要可以使用下面的方法:

 

1——

原理:

MDI窗口有一个叫MdiClient的窗口对象作为主背景窗口,要修改MDI窗口的背景就是修改该MdiClient对象的背景

 

2——

关键:

如何获得MdiClient对象

 

3——

方法:

MdiClient是作为MDI窗口的一个ChildControl的形式存在的,因此我们可以通过遍历MDI窗口的Controls对象集来获得

 

4——

示例:

下面的代码把MDI窗口的主背景修改为兰色(如果你有特别的处理请作相应的处理)

 

private System.Windows.Forms.MdiClient m_MdiClient;

public Form1()

{

//

// Windows 窗体设计器支持所必需的

//

InitializeComponent();

//

// TODO: InitializeComponent 调用后添加任何构造函数代码

//

int iCnt=this.Controls.Count;

for(int i=0;i<iCnt;i++)

{

if(this.Controls[i].GetType().ToString()=="System.Windows.Forms.MdiClient")

{

this.m_MdiClient=(System.Windows.Forms.MdiClient)this.Controls[i];

break;

}

}

this.m_MdiClient.BackColor=System.Drawing.Color.Blue;

}

 

具体的应用中,可以参考上面的代码把背景修改为其他的颜色、用图片平铺、拉伸等,就象通过代码修改非MDI窗口的背景一样。

 

另外,具体应用时,可能要考虑把这些东西放置到Paint或erasebkground等事件。

 

c# 2.0 MDI主窗口添加背景最简单的办法,4句代码搞定

 

一、将MDI主窗口的IsMdiContainer设为 False,将背景图片放到资源文件中,资源名为BackgroundImage

二、在MDI主窗口的构造函数中InitializeComponent();之后加下面4行代码

MdiClient m = new MdiClient();

this.Controls.Add( m );

m.Dock = DockStyle.Fill;

m.BackgroundImage = Properties.Resources.BackgroundImage ;

 

 

 

using System;

using System.ComponentModel;

using System.Collections;

using System.Drawing;

using System.Drawing.Imaging;

using System.Drawing.Drawing2D;

 

namespace myBackgroundImage

{

/// <summary>

/// fat background MDI form fbgMDIform),可定制Mdi主窗体背景。

/// </summary>

public class fbgMDIform:System.Windows.Forms.Form

{

private MDIbg_TypeList _mdibg_type;

private Image _mdibg_image;

private Image _mdibg_bgimage;

 

private MDIbg_AlignList _mdibg_align;

private MDIbg_ValignList _mdibg_valign;

 

private System.Windows.Forms.MdiClient bgMDIClient;

 

#region" 公共属性 "

 

[Browsable(true),Description("背景图片呈现风格:File填充,以截取右上角或重复出现的方式填满整个工作区;Draw 拉伸,一张图片拉伸后布满工作区;Logo标志,一张图片,其他属性控制具体位置。"), Category("MDI背景扩展设置")]

public MDIbg_TypeList MDIbg_Type

{

get

{

object obj=_mdibg_type;

return (obj==null)?MDIbg_TypeList.File:(MDIbg_TypeList)obj;

}

set { _mdibg_type=value; }

}

 

[Browsable(true),Description("MDIContainer背景图片"),Category("MDI背景扩展设置")]

public Image MDIbg_Image

{

get { return _mdibg_image; }

set { _mdibg_image=value; }

}

 

[Browsable(true),Description("MDIContainer第二背景图片,MDIbg_Type设置为Logo时,此属性对 应图片以拉伸的形式在MDIbg_Image的下一层布满工作区,若留空则由背景色替代。"), Category("MDI背景扩展设置")]

public Image MDIbg_bgImage

{

get { return _mdibg_bgimage; }

set { _mdibg_bgimage=value; }

}

 

[Browsable(true),Description("MDIbg_Image的左右对齐方式,取值为Left、Center、Right,MDIbg_Type设置为Logo时有效。"), Category("MDI背景扩展设置")]

public MDIbg_AlignList MDIbg_Align

{

get

{

object obj=_mdibg_align;

return (obj==null)?MDIbg_AlignList.Left:(MDIbg_AlignList)obj;

}

set { _mdibg_align=value; }

}

 

[Browsable(true),Description("MDIbg_Image的上下对齐方式,取值为Top、Middle、Bottom,MDIbg_Type设置为Logo时有效。"), Category("MDI背景扩展设置")]

public MDIbg_ValignList MDIbg_Valign

{

get

{

object obj=_mdibg_valign;

return (obj==null)?MDIbg_ValignList.Top:(MDIbg_ValignList)obj;

}

set { _mdibg_valign=value; }

}

 

#endregion

 

#region" 枚举相关 "

 

//呈现风格枚举

public enum MDIbg_TypeList:byte

{

File, //File填充,多张图片重复后布满工作区

 

Draw, //Draw拉伸,一张图片拉伸后布满工作区

 

Logo //Logo标志,一张图片,其他属性控制具体位置

}

 

 

//图片左右对齐方式枚举

public enum MDIbg_AlignList:byte

{

Left, //居左

 

Center, //居中

 

Right //居右

}

 

 

//图片上下对齐方式枚举

public enum MDIbg_ValignList:byte

{

Top, //居上

 

Middle, //居中

 

Bottom //居下

 

}

 

#endregion

 

public fbgMDIform()

{

this.SizeChanged += new System.EventHandler(this.MDI_Set);

this.Load+=new EventHandler(this.MDI_Set);

 

}

 

private void MDI_Set(object sender, System.EventArgs e)

{

if(this.IsMdiContainer)

{

foreach(System.Windows.Forms.Control myControl in this.Controls)

{

if(myControl.GetType().ToString() == "System.Windows.Forms.MdiClient")

{

bgMDIClient = (System.Windows.Forms.MdiClient)myControl;

break;

}

}

 

if(bgMDIClient.ClientSize.Width>0&&bgMDIClient.ClientSize.Height>0&&MDIbg_Image!=null)

{

 

System.Drawing.Bitmap myImg = new Bitmap(bgMDIClient.ClientSize.Width,bgMDIClient.ClientSize.Height);

System.Drawing.Graphics myGraphics = System.Drawing.Graphics.FromImage(myImg);

myGraphics.Clear(this.BackColor);

 

switch (this.MDIbg_Type)

{

case MDIbg_TypeList.File:

//填充

myImg = new Bitmap(this.MDIbg_Image);

myGraphics = System.Drawing.Graphics.FromImage(myImg);

myGraphics.Clear(this.BackColor);

myGraphics.DrawImage(this.MDIbg_Image,0,0,myImg.Width+1,myImg.Height+1);

bgMDIClient.BackgroundImage =myImg;

myGraphics.Dispose();

break;

case MDIbg_TypeList.Draw:

//拉伸

myGraphics.DrawImage(this.MDIbg_Image,0,0,myImg.Width+1,myImg.Height+1);

bgMDIClient.BackgroundImage = myImg;

myGraphics.Dispose();

break;

case MDIbg_TypeList.Logo:

//标志

myGraphics.Clear(this.BackColor);

 

if(this.MDIbg_bgImage!=null)

{

myGraphics.DrawImage(this.MDIbg_bgImage,0,0,myImg.Width+1,myImg.Height+1);

}

//定位

int myX,myY;

switch(this.MDIbg_Align)

{

case MDIbg_AlignList.Left:

myX=0;

break;

case MDIbg_AlignList.Right:

myX=myImg.Width-MDIbg_Image.Width;

break;

 

case MDIbg_AlignList.Center:

myX=(myImg.Width-MDIbg_Image.Width)/2;

break;

default:

myX=0;

break;

}

switch(this.MDIbg_Valign)

{

case MDIbg_ValignList.Top:

myY=0;

break;

case MDIbg_ValignList.Bottom:

myY=myImg.Height -MDIbg_Image.Height;

break;

 

case MDIbg_ValignList.Middle:

myY=(myImg.Height -MDIbg_Image.Height)/2;

break;

default:

myY=0;

break;

}

myGraphics.DrawImage(this.MDIbg_Image,myX,myY,this.MDIbg_Image.Width,this.MDIbg_Image.Height);

bgMDIClient.BackgroundImage = myImg;

myGraphics.Dispose();

break;

default:

//填充

bgMDIClient.BackgroundImage =this.MDIbg_Image;

break;

}

}

}

}

 

}

}

放在类库中编译,然后在程序中引用

 

引用自 http://hi.baidu.com/zdzcool/item/88e23348050d7d0d6cc2f002

posted on 2012-12-31 15:00  孤独的猫  阅读(2418)  评论(0)    收藏  举报