- PR -

DateTimePickerの開始曜日変更

1
投稿者投稿内容
oke
会議室デビュー日: 2004/05/01
投稿数: 1
投稿日時: 2004-05-01 11:41
okeと申します。

VB.netにて開発してます。
DateTimePickerを使用と思っているのですが、カレンダーの始まりを
月曜日する方法が分かりません。
ご存知の方いらっしゃいましたらご教授下さい。
(無理なのかな。。)
Sugi@ぱぱんぶぃびぃ
会議室デビュー日: 2003/11/17
投稿数: 6
投稿日時: 2004-05-06 14:25
MonthCalenderはFirstDayOfWeekプロパティを持っていますが、DateTimePickerにはないようですね。

で、アンマネージにはなりますが...

Win32のDATETIMEPICKコントロールはMONTHCALコントロールを持っており、
DTM_GETMONTHCALをSendMessageしてやることにより、MONTHCALコントロールの
ウィンドウハンドルを取得することができます。
これと同様にDateTimePickerに対しDTM_GETMONTHCALをSendMessageして
MONTHCALコントロールのウィンドウハンドルを求め、求めたMONTHCALコントロール
に対し、MCM_SETFIRSTDAYOFWEEKをSendMessageしてやれば、週の開始曜日を
変更することができます。


Private Const DTM_FIRST As Integer = &H1000
Private Const DTM_GETMONTHCAL As Integer = DTM_FIRST + 8

Private Const MCM_FIRST As Integer = &H1000
Private Const MCM_SETFIRSTDAYOFWEEK As Integer = MCM_FIRST + 15

Private Declare Ansi Function SendMessageInt Lib "User32.dll" Alias "SendMessageA" ( _
ByVal hwnd As IntPtr, ByVal wMsg As Integer, ByVal wParam As Integer, ByVal lParam As Integer) As Integer
Private Declare Ansi Function SendMessagePtr Lib "User32.dll" Alias "SendMessageA" ( _
ByVal hwnd As IntPtr, ByVal wMsg As Integer, ByVal wParam As Integer, ByVal lParam As Integer) As IntPtr

Private Sub DateTimePicker1_DropDown( _
ByVal sender As Object, ByVal e As System.EventArgs _
) Handles DateTimePicker1.DropDown
  'MONTHCALコントロールのウィンドウハンドルを求める
  Dim hMonthCal As IntPtr = SendMessagePtr(DateTimePicker1.Handle, _
                       DTM_GETMONTHCAL, 0, 0)
  If hMonthCal.Equals(IntPtr.Zero) = False Then
    '週の開始曜日を変更する。
    '4番目の引数が曜日(0=月, 1=火, ..... 6=日)
    SendMessageInt(hMonthCal, MCM_SETFIRSTDAYOFWEEK, 0, 0)
  End If
End Sub

詳しくはMSDNライブラリでMonthCal_GetFirstDayOfWeekマクロや
DateTime_GetMonthCalマクロについて調べてみてください。
1

スキルアップ/キャリアアップ(JOB@IT)