【问题标题】:Trying to Understand Windows Forms and Threading in C#尝试理解 C# 中的 Windows 窗体和线程
【发布时间】:2014-01-16 07:23:22
【问题描述】:

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

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

编辑:我一直将其用作学习练习,而且我主要是从反复试验中学习,可能主要是错误

【问题讨论】:

  • 据我所知,这对你不起作用。您最底部的表单仍将位于桌面顶部,并且其图标将它们隐藏在视图之外,这不是您正在寻找的。如果您想了解 WinForms,只需查找初学者教程。但是,WPF 近来更为流行,所以我建议您学习一下。
  • 谢谢!我一定会调查的。我大部分时间都在尝试如何构建它,并且偶然发现了 winforms。

标签: c# multithreading winforms user-interface


【解决方案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?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-17
    • 2012-06-15
    • 1970-01-01
    相关资源
    最近更新 更多