我的目標是在.NET 2.0中創建自定義DateTimePicker類,該類顯示自定義日曆下拉列表而不是Windows默認日曆彈出窗口。使用派生的DateTimePicker類顯示自定義日曆下拉菜單
通過觀察Windows消息(請參閱附加代碼),我可以在創建後查找並隱藏/關閉日曆窗口。
但是,問題仍然存在:日曆窗口關閉後,某些內容仍然阻止了鼠標輸入。例如,如果您嘗試在以編程方式關閉日曆下拉列表後最大化自定義DateTimePicker控件的所有者窗體(附加代碼),則最大化按鈕不響應。只有下一次點擊纔有效。有趣的是,「非功能性點擊」觸發了DTN_CLOSEUP通知,因此看起來WM_CLOSE沒有正確關閉日曆。
如何完成我的任務任何提示的高度讚賞:)
protected override void WndProc(ref System.Windows.Forms.Message m)
{
if (m.Msg == (int)SYSMSG.WM_REFLECT + (int)SYSMSG.WM_NOTIFY)
{
NMHDR nmhdr = (NMHDR)m.GetLParam(typeof(NMHDR));
switch (nmhdr.code)
{
case DTN_DROPDOWN:
// Hide window
IntPtr calHandle = FindWindow("SysMonthCal32", null);
SendMessage(calHandle, (int)SYSMSG.WM_SIZE, 0, SP.Convert.MakeLong(0, 0));
this.BeginInvoke((MethodInvoker)delegate()
{
SendMessage(calHandle, (int)SYSMSG.WM_CLOSE, 0, 0);
});
break;
}
}
base.WndProc(ref m);
}
嗨,我在哪裏可以找到'DTN_DROPDOWN'實際消息的代碼?瀏覽網頁,但他們只提到名稱而不是代碼。謝謝。 – superfly71 2016-11-14 10:18:15
沒關係我的問題在這裏得到了解答http://stackoverflow.com/questions/40587540/where-can-i-get-the-actual-message-codes-for-the-winform-datetimepicker-control – superfly71 2016-11-17 08:22:06