从 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”的主要内容,如果未能解决你的问题,请参考以下文章