从C#访问Win32 / MFC“Stuff”

时间:2010-07-20 15:54:20

标签: c# .net mfc

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

DateTimePicker automatically move to next datepart

显示了如何清除.NET中DateTimePicker的一些行为。不幸的是,代码无法编译,因为.NET无法理解WM_KEYDOWN类型的东西。我能够google并获得很多常量的值,比如

WM_KEYUP = 0x0101;

但我真的很难让NMHDR和WM_REFLECT工作。我需要在项目中添加某种Win32程序集才能使所有这些工作正常工作吗?

谢谢!

2 个答案:

答案 0 :(得分:3)

您需要使用所谓的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;
}

答案 1 :(得分:3)

访问pinvoke.net以获取这些声明。或者使用PInvoke Interop Assistant