模拟SysDateTimePick32的按键

时间:2013-01-22 11:26:38

标签: winapi common-controls

我想将按键发送到SysDateTimePick32公共控件。

想象一下以下场景:有一个包含许多行和多列的表,这是用户绘制的。当您在其中一列中点击“Enter”时,会创建一个SysDateTimePick32控件并将其放入当前单元格中,以便您可以为此单元格的实际内容选择一个时间。这工作正常,但我想让用户开始编辑时间而不先按Enter键。

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

我正在尝试

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

但是,这似乎不起作用。 将特定击键发送到Win32控件的“干净”方法是什么,尤其是SysDateTimePick32?

1 个答案:

答案 0 :(得分:1)

发送类似的击键充满了熊陷阱。目前尚不清楚为什么它不起作用,尽管这是错误的方式。 WM_KEYDOWN已发布,未发送,因此您应该使用PostMessage()。对于输入像'3'这样的键,您应该发送WM_CHAR,这样可以避免让正确设置修改键状态(Shift,Ctrl,Alt)的麻烦,并将活动键盘布局移除为失败模式。如果这不合适,请使用SendInput()。

请考虑采用不那么简单的方法来简化这一过程。只需在焦点进入单元格时始终创建选取器。当您发现没有输入任何内容时,销毁或忽略它。