试图在C#中理解Windows窗体和线程

时间:2014-01-16 07:23:23

标签: c# multithreading winforms user-interface

最近我一直在做一个Windows壁纸管理器。它将扫描多个目录以查找图像,并具有可自定义的设置窗口。此外,我想绕过内置的壁纸,而是使用基于此处讨论的想法的Windows窗体:Setting a Windows form to be bottommost,以便更好地控制图像放置。我已经构建了文件操作来查找壁纸以及其他各种支持操作。 但是,我对如何正确实现Windows窗体感到困惑。不仅仅是上面的Stack Overflow帖子中的那个。到目前为止,我的CompSci课程(目前为止7个)都没有讨论过GUI,因此我不知道如何工作。我转向互联网学习如何使用GUI。虽然我学到了很多东西来开始一个线程,或者展示一个表单,但我从来没有找到任何描述使用GUI设计应用程序的正确方法的东西。我在设计应用程序方面所学到的只是限制线程数,并尝试将GUI与非GUI相关代码分开(如果有意义的话)。

就像我说的那样,我不知道自己在做什么。如果有人愿意给我指点甚至是关于这个主题的链接,那就太棒了!

编辑:我一直在使用这个作为学习练习,而且我大部分时间都是从反复试验中学习,可能主要是错误

1 个答案:

答案 0 :(得分:1)

要在真实桌面上绘图,您需要获得它的句柄:GetDesktopWindow是要使用的函数。但要更改壁纸,不要在桌面上绘制,而是使用专用API处理桌面壁纸:SystemParametersInfo(SPI_SETDESKWALLPAPER, ...)。还有传统的COM Shell界面,IActiveDesktopIActiveDesktop::SetWallpaper

正如您所看到的,操作桌面和壁纸的API都不会被管理(C#,。Net),因此您必须跳过一些箍来从C#开始工作。如果您的目标是学习C#风格的UI,我建议坚持使用“祝福”的方式(winforms,WPF等)并且不要试图直接跳到p-Invoke和COM互操作。也许你可以选择另一个项目,例如。以图像形式在旋转木马中显示图像/图片。

如果您仍然感到好奇,Google可以使用C#和SystemParametersInfo或IActiveDesktop,您可以在托管C#中找到如何执行此操作的示例,这里有许多示例,就在StackOverflow上。

奖金:当然Raymond Chen有一个关于这个主题的博客:How do I put a different wallpaper on each monitor?

相关问题