分享
 
 
 

扩展的ToolStripEx控件

王朝学院·作者佚名  2009-12-29
窄屏简体版  字體: |||超大  

该控件扩展了ToolStrip的功能,增加了水印功能,增加了图标在鼠标进入时自动增亮的功能。

只要实现思想:

扩展了ToolStripProfessionalRenderer渲染器,重写了OnRenderToolStripBorder、OnRenderSeparator、OnRenderItemImage、OnRenderToolStripBackground等几个方法,从而实现背景,水印的实现。

代码如下

/// <summary>

/// ToolStrip 渲染器。更改背景为过度显示和鼠标进入时图片自动增亮的功能。

/// </summary>

public class JWToolStripBarRenderer : ToolStripProfessionalRenderer

{

//Dictionary<string, Image> dict = new Dictionary<string, Image>();

private Brush backgroundBrush = null;

List<EtyImageState> m_ImageList = new List<EtyImageState>();

public JWToolStripBarRenderer()

{

this.RoundedEdges = false;

}

/// <summary>

/// 当更换背景颜色时,执行该方法才能生效,为的是提高效率。

/// </summary>

public void ResetBackgroundBrush()

{

this.backgroundBrush = null;

}

private Color m_ToolStripGradientBegin = SystemColors.InactiveBorder;

/// <summary>

/// 获取在 ToolStrip 背景中使用的渐变的开始颜色。

/// </summary>

public Color ToolStripGradientBegin

{

get { return m_ToolStripGradientBegin; }

set { m_ToolStripGradientBegin = value; }

}

private Color m_ToolStripGradientEnd = SystemColors.ControlLightLight;

/// <summary>

/// 获取在 ToolStrip 背景中使用的渐变的结束颜色。

/// </summary>

public Color ToolStripGradientEnd

{

get { return m_ToolStripGradientEnd; }

set { m_ToolStripGradientEnd = value; }

}

private BackgroundGradientStyle m_BackgroundGradientStyle = BackgroundGradientStyle.Horizontal;

/// <summary>

/// 设置背景渐变方式。

/// </summary>

public BackgroundGradientStyle BackgroundGradientStyle

{

get { return m_BackgroundGradientStyle; }

set

{

m_BackgroundGradientStyle = value;

}

}

private DrawBorderMode m_DrawBorderMode = DrawBorderMode.TopAndBottom;

/// <summary>

/// 画ToolStrip边框的形式。

/// </summary>

public DrawBorderMode DrawBorderMode

{

get { return m_DrawBorderMode; }

set { m_DrawBorderMode = value; }

}

private Image m_WatermarkImage;

/// <summary>

/// 水印的图片。

/// </summary>

///

public Image WatermarkImage

{

get { return m_WatermarkImage; }

set { m_WatermarkImage = value; }

}

private int m_brightValue = 30;

/// <summary>

/// 鼠标进入时的图片增亮值。默认为 30

/// </summary>

public int BrightValue

{

get { return m_brightValue; }

set { m_brightValue = value; }

}

//protected override void OnRenderArrow(ToolStripArrowRenderEventArgs e)

//{

// e.ArrowColor = Color.Red;

// e.Direction = ArrowDirection.Right;

// base.OnRenderArrow(e);

//}

// This method draws a border around the GridStrip control.

protected override void OnRenderToolStripBorder(

ToolStripRenderEventArgs e)

{

base.OnRenderToolStripBorder(e);

if (e.ToolStrip is ToolStripDropDown) //过滤,根据需要可能还有更多的过滤

return;

using (Pen pen = new Pen(SystemColors.ButtonShadow))

{

if (m_DrawBorderMode == DrawBorderMode.TopAndBottom || m_DrawBorderMode == DrawBorderMode.TopOnly)

e.Graphics.DrawLine(pen, e.AffectedBounds.X, e.AffectedBounds.Y, e.AffectedBounds.Width, e.AffectedBounds.Y);

if (m_DrawBorderMode == DrawBorderMode.TopAndBottom || m_DrawBorderMode == DrawBorderMode.BottomOnly)

e.Graphics.DrawLine(pen, e.AffectedBounds.X, e.AffectedBounds.Height - 1, e.AffectedBounds.Width, e.AffectedBounds.Height - 1);

}

}

protected override void OnRenderSeparator(ToolStripSeparatorRenderEventArgs e)

{

if (e.ToolStrip.LayoutStyle == ToolStripLayoutStyle.Table || e.ToolStrip.LayoutStyle == ToolStripLayoutStyle.Flow)

{

base.OnRenderSeparator(new ToolStripSeparatorRenderEventArgs(e.Graphics, e.Item as ToolStripSeparator, false));

//e.Graphics.FillRectangle(new SolidBrush(Color.Red), new Rectangle(0, 0, 100, 2));

}

else

base.OnRenderSeparator(e);

}

//修改只保留原图片。

protected override void OnRenderItemImage(ToolStripItemImageRenderEventArgs e)

{

Bitmap img = e.Image as Bitmap;

if (img != null)

{

bool isEqualsInitImage = false;

EtyImageState ety = EtyImageState.GetEtyImageState(m_ImageList, img.GetHashCode(), out isEqualsInitImage);

if (ety == null)

{

ety = new EtyImageState();

ety.InitImage = img;

ety.LightImage = ImageTool.Brightness(img, m_brightValue);

m_ImageList.Add(ety);

}

if (e.Item.Selected)

e.Item.Image = ety.LightImage;

else

e.Item.Image = ety.InitImage;

}

base.OnRenderItemImage(e);

}

int borderPadding = 2;

protected override void OnRenderToolStripBackground(ToolStripRenderEventArgs e)

{

base.OnRenderToolStripBackground(e);

if (e.ToolStrip is ToolStripDropDown) //过滤,根据需要可能还有更多的过滤

return;

//SystemColors.ControlLightLight,

//SystemColors.InactiveBorder,

Color gradientEnd = this.ToolStripGradientEnd;

float angle = 0;

if (m_BackgroundGradientStyle == BackgroundGradientStyle.Vertical)

angle = 90;

if (m_BackgroundGradientStyle == BackgroundGradientStyle.None)

gradientEnd = this.ToolStripGradientBegin;

if (this.backgroundBrush == null)

{

this.backgroundBrush = new LinearGradientBrush(

e.ToolStrip.ClientRectangle,

this.ToolStripGradientBegin,

gradientEnd,

angle,

true);

}

// Paint the GridStrip control's background.

e.Graphics.FillRectangle(

this.backgroundBrush,

e.AffectedBounds);

if (e.ToolStrip.GripStyle == ToolStripGripStyle.Visible)

{

ControlPaint.DrawBorder3D(e.Graphics, new Rectangle(3, 3, 2, e.ToolStrip.Height - 6), Border3DStyle.Etched, Border3DSide.Left | Border3DSide.Right);

ControlPaint.DrawBorder3D(e.Graphics, new Rectangle(7, 3, 2, e.ToolStrip.Height - 6), Border3DStyle.Etched, Border3DSide.Left | Border3DSide.Right);

}

//显示水印。

if (m_WatermarkImage != null)

{

Point position = Point.Empty;

int top = borderPadding;

int left = 0;

int width = 0;

int height = 0;

if (m_WatermarkImage.Height > e.ToolStrip.Height - borderPadding * 2)

{

//重新定义图片的显示宽高

double rate = (double)m_WatermarkImage.Width / (double)m_WatermarkImage.Height;

height = e.ToolStrip.Height - borderPadding * 2;

width = Convert.ToInt32(rate * height);

}

else

{

width = m_WatermarkImage.Width;

height = m_WatermarkImage.Height;

top = (e.ToolStrip.Height - height) / 2;

}

left = e.ToolStrip.Width - width - borderPadding * 2;

position = new Point(left, top);

Rectangle rect = new Rectangle(left, top, width, height);

e.Graphics.DrawImage(m_WatermarkImage, rect, new Rectangle(0, 0, m_WatermarkImage.Width, m_WatermarkImage.Height), GraphicsUnit.Pixel);

}

}

// This method handles the RenderGrip event.

protected override void OnRenderGrip(ToolStripGripRenderEventArgs e)

{

//DrawTitleBar(

// e.Graphics,

// new Rectangle(0, 0, e.ToolStrip.Width, e.ToolStrip.Height));

//ControlPaint.DrawBorder3D(e.Graphics, new Rectangle(0, 3, 2, e.ToolStrip.Height - 6), Border3DStyle.RaisedInner);

//ControlPaint.DrawBorder3D(e.Graphics, new Rectangle(3, 3, 2, e.ToolStrip.Height - 6), Border3DStyle.RaisedInner);

}

}

/// <summary>

/// 为保存图片的状态而设

/// </summary>

internal class EtyImageState

{

public int InitImageKey

{

get

{

if (m_InitImage == null)

return -1;

else

return m_InitImage.GetHashCode();

}

}

private Image m_InitImage;

public Image InitImage

{

get { return m_InitImage; }

set { m_InitImage = value; }

}

public int LightImageKey

{

get

{

if (m_LightImage == null)

return -1;

else

return m_LightImage.GetHashCode();

}

}

private Image m_LightImage;

public Image LightImage

{

get { return m_LightImage; }

set { m_LightImage = value; }

}

/// <summary>

/// 从集合

/// </summary>

/// <param name="list"></param>

/// <param name="key"></param>

/// <returns></returns>

public static EtyImageState GetEtyImageState(List<EtyImageState> list, int key, out bool isEqualsInitImage)

{

isEqualsInitImage = false;

EtyImageState retEty = null;

foreach (EtyImageState ety in list)

{

if (ety.InitImageKey == key)

{

isEqualsInitImage = true;

retEty = ety;

break;

}

else if (ety.LightImageKey == key)

{

retEty = ety;

break;

}

}

return retEty;

}

}

水印的处理(数字图片处理)

public static class ImageTool

{

/// <summary>

/// 根据字符串生成图片。

/// </summary>

/// <param name="data"></param>

/// <returns></returns>

public static Bitmap DeserializeFromBase64(string data)

{

// Decode the string and create a memory stream

// on the decoded string data.

MemoryStream stream =

new MemoryStream(Convert.FromBase64String(data));

// Create a new bitmap from the stream.

Bitmap b = new Bitmap(stream);

return b;

}

//图片 转为 base64编码的文本

public static string ImgToBase64String(Image bmp)

{

MemoryStream ms = new MemoryStream();

bmp.Save(ms, bmp.RawFormat);

byte[] arr = new byte[ms.Length];

ms.Position = 0;

ms.Read(arr, 0, (int)ms.Length);

ms.Close();

String strbase64 = Convert.ToBase64String(arr);

return strbase64;

}

/// <summary>

/// 图片增亮。

/// </summary>

/// <param name="img"></param>

/// <returns></returns>

public static Image Brightness(Image img, int brightValue)

{

int percent = brightValue;

Single v = 0.006F * percent;

Single[][] matrix = {

new Single[] { 1, 0, 0, 0, 0 },

new Single[] { 0, 1, 0, 0, 0 },

new Single[] { 0, 0, 1, 0, 0 },

new Single[] { 0, 0, 0, 1, 0 },

new Single[] { v, v, v, 0, 1 }

};

System.Drawing.Imaging.ColorMatrix cm = new System.Drawing.Imaging.ColorMatrix(matrix);

System.Drawing.Imaging.ImageAttributes attr = new System.Drawing.Imaging.ImageAttributes();

attr.SetColorMatrix(cm);

//Image tmp

//Image tmp = (Image)img.Clone();

Bitmap tmp = new Bitmap(img);

Graphics g = Graphics.FromImage(tmp);

try

{

Rectangle destRect = new Rectangle(0, 0, img.Width, img.Height);

g.DrawImage(tmp, destRect, 0, 0, tmp.Width, tmp.Height, GraphicsUnit.Pixel, attr);

}

finally

{

g.Dispose();

}

return tmp;

}

//处理不了透明的背景

/// <summary>

/// 制作水印图片

/// </summary>

/// <param name="iTheImage">要制作水印的图片</param>

/// <param name="width">制作水印的宽</param>

/// <param name="height">制作水印的高</param>

/// <returns></returns>

public static Bitmap WatermarkImage(Bitmap iTheImage, int width, int height)

{

//Bitmap watermark = new Bitmap(width, height,

// PixelFormat.Format24bppRgb);

Bitmap watermark = new Bitmap(iTheImage);

Graphics g = Graphics.FromImage(watermark);

g.Clear(Color.White);

//g.Clear(iTheImage.GetPixel(0,0));

g.SmoothingMode = SmoothingMode.HighQuality;

g.InterpolationMode = InterpolationMode.High;

ImageAttributes imageAttributes = new ImageAttributes();

ColorMap colorMap = new ColorMap();

colorMap.OldColor = Color.FromArgb(255, 0, 255, 0);

colorMap.NewColor = Color.FromArgb(0, 0, 0, 0);

ColorMap[] remapTable = { colorMap };

imageAttributes.SetRemapTable(remapTable, ColorAdjustType.Bitmap);

float[][] colorMatrixElements = {

new float[] {1.0f, 0.0f, 0.0f, 0.0f, 0.0f},

new float[] {0.0f, 1.0f, 0.0f, 0.0f, 0.0f},

new float[] {0.0f, 0.0f, 1.0f, 0.0f, 0.0f},

new float[] {0.0f, 0.0f, 0.0f, 0.3f, 0.0f},

new float[] {0.0f, 0.0f, 0.0f, 0.0f, 1.0f}

};

ColorMatrix colorMatrix = new ColorMatrix(colorMatrixElements);

imageAttributes.SetColorMatrix(colorMatrix, ColorMatrixFlag.Default, ColorAdjustType.Bitmap);

#region 保留学习

////int WatermarkWidth = 0;

////int WatermarkHeight = 0;

////double bl = 1d;

//////计算水印图片的比率

//////取背景的1/4宽度来比较

////if ((width > watermark.Width * 4) && (height > watermark.Height * 4))

////{

//// bl = 1;

////}

////else if ((width > watermark.Width * 4) && (height < watermark.Height * 4))

////{

//// bl = Convert.ToDouble(height / 4) / Convert.ToDouble(watermark.Height);

////}

////else if ((width < watermark.Width * 4) && (height > watermark.Height * 4))

////{

//// bl = Convert.ToDouble(width / 4) / Convert.ToDouble(watermark.Width);

////}

////else

////{

//// if ((width * watermark.Height) > (height * watermark.Width))

//// {

//// bl = Convert.ToDouble(height / 4) / Convert.ToDouble(watermark.Height);

//// }

//// else

//// {

//// bl = Convert.ToDouble(width / 4) / Convert.ToDouble(watermark.Width);

//// }

////}

////WatermarkWidth = Convert.ToInt32(watermark.Width * bl);

////WatermarkHeight = Convert.ToInt32(watermark.Height * bl);

////switch (_watermarkPosition)

////{

//// case "WM_TOP_LEFT":

//// xpos = 10;

//// ypos = 10;

//// break;

//// case "WM_TOP_RIGHT":

//// xpos = _width - WatermarkWidth - 10;

//// ypos = 10;

//// break;

//// case "WM_BOTTOM_RIGHT":

//// xpos = _width - WatermarkWidth - 10;

//// ypos = _height - WatermarkHeight - 10;

//// break;

//// case "WM_BOTTOM_LEFT":

//// xpos = 10;

//// ypos = _height - WatermarkHeight - 10;

//// break;

////}

#endregion

try

{

Rectangle destRect = new Rectangle(0, 0, watermark.Width, watermark.Height);

g.DrawImage(iTheImage, destRect, 0, 0, watermark.Width, watermark.Height,

GraphicsUnit.Pixel,

imageAttributes);

}

finally

{

imageAttributes.Dispose();

g.Dispose();

}

return watermark;

}

/// <summary>

/// 制作透明的图片。对透明背景保留原来的样子。

/// </summary>

/// <param name="bmpobj"></param>

/// <param name="transValue">透明度 (0 - 255)</param>

public static void WatermarkImage(Bitmap bmpobj, int transValue)

{

for (int i = 0; i < bmpobj.Height; i++)

{

for (int j = 0; j < bmpobj.Width; j++)

{

Color dot = bmpobj.GetPixel(j, i);

if (dot.A > 0)

{

bmpobj.SetPixel(j, i, Color.White);

bmpobj.SetPixel(j,i,Color.FromArgb(transValue,dot.R,dot.G,dot.B));

}

}

}

}

/// <summary>

/// 灰度转换,逐点方式

/// </summary>

public static void GrayByPixels(Bitmap bmpobj)

{

for (int i = 0; i < bmpobj.Height; i++)

{

for (int j = 0; j < bmpobj.Width; j++)

{

Color dot = bmpobj.GetPixel(j, i);

if (dot.A > 0)

{

int tmpValue = GetGrayNumColor(dot);

bmpobj.SetPixel(j, i, Color.FromArgb(tmpValue, tmpValue, tmpValue));

}

}

}

}

/// <summary>

/// 根据RGB,计算灰度值

/// </summary>

/// <param name="posClr">Color值</param>

/// <returns>灰度值,整型</returns>

private static int GetGrayNumColor(System.Drawing.Color posClr)

{

return (posClr.R * 19595 + posClr.G * 38469 + posClr.B * 7472) >> 16;

}

////public static bool Invert(Bitmap b)

////{

//// BitmapData bmData = b.LockBits(new Rectangle(0, 0, b.Width, b.Height),

//// ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb);

//// int stride = bmData.Stride;

//// System.IntPtr Scan0 = bmData.Scan0;

//// unsafe

//// {

//// byte* p = (byte*)(void*)Scan0;

//// int nOffset = stride - b.Width * 3;

//// int nWidth = b.Width * 3;

//// for (int y = 0; y < b.Height; ++y)

//// {

//// for (int x = 0; x < nWidth; ++x)

//// {

//// p[0] = (byte)(255 - p[0]);

//// ++p;

//// }

//// p += nOffset;

//// }

//// }

//// b.UnlockBits(bmData);

//// return true;

////}

////public static bool Gray(Bitmap b)

////{

//// BitmapData bmData = b.LockBits(new Rectangle(0, 0, b.Width, b.Height),

//// ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb);

//// int stride = bmData.Stride;

//// System.IntPtr Scan0 = bmData.Scan0;

//// unsafe

//// {

//// byte* p = (byte*)(void*)Scan0;

//// int nOffset = stride - b.Width * 3;

//// byte red, green, blue;

//// for (int y = 0; y < b.Height; ++y)

//// {

//// for (int x = 0; x < b.Width; ++x)

//// {

//// blue = p[0];

//// green = p[1];

//// red = p[2];

//// p[0] = p[1] = p[2] = (byte)(.299 * red + .587 * green + .114 * blue);

//// p += 3;

//// }

//// p += nOffset;

//// }

//// }

//// b.UnlockBits(bmData);

//// return true;

////}

////public static bool Brightness(Bitmap b, int nBrightness)

////{

//// if (nBrightness < -255 || nBrightness > 255)

//// return false;

//// BitmapData bmData = b.LockBits(new Rectangle(0, 0, b.Width,

//// b.Height), ImageLockMode.ReadWrite,

//// PixelFormat.Format24bppRgb);

//// int stride = bmData.Stride;

//// System.IntPtr Scan0 = bmData.Scan0;

//// int nVal = 0;

//// unsafe

//// {

//// byte* p = (byte*)(void*)Scan0;

//// int nOffset = stride - b.Width * 3;

//// int nWidth = b.Width * 3;

//// for (int y = 0; y < b.Height; ++y)

//// {

//// for (int x = 0; x < nWidth; ++x)

//// {

//// nVal = (int)(p[0] + nBrightness);

//// if (nVal < 0) nVal = 0;

//// if (nVal > 255) nVal = 255;

//// p[0] = (byte)nVal;

//// ++p;

//// }

//// p += nOffset;

//// }

//// }

//// b.UnlockBits(bmData);

//// return true;

////}

}

/// <summary>

/// 扩展的ToolStrip,更改背景为过度显示和鼠标进入时图片自动增亮的功能。

/// </summary>

public partial class ToolStripEx : ToolStrip

{

private JWToolStripBarRenderer render = new JWToolStripBarRenderer();

public ToolStripEx()

{

this.Renderer = render;

}

/// <summary>

/// 获取在 ToolStrip 背景中使用的渐变的开始颜色。

/// </summary>

[Description("获取在 ToolStrip 背景中使用的渐变的开始颜色。"), DefaultValue(typeof(Color), "InactiveBorder"), Category("特效设置")]

public Color ToolStripGradientBegin

{

get { return render.ToolStripGradientBegin; }

set

{

render.ToolStripGradientBegin = value;

render.ResetBackgroundBrush();

this.Invalidate();

}

}

/// <summary>

/// 获取在 ToolStrip 背景中使用的渐变的结束颜色。

/// </summary>

[Description("获取在 ToolStrip 背景中使用的渐变的结束颜色。"), DefaultValue(typeof(Color), "ControlLightLight"), Category("特效设置")]

public Color ToolStripGradientEnd

{

get { return render.ToolStripGradientEnd; }

set

{

render.ToolStripGradientEnd = value;

render.ResetBackgroundBrush();

this.Invalidate();

}

}

/// <summary>

/// 设置背景渐变方式。

/// </summary>

[Description("设置背景渐变方式。"), DefaultValue(typeof(BackgroundGradientStyle), "Horizontal"), Category("特效设置")]

public BackgroundGradientStyle BackgroundGradientStyle

{

get { return render.BackgroundGradientStyle; }

set

{

render.BackgroundGradientStyle = value;

render.ResetBackgroundBrush();

this.Invalidate();

}

}

private Bitmap m_WatermarkImage;

/// <summary>

/// 水印的图片。

/// </summary>

///

[Description("水印的图片。"), DefaultValue(null), Category("特效设置")]

public Bitmap WatermarkImage

{

get { return m_WatermarkImage; }

set

{

m_WatermarkImage = value;

//制作水印

if (value != null)

{

Bitmap img = new Bitmap(value);

if (m_watermarkGrayEffect)

ImageTool.GrayByPixels(img);

if (m_WatermarkTransparency != 255)

ImageTool.WatermarkImage(img, m_WatermarkTransparency);

render.WatermarkImage = img;

}

else

render.WatermarkImage = null;

this.Invalidate();

}

}

/// <summary>

/// 画ToolStrip边框的形式。

/// </summary>

[Description("画ToolStrip边框的形式。"), DefaultValue(typeof(DrawBorderMode), "TopAndBottom"), Category("特效设置")]

public DrawBorderMode DrawBorderMode

{

get { return render.DrawBorderMode; }

set

{

render.DrawBorderMode = value;

this.Invalidate();

}

}

private bool m_watermarkGrayEffect = false;

/// <summary>

/// 水印的灰度效果,默认为 false;

/// </summary>

///

[Description("水印的灰度效果,默认为 false;"), DefaultValue(false), Category("特效设置")]

public bool WatermarkGrayEffect

{

get { return m_watermarkGrayEffect; }

set

{

m_watermarkGrayEffect = value;

WatermarkImage = m_WatermarkImage;

}

}

private int m_WatermarkTransparency = 255;

/// <summary>

/// 水印显示的透明度。

/// </summary>

///

[Description("水印显示的透明度。默认为 255;"), DefaultValue(255), Category("特效设置")]

public int WatermarkTransparency

{

get { return m_WatermarkTransparency; }

set

{

if (value > 255 || value < 0)

throw new Exception("请输入 0 - 255 之间的一个数值。");

m_WatermarkTransparency = value;

WatermarkImage = m_WatermarkImage;

}

}

}

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/Yjianyong/archive/2009/12/27/5087300.aspx

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有