www.gusucode.com > VC++个人考勤软件源代码-源码程序 > VC++个人考勤软件源代码-源码程序/code/DualListDialog.cpp

    // DualListDialog.cpp : implementation file
// Download by http://www.NewXing.com

#include "stdafx.h"
#include "attendance.h"
#include "DualListDialog.h"
//#include "math.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CDualListDialog dialog


CDualListDialog::CDualListDialog(CWnd* pParent /*=NULL*/)
	: CDialog(CDualListDialog::IDD, pParent)
{
	//{{AFX_DATA_INIT(CDualListDialog)
	//}}AFX_DATA_INIT
}


void CDualListDialog::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CDualListDialog)
	DDX_Control(pDX, IDOK, m_BtnOk);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CDualListDialog, CDialog)
	//{{AFX_MSG_MAP(CDualListDialog)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CDualListDialog message handlers

BOOL CDualListDialog::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	// TODO: Add extra initialization here
    // ADDED TO DEFAULT THE LISTS.
    // This code will need to be replaced with your application specific 
    // code that knows what belongs in each list.
//	if(
	int mth = m_pParentDlg->sAttend[0].tAmOnDuty.GetMonth();
	CString s;
	s.Format("%d月份工作日、公休日设定",mth);
	SetWindowText(s);
	bool bIsCur=m_pParentDlg->sYearTotal[m_pParentDlg->m_iTotalSel].sAttend[0].tAmOnDuty.Format("%Y%m")==m_pParentDlg->m_Time.Format("%Y%m") ?  true : false;
	m_BtnOk.EnableWindow(bIsCur);
	
/*	{
		m_BtnAdd.EnableWindow(true);
		m_BtnRemove.EnableWindow(false);
		m_BtnRemoveAll.EnableWindow(false);
	}
	    m_DualListManager.AddItemToAvailableList(_T("Red"), 0);
    m_DualListManager.AddItemToAvailableList(_T("Green"), 1);
    m_DualListManager.AddItemToAvailableList(_T("Blue"), 2);
    m_DualListManager.AddItemToChoosenList(_T("Yellow"), 3);
    m_DualListManager.AddItemToChoosenList(_T("Purple"), 4);
    m_DualListManager.AddItemToChoosenList(_T("Orange"), 5);
*/	int day = m_pParentDlg->sAttend[0].tAmOnDuty.GetDay();
	int wk =m_pParentDlg->sAttend[0].tAmOnDuty.GetDayOfWeek();//1..7

	int year = m_pParentDlg->sAttend[0].tAmOnDuty.GetYear();
	//int mth = m_pParentDlg->sAttend[0].tAmOnDuty.GetMonth();
	int monthday=MonthDay[mth-1];
	if(mth==2 && fmod(year,4)==0)
		monthday++;
	int	wks = day/7;
	int surplus = fmod(day-1,7);//0..6

	int wk1 = surplus>=wk ? wk+7-surplus : wk-surplus;
	
	for(int i=0;i<monthday;i++)
	{
		CString s;
		s.Format("%d月%2d日 ",mth,i+1);
		wk = wk1+fmod(i,7);
		if(wk>7) wk-=7;
		
		s += WeekTable[wk-1];
		if(m_pParentDlg->m_iHoliday==-1)
		{
		if(wk==1 || wk==7)
			m_DualListManager.AddItemToChoosenList(s, i);
		else
			m_DualListManager.AddItemToAvailableList(s, i);
		}
		else
		{
			int n=i+1;
			for(int j=0;(j<m_pParentDlg->m_iHoliday) && (m_pParentDlg->m_ArrayHoliday[j]!=n);j++)
				;
			if(j<m_pParentDlg->m_iHoliday && m_pParentDlg->m_ArrayHoliday[j]==i+1)
				m_DualListManager.AddItemToChoosenList(s, i);
			else if(j==m_pParentDlg->m_iHoliday)
				m_DualListManager.AddItemToAvailableList(s, i);
		}

	}

    // ADDED TO INITIALIZE THE MANAGER CLASS
    m_DualListManager.InitializeControls(this, 
                                         IDC_DLG_LIST_AVAILABLE,
                                         IDC_DLG_LIST_CHOOSEN, 
                                         IDC_DLG_ADD,
                                         NULL,//IDC_DLG_ADD_ALL,
                                         IDC_DLG_REMOVE,
                                         IDC_DLG_REMOVE_ALL,
                                         NULL,//IDC_DLG_MOVE_UP,
                                         NULL,
										 bIsCur);//IDC_DLG_MOVE_DOWN);

	
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

BOOL CDualListDialog::OnCmdMsg(UINT nID, int nCode, void* pExtra, AFX_CMDHANDLERINFO* pHandlerInfo) 
{
	// TODO: Add your specialized code here and/or call the base class
    m_DualListManager.ProcessCmdMsg(nID, nCode);
	
	return CDialog::OnCmdMsg(nID, nCode, pExtra, pHandlerInfo);
}

void CDualListDialog::OnOK() 
{
	// TODO: Add extra validation here
	CListBox* pChoosen = (CListBox*)this->GetDlgItem(IDC_DLG_LIST_CHOOSEN);
	int iCount = pChoosen->GetCount();
	m_pParentDlg->m_iHoliday=iCount;
	m_pParentDlg->m_ArrayHoliday.SetSize(iCount);
    for(int iIndex = 0; iIndex < iCount; ++iIndex)
    {
		//long l=pChoosen->GetItemData(iIndex);
		//pDlg->m_ArrayHoliday[iIndex] = m_ArrayChoosen[iIndex]+1;
		m_pParentDlg->m_ArrayHoliday[iIndex] = pChoosen->GetItemData(iIndex)+1;
		//l=m_pParentDlg->m_ArrayHoliday[iIndex];
	}
	CListBox* pAvailable = (CListBox*)this->GetDlgItem(IDC_DLG_LIST_AVAILABLE);
	m_pParentDlg->m_iWorkDays = pAvailable->GetCount();
	
	CDialog::OnOK();
}