Winapi 模拟SysDateTimePick32的按键

Winapi 模拟SysDateTimePick32的按键,winapi,common-controls,Winapi,Common Controls,我想向SysDateTimePick32公共控件发送一个按键 想象一下下面的场景:有一个包含许多行和许多列的表,由用户绘制。当您在其中一列中单击“Enter”时,将创建一个SysDateTimePick32控件并将其放置到当前单元格中,以便您可以为该单元格的实际内容选择时间。这很好,但是我想让用户不用先按enter键就可以开始编辑时间 这意味着:表格处于“显示”模式,并且选择了一个单元格。还没有SysDateTimePick32控件。用户输入例如“3”而不是按enter键(从而创建并显示SysD

我想向SysDateTimePick32公共控件发送一个按键

想象一下下面的场景:有一个包含许多行和许多列的表,由用户绘制。当您在其中一列中单击“Enter”时,将创建一个SysDateTimePick32控件并将其放置到当前单元格中,以便您可以为该单元格的实际内容选择时间。这很好,但是我想让用户不用先按enter键就可以开始编辑时间

这意味着:表格处于“显示”模式,并且选择了一个单元格。还没有SysDateTimePick32控件。用户输入例如“3”而不是按enter键(从而创建并显示SysDateTimePick32)。现在应该创建并显示一个SysDateTimePick32,并向其发送之前键入的“3”,就像用户先按“enter”然后按“3”一样

我正在努力


SendMessage(sysDateTimePick32Handle,WM_KEYDOWN,'3',MAKELPARAM(1,0));

然而,这似乎不起作用。
向Win32控件(尤其是SysDateTimePick32)发送特定击键的“干净”方式是什么?

发送这样的击键充满了熊陷阱。目前还不清楚为什么它不起作用,尽管这是一种错误的方法。WM_KEYDOWN是已发布的,而不是已发送的,因此您应该改用PostMessage()。对于键入像“3”这样的键,您应该改为发送WM_CHAR,从而避免了正确设置修改键状态(Shift、Ctrl、Alt)的麻烦,并将活动键盘布局作为故障模式删除。如果这不合适,请选择SendInput()


请考虑减少这种易碎的方法。只要在焦点进入单元格时始终创建选择器。当您发现没有输入任何内容时,请将其销毁或忽略。

谢谢,这很有效。我使用PostMessage(hWnd,WM_CHAR,'3',0);(其中“3”是实际键入的密钥)否,如果已发送,请使用SendMessage。