2025-11-27 16:46:48 +09:00

161 lines
4.1 KiB
C++

// ==========================================================================
// COXTreeCal
// ==========================================================================
// Version: 9.3
// This software along with its related components, documentation and files ("The Libraries")
// is © 1994-2007 The Code Project (1612916 Ontario Limited) and use of The Libraries is
// governed by a software license agreement ("Agreement"). Copies of the Agreement are
// available at The Code Project (www.codeproject.com), as part of the package you downloaded
// to obtain this file, or directly from our office. For a copy of the license governing
// this software, you may contact us at legalaffairs@codeproject.com, or by calling 416-849-8900.
// //////////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "OXTreeCal.h"
#include "OXTreeCtrl.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
COXTreeCal::COXTreeCal():COXCalendar()
{
}
COXTreeCal::~COXTreeCal()
{
}
BEGIN_MESSAGE_MAP(COXTreeCal, COXCalendar)
ON_WM_KILLFOCUS()
ON_EN_KILLFOCUS(COXCalendar::IDEDIT, OnKillFocusEdit)
END_MESSAGE_MAP()
void COXTreeCal::Init(HTREEITEM hItem,int iItem,int iSubItem)
{
m_iItem= iItem;
m_iSubItem = iSubItem;
COXTreeCtrl *pTreeCtrl = (COXTreeCtrl*) GetParent();
CStringArray& sa = pTreeCtrl->GetItemTextEx(hItem,iSubItem);
m_wndEdit.SetWindowText(pTreeCtrl->GetItemText(hItem,iSubItem));
if(sa.GetSize() == 0)
return;
COleDateTime dtStart(0,0,0,0,0,0);
COleDateTime dtEnd(9999,12,31,0,0,0);
if(sa.GetSize() > 0)
{
CString sFirstDate = sa[0];
dtStart.ParseDateTime(sFirstDate);
}
if(sa.GetSize() > 1)
{
CString sEndDate = sa[1];
dtEnd.ParseDateTime(sEndDate);
}
SetDateRange(dtStart,dtEnd);
}
void COXTreeCal::OnKillFocus(CWnd* pNewWnd)
{
COXCalendar::OnKillFocus(pNewWnd);
if(pNewWnd)
{
if(pNewWnd->GetSafeHwnd() != m_wndEdit.GetSafeHwnd()
&& pNewWnd->GetSafeHwnd() != m_wndDatePicker.GetSafeHwnd())
{
CString str;
m_wndEdit.GetWindowText(str);
// Send Notification to parent
LV_DISPINFO di;
di.hdr.hwndFrom = GetParent()->m_hWnd;
di.hdr.idFrom = GetDlgCtrlID();
di.hdr.code = LVN_ENDLABELEDIT;
di.item.mask = LVIF_TEXT;
di.item.iItem = m_iItem;
di.item.iSubItem = m_iSubItem;
di.item.pszText = LPTSTR((LPCTSTR)str);
di.item.cchTextMax = str.GetLength();
GetParent()->GetParent()->SendMessage( WM_NOTIFY, GetParent()->GetDlgCtrlID(), (LPARAM)&di );
// and close window too
DestroyWindow();
}
}
}
BOOL COXTreeCal::Create(DWORD dwStyle,const CRect&r ,CWnd * pParentWnd,UINT nID)
{
return COXCalendar::Create(dwStyle,r,pParentWnd,nID);// initialization
}
void COXTreeCal::OnKillFocusEdit()
{
COleDateTime dt = GetCurrentDate();
COXCalendar::OnKillFocusEdit();
CWnd *pFocusWnd = GetFocus();
HWND hFocus = pFocusWnd->GetSafeHwnd();
if( hFocus != GetSafeHwnd() &&
hFocus != m_wndDatePicker.GetSafeHwnd())
FinishEdit(dt.GetStatus() == COleDateTime::valid ||
dt.GetStatus() == COleDateTime::null);
}
void COXTreeCal::PostNcDestroy()
{
COXCalendar::PostNcDestroy();
}
BOOL COXTreeCal::PreTranslateMessage(MSG* pMsg)
{
if(pMsg->message == WM_KEYDOWN )
{
if(pMsg->wParam == VK_RETURN && pMsg->hwnd == m_wndEdit.GetSafeHwnd())
{
COXCalendar::OnKillFocusEdit();
::TranslateMessage(pMsg);
::DispatchMessage(pMsg);
FinishEdit(TRUE);
return TRUE;
}
else if(pMsg->wParam == VK_ESCAPE)
{
::TranslateMessage(pMsg);
::DispatchMessage(pMsg);
FinishEdit(FALSE);
return TRUE;
}
}
return COXCalendar::PreTranslateMessage(pMsg);
}
void COXTreeCal::FinishEdit(BOOL bOK)
{
CString str;
m_wndEdit.GetWindowText(str);
// Send Notification to parent
LV_DISPINFO di;
di.hdr.hwndFrom = GetParent()->m_hWnd;
di.hdr.idFrom = GetDlgCtrlID();
di.hdr.code = LVN_ENDLABELEDIT;
di.item.mask = LVIF_TEXT;
di.item.iItem = bOK ? m_iItem : -1;
di.item.iSubItem = m_iSubItem;
di.item.pszText = LPTSTR((LPCTSTR)str);
di.item.cchTextMax = str.GetLength();
GetParent()->GetParent()->SendMessage( WM_NOTIFY, GetParent()->GetDlgCtrlID(),
(LPARAM)&di );
// and close window too
DestroyWindow();
}