0

SysDateTimePick32共通コントロールにキープレスを送信したいと思います。

次のシナリオを想像してみてください。ユーザーが作成した、多くの行と多くの列を持つテーブルがあります。これらの列の1つで「Enter」を押すと、SysDateTimePick32コントロールが作成されて現在のセルに配置されるため、このセルの実際のコンテンツの時間を選択できます。これは問題なく機能しますが、ユーザーが最初にEnterキーを押さなくても時刻の編集を開始できるようにしたいと思います。

つまり、テーブルは「表示」モードであり、セルが選択されています。SysDateTimePick32コントロールはまだありません。Enterキーを押す(したがって、SysDateTimePick32を作成して表示する)代わりに、ユーザーは「3」などと入力します。これで、SysDateTimePick32が作成されて表示され、ユーザーが「Enter」を押してから「3」を押したのと同じように、以前に入力した「3」が送信されます。

私はしようとしています

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

ただし、これは機能していないようです。Win32コントロール、特にSysDateTimePick32に特定のキーストロークを送信する「クリーンな」方法は何ですか?

4

1 に答える 1

1

そのようなキーストロークを送信すると、クマのわながいっぱいになります。それは間違った方法ですが、なぜそれが機能しないのかは明らかではありません。WM_KEYDOWNは送信されるのではなく投稿されるため、代わりにPostMessage()を使用する必要があります。「3」のようなキーを入力する場合は、代わりにWM_CHARを送信する必要があります。これにより、修飾キーの状態を適切に設定する手間が省け(Shift、Ctrl、Alt)、アクティブなキーボードレイアウトが障害モードとして削除されます。それが適切でない場合は、SendInput()を優先してください。

これを簡単にする、ハッキーでない方法を検討してください。フォーカスがセルに入るときは、常にピッカーを作成してください。何も入力されていないことがわかったら、それを破棄または無視します。

于 2013-01-22T13:13:25.660 に答える