GroupBox上のコントロールとWndProc
- 題名: GroupBox上のコントロールとWndProc
- 著者: ゆきねこ
- 日時: 2005/07/06 15:52:39
- ID: 11638
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[1]: GroupBox上のコントロールとWndProc
- 著者: るしぇ
- 日時: 2005/07/08 11:20:04
- ID: 11689
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[2]: GroupBox上のコントロールとWndProc
- 著者: ゆきねこ
- 日時: 2005/07/11 21:21:39
- ID: 11729
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[3]: GroupBox上のコントロールとWndProc
- 著者: るしぇ
- 日時: 2005/07/12 11:14:30
- ID: 11733
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[1]: GroupBox上のコントロールとWndProc
- 著者: 深山
- 日時: 2005/07/15 23:03:12
- ID: 11834
- この記事の返信元:
- この記事への返信:
- ツリーを表示
分類:[.NET]
先日「DateTimePickerのカレンダークリック」でお世話になりました。
WndProc関数を使用することにより解決、と思ったのですが修正を進めていくうちに分からない点が発生してしまいました。
フォーム上に直接配置したDateTimePickerのカレンダークリックのイベントは
WndProc関数で捕捉することができたのですが、GroupBox上のDateTimePicker
では捕捉できませんでした。
調べてみるとControl毎にWndProc関数があるということが分かりましたので
DateTimePicker自身からイベントらしきものを発生できないものかと思い
DateTimePickerの継承コントロールを作成し、その中に以前教えていただいた
WndProc関数をOverrideしてみたところ、
「ウィンドウのハンドルを作成中にエラーが発生しました。」
とエラーが発生してしまいました。
分からないなりにやってみたことなので、とても見当違いなことをしているかも
しれませんが、もし何か解決方法がありましたらご教授いただけないでしょうか?
よろしくお願いします。
(以下は継承した(つもり)のコードです)
-----------------------------------------------
Public Class MyDateTimePicker
Inherits DateTimePicker
Private Structure NMHDR
Public hwndFrom As IntPtr
Public idFrom As Integer
Public code As Integer
End Structure
Private Structure NMDATETIMECHANGE
Public nmhdr As NMHDR
Public dwFlags As Integer
Public st As SYSTEMTIME
End Structure
Private Structure SYSTEMTIME
Public wYear As Short
Public wMonth As Short
Public wDayOfWeek As Short
Public wDay As Short
Public wHour As Short
Public wMinute As Short
Public wSecond As Short
Public wMilliseconds As Short
End Structure
Private Const WM_NOTIFY As Integer = &H4E
Private Const DTN_FIRST As Integer = (0 - 760)
Private Const DTN_DATETIMECHANGE As Integer = (DTN_FIRST + 1)
Protected Overrides Sub WndProc(ByRef m As Message)
Dim nmh As NMHDR = CType(m.GetLParam(nmh.GetType()), NMHDR)
If nmh.code = DTN_DATETIMECHANGE Then
Dim nmdate As NMDATETIMECHANGE = CType(m.GetLParam(nmdate.GetType()), NMDATETIMECHANGE)
Call MessageBox.Show("Click!")
End If
MyBase.WndProc(m)
End Sub
End Class