从 C# 访问 Win32/MFC “Stuff”

Posted

技术标签:

【中文标题】从 C# 访问 Win32/MFC “Stuff”【英文标题】:Access Win32/MFC "Stuff" from C# 【发布时间】:2010-07-20 15:54:20 【问题描述】:

这篇文章中有一个很棒的代码示例:

DateTimePicker automatically move to next datepart

它展示了如何在 .NET 中清理 DateTimePicker 的一些行为。不幸的是,代码无法编译,因为 .NET 无法理解 WM_KEYDOWN 类型的东西。我能够通过谷歌搜索并获取许多常量的值,例如

WM_KEYUP = 0x0101;

但我真的无法让 NMHDR 和 WM_REFLECT 正常工作。我需要将某种 Win32 程序集添加到我的项目中以使所有这些工作正常吗?

谢谢!

【问题讨论】:

【参考方案1】:

您需要使用所谓的P/Invoke。

[...] 随着越来越多的开发者群体移动 其生产应用程序管理 代码,似乎很自然 将有更多的场合 开发商潜入 一些底层操作系统 功能的关键花絮——在 至少暂时。谢天谢地, 通用的互操作特性 语言运行时 (CLR),称为 平台调用(P/Invoke),非常 完成 [...]。

http://www.pinvoke.net/default.aspx/Constants/WM.html

private const UInt32 WM_KEYDOWN        = 0x0100;

http://www.pinvoke.net/default.aspx/Structures/NMHDR.html

[StructLayout(LayoutKind.Sequential)] 
struct NMHDR 

   public IntPtr hwndFrom;
   public IntPtr idFrom;
   public int code;

【讨论】:

【参考方案2】:

访问 pinvoke.net 了解这些声明。或使用PInvoke Interop Assistant。

【讨论】:

以上是关于从 C# 访问 Win32/MFC “Stuff”的主要内容,如果未能解决你的问题,请参考以下文章

C++ CLR win32 还是其他?

如何本地化 win32(非 MFC)DLL

Win32/MFC/COM学习推荐书籍

在无模式对话框中阻止 ESC 和 Enter 键(Win32,非 MFC)

使用 Win32/MFC 关闭并等待子框架窗口的最佳方法

使用 Win32/MFC 将 HTML 文件转换为 PDF