【问题标题】:Using C# Winforms with Win32在 Win32 中使用 C# Winforms
【发布时间】:2012-09-24 09:07:18
【问题描述】:

我是 Win32 的新手,对 C# 不是很熟悉,所以请多多包涵。我在学校有一个项目,涉及制作音频编辑程序,我们可以选择使用哪种语言。我决定通过结合使用 C# 和 Win32 来让自己变得陌生。

到目前为止,我在这方面的进展是创建一个 Winforms 项目,废弃所有 Winforms 代码,并使用 Win32 API 创建一个窗口。我不知道如何使用 Winforms 操作窗口或以有意义的方式使用 .NET 框架中的任何其他内容。

我的问题是,有没有办法获取使用 Win32 API 创建的窗口并使用 Winforms 对其进行编辑?例如,将窗口句柄传递给我的表单,对其进行编辑,然后查看已创建的窗口中反映的更改?让我知道这是否没有意义。我很难找到很多关于此的文档,但也许我只是在错误的地方搜索。如果您可以让我知道任何可能有帮助的资源,或者在正确的方向上提供帮助,我们将不胜感激。

【问题讨论】:

  • 使用 WinAPI 的 Winforms?那是什么样的组合?这真是一个奇怪的想法。如果您想在 C++ 项目中使用 WinAPI,请不要使用 .NET。如果您想使用 .NET,请完全使用它。
  • 为什么不使用 C# + Winforms + NAudio 而不是用 C# 和 Winforms 强制 Win32 呢?或者如果您更熟悉 C++,可以尝试 C++/Cli?
  • 我想帮忙,但我无法想象你为什么要这样做。为什么不直接使用 WinForms 表单,毕竟它们只是下面的 Win32 窗口?仅仅是因为您没有使用 WinForms 的经验吗?如果是这样,我认为学习 WinForms 会更容易,然后解决集成这些东西的所有问题。否则,您可以在 WTL 甚至 MFC 之类的帮助下坚持使用 C++ 进行简单的 Win32 开发。
  • 我认为我只是把它倒过来了,现在它更有意义了。我想这样做的原因是我可以了解 Winforms 如何与 winapi 交互,以便我可以在需要时更好地控制窗口。

标签: c# .net winforms winapi


【解决方案1】:

我认为你是在倒退。 winforms 的基本思想是保持大部分代码受管理,然后 P/Invoke 仅在必要时使用本机 API。

您可以通过can get for free 阅读大量书籍来帮助您开始使用 C#。

【讨论】:

  • 谢谢,这实际上更有意义。我现在尝试以另一种方式做这件事很愚蠢......
【解决方案2】:

来自窗口句柄的 Windows 窗体,hWnd 的句柄为 IntPtr

using System.Windows.Forms;
(Form)Control.FromHandle(hWnd)

【讨论】:

    猜你喜欢
    • 2020-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-10
    • 1970-01-01
    • 2011-06-02
    • 1970-01-01
    相关资源
    最近更新 更多