这篇文章中有一个很棒的代码示例:
DateTimePicker automatically move to next datepart
显示了如何清除.NET中DateTimePicker的一些行为。不幸的是,代码无法编译,因为.NET无法理解WM_KEYDOWN类型的东西。我能够google并获得很多常量的值,比如
WM_KEYUP = 0x0101;
但我真的很难让NMHDR和WM_REFLECT工作。我需要在项目中添加某种Win32程序集才能使所有这些工作正常工作吗?
谢谢!
答案 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。