2

是否可以“即时”更改 DTPicker 控件在一周的第一天使用的星期几?

我知道它使用系统一周的第一天(如控制面板中定义)进行此设置,但是否可以在不更改控制面板设置的情况下将其更改为使用另一天?

4

1 回答 1

4

试试这个,来自MikeD的旧 VB6 新闻组的帖子

您可以使用 Win32 API 使用 DTPicker 完成此操作。DTPicker 使用实际的 MonthView 控件。您可以向该控件发送MCM_SETFIRSTDAYOFWEEK 消息来更改一周的第一天。请注意,您必须(并且只能)在 DropDown 事件中执行此操作,因为在此之前,MonthView 控件不存在。在 CloseUp 事件之后,MonthView 被销毁。哦...一周第一天的值是 SendMessage 的 lParam(wParam 始终为 0)

Option Explicit 
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" 
(ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As 
Any) As Long 
Private Const MCM_FIRST                 As Long = &H1000& 
Private Const MCM_SETFIRSTDAYOFWEEK     As Long = (MCM_FIRST + 15) 
Private Const DTM_FIRST                 As Long = &H1000& 
Private Const DTM_GETMONTHCAL           As Long = (DTM_FIRST + 8) 
Private Sub DTPicker1_DropDown() 
    Dim hMonthview As Long 
    'Get hwnd of MonthView control 
    hMonthview = SendMessage(DTPicker1.hwnd, DTM_GETMONTHCAL, 0&, ByVal 0&) 
    'Set first day of week for MonthView, according to the following: 
    '   Value      Day of Week 
    '   0          Monday 
    '   1          Tuesday 
    '   2          Wednesday 
    '   3          Thursday 
    '   4          Friday 
    '   5          Saturday 
    '   6          Sunday 
    Call SendMessage(hMonthview, MCM_SETFIRSTDAYOFWEEK, 0&, ByVal 6&) 'first 
day of week = Sunday
End Sub 
于 2012-01-20T12:53:42.763 回答