一、 窗体类
1、 图像窗体
(1)标准窗体
在文件 中,
!
其中 的值 "#$ 为设置标准窗体。
添加或修改:
图像文件在%& 文件中,
添加修改 ,在 中添加项目。
public Bitmap CutAlphaFormImage(int _style, int _width, int _height)
{
int select_wh = 25;
Bitmap _bmp = SQK_Ui.AlphaForm.frmResource.Res;
switch (_style)
{
case 1:
_bmp = SQK_Ui.AlphaForm.frmResource.Res;
select_wh = 25;
break;
case 2:
_bmp = SQK_Ui.AlphaForm.frmResource.Res1;
select_wh = 25;
break;
''
''
原理:将图像分为 $ 各部分,按照设定的高度、宽度进行延伸。
(( 为选择的范围
Bitmap sep_Left = _bmp.Clone(new Rectangle(0, 0, select_wh, select_wh),
System.Drawing.Imaging.PixelFormat.Format32bppPArgb);
Bitmap sep_Right = _bmp.Clone(new Rectangle(_bmp.Width - select_wh, 0,
select_wh, select_wh),
System.Drawing.Imaging.PixelFormat.Format32bppPArgb);
Bitmap sep_LeftBottom = _bmp.Clone(new Rectangle(0, _bmp.Height -
select_wh, select_wh, select_wh),
System.Drawing.Imaging.PixelFormat.Format32bppPArgb);
Bitmap sep_RightBottom = _bmp.Clone(new Rectangle(_bmp.Width -
select_wh, _bmp.Height - select_wh, select_wh, select_wh),
System.Drawing.Imaging.PixelFormat.Format32bppPArgb);
Bitmap sep_LeftFull = _bmp.Clone(new Rectangle(0, select_wh, select_wh,
select_wh), System.Drawing.Imaging.PixelFormat.Format32bppPArgb);
Bitmap sep_RightFull = _bmp.Clone(new Rectangle(_bmp.Width - select_wh,
select_wh, select_wh, select_wh),
System.Drawing.Imaging.PixelFormat.Format32bppPArgb);
Bitmap sep_TopFull = _bmp.Clone(new Rectangle(select_wh, 0, select_wh,
select_wh), System.Drawing.Imaging.PixelFormat.Format32bppPArgb);
Bitmap sep_BottomFull = _bmp.Clone(new Rectangle(select_wh, _bmp.Height
- select_wh, select_wh, select_wh),
System.Drawing.Imaging.PixelFormat.Format32bppPArgb);
两侧及顶底延伸:
int ta = (_width - select_wh * 2) / select_wh;
for (int i = 0; i < ta; i++)
{
bmp_block.DrawImage(sep_TopFull, select_wh + i * select_wh, 0,
select_wh, select_wh);
bmp_block.DrawImage(sep_BottomFull, select_wh + i * select_wh, _height -
select_wh, select_wh, select_wh);
}
int tb = _width - select_wh * 2 - ta * select_wh;
if (tb > 0)
{
bmp_block.DrawImage(sep_TopFull, _width - select_wh - tb, 0, tb,
select_wh);
bmp_block.DrawImage(sep_BottomFull, _width - select_wh - tb, _height -
select_wh, tb, select_wh);
}
该函数返回的是 图像,在窗体里可直接使用。
public partial class Form1 : AlphaForm
{
public Form1()
{
InitializeComponent();
/*无边框*/
FormBorderStyle = FormBorderStyle.None;
/*窗体大小*/
Size = new Size(600, 400);
/*指定窗体图像 基本图像样式:窗体样式.样式 1 ~ 窗体样式.样式 8*/
窗体图像 = new CutPixelAlphaImage().CutAlphaFormImage(窗体样式.
样式 1, Size.Width, Size.Height);
/*窗体位置*/
Location = new Point(200, 400);
/*窗体透明度 0.1 ~ 1(为不透明)*/
Opacity = 0.8;
}
}
也可以自定义图像当作窗体:窗体图像)
(2)动态窗体
基本的动态窗体采用的是 *提供的 + 点确定图像形状方式,窗体本身就是一副图像,再将窗体内所
有组件生成图像,与窗体合并为一副图像,再将窗体透明度设置为 ,,全透明,再旋转图像,完成动画后,
再将窗体按原透明度显示出来,最后关闭图像。
基本函数在 文件中
窗体内组件生成图像,在 -. 中
public class ControlMethods
{
public static Bitmap getFormControlToBmp(Control obj, Bitmap
backImg)
{
Bitmap bmp_clone = backImg.Clone(new Rectangle(0, 0,
backImg.Width, backImg.Height),
System.Drawing.Imaging.PixelFormat.Format32bppPArgb);
Graphics bmp_block = Graphics.FromImage(bmp_clone);
for (int i = obj.Controls.Count - 1; i >= 0; i--)
{
if (obj.Controls[i] is WebBrowser)
{
WebBrowser wb = (WebBrowser)obj.Controls[i];
while (wb.ReadyState !=
WebBrowserReadyState.Complete)
{
Application.DoEvents();
}
Bitmap screenshot = new Bitmap(wb.Width, wb.Height);
UiControlsMethod.WebBrowsMethods.webBrowsToImage(wb.ActiveXInstance,
screenshot, Color.White);
bmp_block.DrawImage(screenshot,
obj.Controls[i].Location);
}
else
{
Bitmap controlBmp = new
Bitmap(obj.Controls[i].Width, obj.Controls[i].Height);
obj.Controls[i].DrawToBitmap(controlBmp,
obj.Controls[i].ClientRectangle);
controlBmp.MakeTransparent();
bmp_block.DrawImage(controlBmp,
obj.Controls[i].Location);
}
}
return bmp_clone;
}
}
由于 / 和 & 不能生成图像,所以 / 使用
public class WebBrowsMethods 生成图像,& 使用截屏生成图像
在 中,按窗体取得全部组件生成图像,将全部窗体和每个窗体内组
件放入 0 中:
public class formList
{
public AlphaForm listForm;
public Bitmap listImg;
}
public List<formList> _formList = new List<formList>();
private void addFormInfo(AlphaForm form, Bitmap img)
{
_formList.Add(new formList
{
listForm = form,
listImg = img
});
}
public void _getPutFormInfo (AlphaForm _form)
{
addFormInfo(_form,
UiControlsMethod.ControlMethods.getFormControlToBmp(_form,_form.BlendedB
ackground));
}
(3)3D 动态窗体
原理:按照立方体旋转规则,取得 $ 个坐标点,按照 1 幅图像 2 点位置对每幅图像进行变形处理,
处理 +3 图像在 +34 文件夹内,动画原理与上面相同,就是图像的动态显示。 / 不是搞
+3 图像的料,效率较低,此类效果使用 / 或 536 类库比较好。这里用的方法,是我能够找到支
持透明、画质较高、速度最快的方法了。
用法在文件:-+ 74. 中。
需注意:如果使用了 8 这里 8 5 会被延迟,所以强制 使用
[DllImport("winmm.dll", EntryPoint = "timeBeginPeriod")]
public static extern uint _BeginPeriod(uint uMilliseconds);
[DllImport("winmm.dll", EntryPoint = "timeEndPeriod")]
public static extern uint _EndPeriod(uint uMilliseconds);
立体旋转按照每幅旋转图像 9, 度(9, 度后切换到第二幅图像)生成图像、2 点坐标位置放入数组,
再循环显示出来。为提高效率使用多线程:
System.Threading.Tasks. Parallel.For(0, 90, (i) =>
{ updateImage(i); });
初始化:
Initialize3dPut(AlphaForm _firstObj, AlphaForm _secondObj, Point origin,
int _first, int _second, int _type)
), 为左右旋转," 为上下旋转。
其他组件生成图像方法与前面相同。
这里所谓动态窗体,也就是各种图像的处理变换显示,不显示窗体:显示图像效果:显示窗体:关闭图像
的过程。
(4)3D 窗体切换
用法在文件:-+ 74. 中。
原理就是将 1 个窗体生成图像,作为立方体正反面进行旋转,和上面方法相同。不同的是,由于每个
窗体的内容会发生变化,比如在 里面输入的文字,所以在旋转前,将可见窗体的 9, 副图像重新
生成写入到内存中,再进行旋转。
也可以将图像数量进行缩减,这样可以提高处理速度。
(5)通用无边框阴影窗体
在 -/76 文件中,使用方法:
";76
<
"!
<
=!>