很多朋友对于深入解析: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# 窗体定制开发技巧与应用】相关文章:
2.米颠拜石
3.王羲之临池学书
8.郑板桥轶事十则
用户评论
终于开始学习C#开发窗口程序了!
有12位网友表示赞同!
定制界面太酷了,可以完全按照自己的想法来设计!
有18位网友表示赞同!
自己创建窗体的过程是怎样的呢?有详细教程吗?
有10位网友表示赞同!
感觉自定义窗体可以打造出独一无二的软件体验!
有14位网友表示赞同!
以前只用过现成的窗体模板,不知道怎么定制界面,这篇文章很适合我。
有6位网友表示赞同!
我对C#编程还比较菜,这篇文章能帮我入门吗?
有12位网友表示赞同!
学习自定义窗体可以提升程序设计能力吧!
有17位网友表示赞同!
我想做一个游戏界面,不知道如何开始,自定义窗体应该很有用吧?
有17位网友表示赞同!
这个话题好深入,感觉需要多花点时间去理解。
有18位网友表示赞同!
想试试看能不能用C# 自定义窗体制作一个小工具!
有14位网友表示赞同!
学习新的技术总是让人兴奋!
有12位网友表示赞同!
自定义窗体可以实现很多创意,期待看到大家的作品分享!
有9位网友表示赞同!
这篇文章让我对C#编程更加感兴趣了。
有13位网友表示赞同!
感觉学习C#越来越流行,是不是一个不错的技能?
有13位网友表示赞同!
有没有什么好用的工具可以辅助定制窗体?
有6位网友表示赞同!
自定义窗体设计需要哪些知识点?
有9位网友表示赞同!
这个主题很专业,适合有一定编程基础的人学习吧!
有14位网友表示赞同!
我试着跟着教程一步步来完成一个简单窗体的例子。
有17位网友表示赞同!
学习C#自定义窗体应该能拓宽我的软件开发视野!
有11位网友表示赞同!