您的位置:首页 > 编程语言 > C#

[C# Winform] 利用C#开发的一款桌面程序---落雪---迎接2011

2010-12-31 14:26 309 查看
以程序员的方式迎接2011~~~

特此写了一款小型桌面程序,实现落雪的效果,并配有背景音乐

通过这个例子,也着实让我对windows的UI界面有了更多的理解

程序使用C#开发(因为项目原因,所以一直在写C#),不过在效果上没有用太多.NET的控件,而是大量使用了windows的API,这也让我弄明白了不少编程知识,呵呵,因为一直都不怎么会用这些windows的API

下面给出程序中使用的关键API函数:

//FindWindow:用于查找windows窗口
[DllImport("User32.dll ", EntryPoint = "FindWindow")]
static extern IntPtr FindWindow(string lpClassName,
string lpWindowName);
//FindWindowEx:根据父窗口来查找子窗口
[DllImport("User32.dll ")]
static extern IntPtr FindWindowEx(IntPtr parent, IntPtr
childe, string strclass, string strname);

//mciSendString:
//使用MCI Command String多媒体设备程序接口播放音乐
public static uint SND_ASYNC = 0x0001;
public static uint SND_FILENAME = 0x00020000;
[DllImport("winmm.dll")]
public static extern uint mciSendString(string
lpstrCommand, string lpstrReturnString, uint
uReturnLength, uint hWndCallback);


在处理图片显示问题上,使用双缓冲技术,以保证动画效果流畅,也是为了避免闪烁现象

//双缓冲
//获取当前应用的缓冲域
BufferedGraphicsContext current = BufferedGraphicsManager.Current;
BufferedGraphics bg;
//用桌面句柄创建缓冲区--DesktopHandle
bg = current.Allocate(Graphics.FromHwnd(DesktopHandle),
new Rectangle
(0, 0, Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height));
Graphics g = bg.Graphics; //获取输入到缓冲区的Graphics对象
//....
//...向缓冲区绘制
//....
//将图形缓冲区的内容写入相关联的设备,这里即桌面
bg.Render();
bg.Dispose();//一定要释放资源


以上是一些比较关键的地方,其他的就很好实现了,呵呵,主要还是要弄懂windows界面的层次结构

这里给出结构分析:

桌面的结构:相当于图像处理中的四个图层,且是透明图层

按类名由前至里的排序为:

   SysListView32

   SHELLDLL_DefView

   Progman

程序绘图时,是要在SysListView32这一层上绘制,即要获取SysListView32的句柄,进而获取其Graphics对象

最后,祝所有看到本文的朋友,元旦快乐,2011年快乐~~~~

程序已经上传我的资源中,供下载
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: