欢迎来真孝善网,为您提供真孝善正能量书籍故事!

深入解析:C# 窗体定制开发技巧与应用

时间:11-22 神话故事 提交错误

很多朋友对于深入解析:C# 窗体定制开发技巧与应用和不太懂,今天就由小编来为大家分享,希望可以帮助到大家,下面一起来看看吧!

所以这个方法对我来说有点困难,放弃吧! 【放弃的原因是有更好的办法】

2.使用第三方控件。不幸的是,大多数都需要付费,所以放弃吧!

3. 使用皮肤控制。谷歌“C#皮肤控件”,哇,好多啊……突然看到一个很熟悉的名字“IrisSkin2.dll”,对,就是它,我以前用过,

但由于当时没有好看的.ssk皮肤文件,所以没有引起足够的重视。这时,我突然有了制作自己的ssk文件的想法,于是我利用Google强大的搜索引擎找到了“skinbuilder”,一款非常棒的制作ssk皮肤文件的工具。

1.重写WinForm自带的控件

使用系统;

使用System.Collections.Generic;

使用System.Linq;

使用系统文本;

使用System.Windows.Forms;

使用系统绘图;

使用System.Drawing.Drawing2D;

命名空间演示

{

///

///表单自绘辅助类

///

公共类RenderHelper

{

///

///设置窗体的圆角矩形

///

///需要设置的表单

///圆角矩形的半径

公共静态无效SetFormRoundRectRgn(表单形式,int rgnRadius)

{

int hRgn=0;

hRgn=Win32.CreateRoundRectRgn(0, 0, form.Width 1, form.Height 1, rgnRadius, rgnRadius);

Win32.SetWindowRgn(form.Handle, hRgn, true);

Win32.DeleteObject(hRgn);

}

///

///移动表单

///

公共静态无效MoveWindow(表单形式)

{

Win32.ReleaseCapture();

Win32.SendMessage(form.Handle, Win32.WM_NCLBUTTONDOWN, Win32.HTCAPTION, 0);

}

///

///获取低X坐标

///

公共静态int LOWORD(int 值)

{

返回值0xFFFF;

}

///

///获取高Y坐标

///

公共静态int HIWORD(int 值)

{

返回值16;

}

///

///绘制表单边框

///

///需要绘制边框的表单

///用于绘制边框的绘图对象

///边框图像

///边框的圆角矩形

公共静态无效DrawFormFringe(形式destForm,图形g,图像fringeImg,int半径)

{

绘制九个矩形(

克,

边缘图像,

new 矩形(-radius, -radius, destForm.ClientSize.Width 2 * 半径, destForm.ClientSize.Height 2 * 半径),

新矩形(0, 0, fringeImg.Width, fringeImg.Height));

}

///

///绘制九宫图

///

///绘制对象

///要绘制的图片

///目标矩形

///源矩形

公共静态无效DrawNineRect(图形g,图像img,矩形DestRect,矩形SrcRect)

{

整数偏移量=5;

矩形NineRect=new 矩形(img.Width/2 - 偏移量, img.Height/2 - 偏移量, 2 * 偏移量, 2 * 偏移量);

int x=0, y=0, nWidth, nHeight;

int xSrc=0, ySrc=0, nSrcWidth, nSrcHeight;

int nDestWidth, nDestHeight;

nDestWidth=DestRect.Width;

nDestHeight=DestRect.Height;

//左上角----------------------------------------------------;

x=DestRect.Left;

y=DestRect.Top;

nWidth=NineRect.Left - SrcRect.Left;

nHeight=NineRect.Top - SrcRect.Top;

xSrc=SrcRect.Left;

ySrc=SrcRect.Top;

g.DrawImage(img, new Rectangle(x, y, nWidth, nHeight), xSrc, ySrc, nWidth, nHeight, GraphicsUnit.Pixel);

//优越的- - - - - - - - - - - - - - - - - - -;

x=DestRect.Left NineRect.Left - SrcRect.Left;

nWidth=nDestWidth - nWidth - (SrcRect.Right - NineRect.Right);

xSrc=NineRect.Left;

nSrcWidth=NineRect.Right - NineRect.Left;

nSrcHeight=NineRect.Top - SrcRect.Top;

g.DrawImage(img, new Rectangle(x, y, nWidth, nHeight), xSrc, ySrc, nSrcWidth, nSrcHeight, GraphicsUnit.Pixel);

//右上角--------------------------------------------------------;

x=DestRect.Right - (SrcRect.Right - NineRect.Right);

nWidth=SrcRect.Right - NineRect.Right;

xSrc=NineRect.Right;

g.DrawImage(img, new Rectangle(x, y, nWidth, nHeight), xSrc, ySrc, nWidth, nHeight, GraphicsUnit.Pixel);

//左边- - - - - - - - - - - - - - - - - - -;

x=DestRect.Left;

y=目标矩形. 顶部九矩形. 顶部- 源矩形. 顶部;

nWidth=NineRect.Left - SrcRect.Left;

nHeight=DestRect.Bottom - y - (SrcRect.Bottom - NineRect.Bottom);

xSrc=SrcRect.Left;

ySrc=NineRect.Top;

nSrcWidth=NineRect.Left - SrcRect.Left;

nSrcHeight=NineRect.Bottom - NineRect.Top;

g.DrawImage(img, new Rectangle(x, y, nWidth, nHeight), xSrc, ySrc, nSrcWidth, nSrcHeight, GraphicsUnit.Pixel);

//中间- - - - - - - - - - - - - - - - - - -;

x=DestRect.Left NineRect.Left - SrcRect.Left;

nWidth=nDestWidth - nWidth - (SrcRect.Right - NineRect.Right);

xSrc=NineRect.Left;

nSrcWidth=NineRect.Right - NineRect.Left;

g.DrawImage(img, new Rectangle(x, y, nWidth, nHeight), xSrc, ySrc, nSrcWidth, nSrcHeight, GraphicsUnit.Pixel);

//正确的- - - - - - - - - - - - - - - - - - - - ;

x=DestRect.Right - (SrcRect.Right - NineRect.Right);

nWidth=SrcRect.Right - NineRect.Right;

xSrc=NineRect.Right;

nSrcWidth=SrcRect.Right - NineRect.Right;

g.DrawImage(img, new Rectangle(x, y, nWidth, nHeight), xSrc, ySrc, nSrcWidth, nSrcHeight, GraphicsUnit.Pixel);

//左下---------------------------------------------------------;

x=DestRect.Left;

y=DestRect.Bottom - (SrcRect.Bottom - NineRect.Bottom);

nWidth=NineRect.Left - SrcRect.Left;

nHeight=SrcRect.Bottom - NineRect.Bottom;

xSrc=SrcRect.Left;

ySrc=NineRect.Bottom;

g.DrawImage(img, new Rectangle(x, y, nWidth, nHeight), xSrc, ySrc, nWidth, nHeight, GraphicsUnit.Pixel);

//向下- - - - - - - - - - - - - - - - - - -;

x=DestRect.Left NineRect.Left - SrcRect.Left;

nWidth=nDestWidth - nWidth - (SrcRect.Right - NineRect.Right);

xSrc=NineRect.Left;

nSrcWidth=NineRect.Right - NineRect.Left;

nSrcHeight=SrcRect.Bottom - NineRect.Bottom;

g.DrawImage(img, new Rectangle(x, y, nWidth, nHeight), xSrc, ySrc, nSrcWidth, nSrcHeight, GraphicsUnit.Pixel);

//右下---------------------------------------------------------;

x=DestRect.Right - (SrcRect.Right - NineRect.Right);

nWidth=SrcRect.Right - NineRect.Right;

xSrc=NineRect.Right;

g.DrawImage(img, new Rectangle(x, y, nWidth, nHeight), xSrc, ySrc, nWidth, nHeight, GraphicsUnit.Pixel);

}

///

///在窗体主体部分绘制白色透明层

///

///需要绘制的表单

///绘制对象

公共静态无效DrawFromAlphaMainPart(表单形式,图形g)

{

颜色[]颜色=

{

颜色.FromArgb(5, 颜色.白色),

颜色.FromArgb(30, 颜色.白色),

颜色.FromArgb(150, 颜色.白色),

颜色.FromArgb(180, 颜色.白色),

颜色.FromArgb(30, 颜色.白色),

颜色.FromArgb(5, 颜色.白色)

};

浮动[] 位置=

{

0.0f,

0.05f,

0.15f,

0.85f,

0.99f,

1.0f

};

ColorBlend colorBlend=new ColorBlend(6);

colorBlend.Colors=颜色;

colorBlend.Positions=pos;

矩形F destRect=new 矩形F(0, 0, form.Width, form.Height);

使用(LinearGradientBrush lBrush=new LinearGradientBrush(destRect, 颜色[0], 颜色[5], LinearGradientMode.Vertical))

{

lBrush.InterpolationColors=colorBlend;

g.FillRectangle(lBrush, destRect);

}

}

}

3. 使用皮肤控制。

例如IrisSkin2.dll皮肤控制

1. 添加对IrisSkin2.dll 或IrisSkin4.dll 的引用。

2.修改Program.csMain函数

将要

Application.Run(new Form1());

修改为

Form1 frm=new Form1();

Sunisoft.IrisSkin.SkinEngine 皮肤=new Sunisoft.IrisSkin.SkinEngine((System.ComponentModel.Component)frm);

Skin.SkinFile="***.ssk"; //指定皮肤文件

Skin.TitleFont=new System.Drawing.Font("微软雅黑", 10F);//指定标题栏的字体。

应用程序.运行(frm);

另外,看SkinEngine的重载构造函数,还有以下几个。

呵呵,第三个构造函数:stream.可以存储加密的ssk文件.

虽然skinBuilder支持编译加密的ssk文件,但是效果并不好,有时直接编译的加密的ssk文件无法正常使用。

关于深入解析:C# 窗体定制开发技巧与应用的内容到此结束,希望对大家有所帮助。

用户评论

几妆痕

终于开始学习C#开发窗口程序了!

    有12位网友表示赞同!

墨染殇雪

定制界面太酷了,可以完全按照自己的想法来设计!

    有18位网友表示赞同!

她的风骚姿势我学不来

自己创建窗体的过程是怎样的呢?有详细教程吗?

    有10位网友表示赞同!

ー半忧伤

感觉自定义窗体可以打造出独一无二的软件体验!

    有14位网友表示赞同!

冷嘲热讽i

以前只用过现成的窗体模板,不知道怎么定制界面,这篇文章很适合我。

    有6位网友表示赞同!

短发

我对C#编程还比较菜,这篇文章能帮我入门吗?

    有12位网友表示赞同!

雨后彩虹

学习自定义窗体可以提升程序设计能力吧!

    有17位网友表示赞同!

笑傲苍穹

我想做一个游戏界面,不知道如何开始,自定义窗体应该很有用吧?

    有17位网友表示赞同!

冷眼旁观i

这个话题好深入,感觉需要多花点时间去理解。

    有18位网友表示赞同!

封锁感觉

想试试看能不能用C# 自定义窗体制作一个小工具!

    有14位网友表示赞同!

晨与橙与城

学习新的技术总是让人兴奋!

    有12位网友表示赞同!

安之若素

自定义窗体可以实现很多创意,期待看到大家的作品分享!

    有9位网友表示赞同!

巷口酒肆

这篇文章让我对C#编程更加感兴趣了。

    有13位网友表示赞同!

剑已封鞘

感觉学习C#越来越流行,是不是一个不错的技能?

    有13位网友表示赞同!

風景綫つ

有没有什么好用的工具可以辅助定制窗体?

    有6位网友表示赞同!

╯念抹浅笑

自定义窗体设计需要哪些知识点?

    有9位网友表示赞同!

珠穆郎马疯@

这个主题很专业,适合有一定编程基础的人学习吧!

    有14位网友表示赞同!

迷路的男人

我试着跟着教程一步步来完成一个简单窗体的例子。

    有17位网友表示赞同!

稳妥

学习C#自定义窗体应该能拓宽我的软件开发视野!

    有11位网友表示赞同!

【深入解析:C# 窗体定制开发技巧与应用】相关文章:

1.蛤蟆讨媳妇【哈尼族民间故事】

2.米颠拜石

3.王羲之临池学书

4.清代敢于创新的“浓墨宰相”——刘墉

5.“巧取豪夺”的由来--米芾逸事

6.荒唐洁癖 惜砚如身(米芾逸事)

7.拜石为兄--米芾逸事

8.郑板桥轶事十则

9.王献之被公主抢亲后的悲惨人生

10.史上真实张三丰:在棺材中竟神奇复活