|
DateTimePickerで指定のキーでドロップダウン形式の予定表を表示したい 投稿日時: 2006-3-19 午後 12:53 |
お世話になっております。金です。
早速ですが、DateTimePickerで「ALT+↓」の押下で、ドロップダウン形式の予定表を表示したいのですが、どうすればよいでしょうか。
MSDNも調べて見ましたが、解決方法が見当たらなかったので、 質問させていただきました。
ご存知の方、ぜひご教授お願いします。 |
|
|
|
Re: DateTimePickerで指定のキーでドロップダウン形式の予定表を表示したい 投稿日時: 2006-3-21 午後 3:35 |
| WM_SYSKEYDOWNメッセージで VK_DOWNを送ってやればいいようですよ |
|
|
|
Re: DateTimePickerで指定のキーでドロップダウン形式の予定表を表示したい 投稿日時: 2006-3-21 午後 8:01 |
red fox63 さん
ご解答ありがとうございました。
>WM_SYSKEYDOWNメッセージで VK_DOWNを送ってやればいいようですよ 初心者なので、ちょっとやり方が思いつかないですが、 もうすこし詳しくおしえていただけますでしょうか。
宜しくお願いいたします。 |
|
|
|
Re: DateTimePickerで指定のキーでドロップダウン形式の予定表を表示したい 投稿日時: 2006-3-22 午前 1:29 |
では 開発は何でやっていますか? VB C# C++ どれでしょう?
C++なら
HANDLE hWndDTP;
hWndDTP = GetDlgItem( hWnd, IDC_DTP1);
SendMessage( hWndDTP, WM_SYSKEYDOWN, VK_DOWN, 0 );
といった具合でしょう
VBなら
Declare Function SendMessage Lib "User32" ( ByVal hWnd as IntPtr, _
ByVal nMsg as Integer, byVal wParam as Integer, byVal lParam as Integer) as integer
Const WM_SYSKEYDOWN = &H104
Const VK_DOWN = &h28
と宣言して
SendMessage( DTP1.Handle, WM_SYSKEYDOWN, VK_DOWN, 0 )
といった具合で実行
C#なら
[DllImport("User32.dll", EntryPoint:="SendMessageA"]
public static extern int SendMessage(IntPtr hWnd, int nMsg, int wParam, int lParam);
const WM_SYSKEYDOWN = 0x104;
const VK_DOWN = 0x28;
と宣言して
SendMessage( DTP1.Handle, WM_SYSKEYDOWN, VK_DOWN, 0 );
といった具合に実行 |
|
|
|
Re: DateTimePickerで指定のキーでドロップダウン形式の予定表を表示したい 投稿日時: 2006-3-25 午後 9:50 |
red fox63 さん
できました!!! いろいろ教えていただきたいへん助かりました。 どうもありがとうございました。
最後のサンプルソースは以下の通りです。
---------------------- using System; using System.Collections.Generic; using System.Text; using System.Data; using System.Windows.Forms; using System.Drawing;
namespace sample2 { public class CustomDateTimePicker : DateTimePicker { protected override bool ProcessKeyMessage(ref Message m) { // Keep all the keys for the DateTimePicker. return ProcessKeyEventArgs(ref m); }
protected override bool ProcessCmdKey(ref Message msg, Keys keyData) { const int WM_KEYDOWN = 0x100; const int WM_SYSTEMDOWN = 0x104; const int WM_SYSKEYDOWN = 0x104; const int VK_DOWN = 0x28; if (msg.Msg == WM_KEYDOWN || msg.Msg == WM_SYSTEMDOWN) {
if (keyData == Keys.Down) { SendMessage(this.Handle, WM_SYSKEYDOWN, VK_DOWN, 0); } }
return base.ProcessCmdKey(ref msg, keyData);
} [System.Runtime.InteropServices.DllImport("User32.dll",EntryPoint="SendMessageA")] public static extern int SendMessage(IntPtr hWnd, int nMsg, int wParam, int lParam);
private void FunctionKeyProcedure(Keys keyData) { //throw new Exception("The method or operation is not implemented."); MessageBox.Show(keyData.ToString()); }
} }
---------------------------------------------------
|
|
|