// ShowHireReg.cpp : implementation file
//
#include "stdafx.h"
#include "ylgl.h"
#include "ShowHireReg.h"
#include "MyMdi.H"
#include "HireDress.h"
#include "HireDress2.h"
#include "HireDressReturn.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// ShowHireReg
IMPLEMENT_DYNCREATE(ShowHireReg, MyFormView)
ShowHireReg::ShowHireReg()
: MyFormView(ShowHireReg::IDD)
{
	//{{AFX_DATA_INIT(ShowHireReg)
	m_filter = _T("");
	//}}AFX_DATA_INIT
}

ShowHireReg::~ShowHireReg()
{
}

void ShowHireReg::DoDataExchange(CDataExchange* pDX)
{
	MyFormView::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(ShowHireReg)
	DDX_Control(pDX, IDC_COMBO1, m_combo1);
	DDX_Control(pDX, IDC_LIST2, m_List1);
	DDX_Control(pDX, IDC_STATIC1, m_static1);
	DDX_CBString(pDX, IDC_COMBO1, m_filter);
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(ShowHireReg, MyFormView)
	//{{AFX_MSG_MAP(ShowHireReg)
	ON_BN_CLICKED(IDC_BUTclose, OnBUTclose)
	ON_BN_CLICKED(IDC_BUTTON1, OnButton1)
	ON_WM_TIMER()
	ON_NOTIFY(NM_DBLCLK, IDC_LIST2, OnDblclkList2)
	ON_CBN_SELCHANGE(IDC_COMBO1, OnSelchangeCombo1)
	ON_BN_CLICKED(IDC_BUTTON2, OnButton2)
	ON_BN_CLICKED(IDC_BUTTON3, OnButton3)
	ON_BN_CLICKED(IDC_BUTTON4, OnButton4)
	ON_BN_CLICKED(IDC_BUTTON5, OnButton5)
	ON_BN_CLICKED(IDC_BUTTON6, OnButton6)
	ON_NOTIFY(LVN_ITEMCHANGED, IDC_LIST2, OnItemchangedList2)
	ON_BN_CLICKED(IDC_BUTTON10, OnButton10)
	//}}AFX_MSG_MAP
	ON_NOTIFY(NM_CUSTOMDRAW, IDC_LIST2, OnCustomdrawList)
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// ShowHireReg diagnostics

#ifdef _DEBUG
void ShowHireReg::AssertValid() const
{
	MyFormView::AssertValid();
}

void ShowHireReg::Dump(CDumpContext& dc) const
{
	MyFormView::Dump(dc);
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// ShowHireReg message handlers

void ShowHireReg::OnInitialUpdate()
{
	MyFormView::OnInitialUpdate();
	GetDlgItem(IDC_BUTTON4)->EnableWindow(IsHasRights2new(41));
	GetDlgItem(IDC_BUTTON5)->EnableWindow(IsHasRights2new(41));
	GetDlgItem(IDC_BUTTON2)->EnableWindow(IsHasRights2new(41));
	GetDlgItem(IDC_BUTTON6)->EnableWindow(IsHasRights2new(42));
	GetDlgItem(IDC_BUTTON3)->EnableWindow(IsHasRights2new(49));

	// TODO: Add your specialized code here and/or call the base class
	CMyMdi Mdi;
	Mdi.SetSubView((CWnd*)GetParent(), (CWnd*)this);

	// Here we create the outbar control using the splitter as its parent
	// and setting its id to the first pane.
	CRect rc2;
	GetWindowRect(rc2);
	::MoveWindow(m_hWnd, g_rc.left, g_rc.top, g_rc.Width(), g_rc.Height(), TRUE);
	EnumChildWindows(m_hWnd, (WNDENUMPROC)EnumChildProc, 0);
	m_static1.SetFont(&g_titlefont);
	m_List1.SetHeadings("����,120;���,60;Ѻ��,60;����,60;�绰,60;������,60;����,90;ȡ����,90;������,90;��/��,60;��ע,150;���,100;����,60;�Ƿ��ջ�,90;����,90;������,80");
	m_List1.LoadColumnInfo(134);
	m_List1.m_bSortSupport = 0;
	g_sendhead.bsql = 0;
	g_sendhead.code[0] = 75;
	g_sendhead.tabcount = 1;
	g_pMainWnd->ProcessChatMessageRequest2(1); if (g_bSendOK == 0)return;
	DataToArray(&m_List1array);
	FillGrid();
	m_combo1.GetWindowRect(rc2);
	ScreenToClient(rc2);
	rc2.bottom += 200;
	m_combo1.MoveWindow(rc2);
	GetDlgItem(IDC_BUTclose)->GetWindowRect(rc2);
	SetComboHei(&m_combo1, rc2.Height());

	m_combo1.AddString("��");
	m_combo1.AddString("��");
}

void ShowHireReg::FillGrid()
{
	m_List1.DeleteAllItems2();
	int ii = 0;
	m_List1.m_arLabels.SetSize(m_List1array.GetSize(), 1);
	int count = 0;
	if (m_filter.IsEmpty())
	{
		for (ii = 0; ii < m_List1.m_arLabels.GetSize(); ii++)
		{
			m_List1.m_arLabels.ElementAt(count++).Copy(m_List1array.ElementAt(ii));
		}
	}
	else
	{
		for (ii = 0; ii < m_List1.m_arLabels.GetSize(); ii++)
		{
			if (m_List1array.ElementAt(ii).ElementAt(0).Find(m_filter) != -1 || \
				m_List1array.ElementAt(ii).ElementAt(1).Find(m_filter) != -1 || \
				m_List1array.ElementAt(ii).ElementAt(2).Find(m_filter) != -1 || \
				m_List1array.ElementAt(ii).ElementAt(3).Find(m_filter) != -1 || \
				m_List1array.ElementAt(ii).ElementAt(4).Find(m_filter) != -1 || \
				m_List1array.ElementAt(ii).ElementAt(5).Find(m_filter) != -1)
			{
				m_List1.m_arLabels.ElementAt(count++).Copy(m_List1array.ElementAt(ii));
			}
		}
	}
	m_List1.m_arLabels.SetSize(count, 1);
	ii = count;
	m_List1.m_LabelCount = ii;
	m_List1.SetItemCountEx(ii);
	CString str;
	str.Format("����:%d", ii);
	SetDlgItemText(IDC_STATIC2, str);

	CRect rc;
	GetDlgItem(IDC_STATIC2)->GetWindowRect(rc);
	ScreenToClient(rc);
	InvalidateRect(rc);
}

void ShowHireReg::OnBUTclose()
{
	// TODO: Add your control notification handler code here
	GetParent()->SendMessage(WM_CLOSE);
}

void ShowHireReg::OnTimer(UINT nIDEvent)
{
	// TODO: Add your message handler code here and/or call default
	KillTimer(nIDEvent);
	OnButton1();
}

BOOL ShowHireReg::PreTranslateMessage(MSG* pMsg)
{
	// TODO: Add your specialized code here and/or call the base class
	try
	{
		if (pMsg->message == WM_KEYDOWN)
		{
			switch (pMsg->wParam)
			{
			case VK_RETURN:
				OnButton1();
				return 1;
			case 0x43: // copy
				if ((GetKeyState(VK_CONTROL) & 0x80))
				{
					GetFocus()->SendMessage(WM_COPY);
					return TRUE;
				}
				break;
			case 0x56: //Ctrl + V:
				if ((GetKeyState(VK_CONTROL) & 0x80))
				{
					GetFocus()->SendMessage(WM_PASTE);
					return TRUE;
				}
				break;
			case 0x58: // cut
				if ((GetKeyState(VK_CONTROL) & 0x80))
				{
					GetFocus()->SendMessage(WM_CUT);
					return TRUE;
				}
				break;
			case 0x5A: //undo
			case 0x59: //redo
				if ((GetKeyState(VK_CONTROL) & 0x80))
				{
					GetFocus()->SendMessage(WM_UNDO);
					return TRUE;
				}
				break;
			}
		}
		return MyFormView::PreTranslateMessage(pMsg);
	}
	catch (...)
	{
	}
	return true;
}

void ShowHireReg::OnButton1()
{
	// TODO: Add your control notification handler code here
	UpdateData();
	m_filter.TrimLeft();
	m_filter.TrimRight();
	FillGrid();
}

void ShowHireReg::OnDblclkList2(NMHDR* pNMHDR, LRESULT* pResult)
{
	// TODO: Add your control notification handler code here
	if (IsHasRights2new(42) == 0)return;
	POSITION pos;
	pos = m_List1.GetFirstSelectedItemPosition();
	if (pos == NULL)
	{
		AfxMessageBox("����ѡ����Ҫ�޸ĵ�!", MB_ICONINFORMATION);
		return;
	}
	int iItem = m_List1.GetNextSelectedItem(pos);
	CString id = m_List1.GetItemText(iItem, 0);
	while (id == "")
	{
		iItem--;
		id = m_List1.GetItemText(iItem, 0);
	}
	if (m_List1.GetItemText(iItem, 9) == "ϴ")
	{
		HireDress2 dlg;
		dlg.m_id = id;
		dlg.m_bAdd = 0;
		if (dlg.DoModal() == IDOK)GetData();
	}
	else
	{
		HireDress dlg;
		if (m_List1.GetItemText(iItem, 9) == "��")
			dlg.m_bIsSale = 1;
		dlg.m_id = id;
		dlg.m_bAdd = 0;
		if (dlg.DoModal() == IDOK)GetData();
	}

	*pResult = 0;
}

void ShowHireReg::OnSelchangeCombo1()
{
	// TODO: Add your control notification handler code here
	SetTimer(1, 100, NULL);
}

void ShowHireReg::GetData()
{
	g_sendhead.bsql = 0;
	g_sendhead.code[0] = 75;
	g_sendhead.tabcount = 1;
	g_pMainWnd->ProcessChatMessageRequest2(1); if (g_bSendOK == 0)return;
	DataToArray(&m_List1array);
	FillGrid();
}

void ShowHireReg::OnButton3() // ɾ����ť;
{
	// TODO: Add your control notification handler code here
	if (IsHasRights2new(49) == 0)return;
	POSITION pos;
	pos = m_List1.GetFirstSelectedItemPosition();
	if (pos == NULL)
	{
		AfxMessageBox("����ѡ����Ҫɾ���ĵ�!", MB_ICONINFORMATION);
		return;
	}
	if (AfxMessageBox("����:ɾ�����¼����ʧ, ������?", MB_YESNO | MB_ICONSTOP) != IDYES)return;

	int iItem = m_List1.GetNextSelectedItem(pos);
	CString id = m_List1.GetItemText(iItem, 0);
	while (id == "")
	{
		iItem--;
		id = m_List1.GetItemText(iItem, 0);
	}
	/*	CString sql;
		sql="delete from [dresshire] where [id]='"+id+"'";
		sql+="***delete from [dresshiredata] where [id]='"+id+"'";
		sql+="***delete from [client] where [id]='"+id+"'";
		g_sendhead.bsql=1;
		g_pMainWnd->ProcessChatMessageRequest2(sql);if(g_bSendOK==0)return;
		GetData();*/
	/////���¿��
	CStringArray m_seldressarray;
	m_seldressarray.Add(id);
	CMemFile memfile;
	CArchive ar(&memfile, CArchive::store);
	m_seldressarray.Serialize(ar);
	ar.Close();
	int length = memfile.GetLength();
	BYTE *pData = memfile.Detach();
	g_nSendCode = 19;
	g_pMainWnd->ProcessChatMessageRequest2(pData, length);
	g_nSendCode = 0;
	delete[]pData; if (g_bSendOK == 0)return;
	GetData();
}

void ShowHireReg::OnButton4()	// ���ⰴť;
{
	// TODO: Add your control notification handler code here
	if (IsHasRights2new(41) == 0)return;
	HireDress dlg;
	if (dlg.DoModal() == IDOK)GetData();
}

void ShowHireReg::OnButton5()	// ���۰�ť;
{
	// TODO: Add your control notification handler code here
	if (IsHasRights2new(41) == 0)return;
	HireDress dlg;
	dlg.m_bIsSale = 1;
	if (dlg.DoModal() == IDOK)GetData();
}

void ShowHireReg::OnButton2()	// ���ذ�ť;
{
	// TODO: Add your control notifi cation handler code here
	if (IsHasRights2new(41) == 0)return;
	POSITION pos;
	pos = m_List1.GetFirstSelectedItemPosition();
	if (pos == NULL)
	{
		AfxMessageBox("����ѡ����Ҫ��������ĵ�!", MB_ICONINFORMATION);
		return;
	}
	int iItem = m_List1.GetNextSelectedItem(pos);
	CString id = m_List1.GetItemText(iItem, 0);
	while (id == "")
	{
		iItem--;
		id = m_List1.GetItemText(iItem, 0);
	}
	HireDressReturn dlg;
	dlg.m_id = id;
	if (dlg.DoModal() == IDOK)GetData();
}
void ShowHireReg::OnCustomdrawList(NMHDR* pNMHDR, LRESULT* pResult)
{
	NMLVCUSTOMDRAW* pLVCD = reinterpret_cast<NMLVCUSTOMDRAW*>(pNMHDR);
	// Take the default processing unless we set this to something else below.
	*pResult = 0;

	// First thing - check the draw stage. If it's the control's prepaint
	// stage, then tell Windows we want messages for every item.
	if (CDDS_PREPAINT == pLVCD->nmcd.dwDrawStage)
	{
		*pResult = CDRF_NOTIFYITEMDRAW;
	}
	else if (CDDS_ITEMPREPAINT == pLVCD->nmcd.dwDrawStage)
	{
		// This is the prepaint stage for an item. Here's where we set the
		// item's text color. Our return value will tell Windows to draw the
		// item itself, but it will use the new color we set here.
		// We'll cycle the colors through red, green, and light blue.
		COLORREF crText;
		int pos = pLVCD->nmcd.dwItemSpec;
		if (pos % 2)
			pLVCD->clrTextBk = g_gridcol1;
		else
			pLVCD->clrTextBk = g_gridcol2;
		while (m_List1.m_arLabels.ElementAt(pos).ElementAt(0).IsEmpty())
		{
			pos--;
			if (pos < 1)break;
		}

		if (m_List1.m_arLabels.ElementAt(pos).ElementAt(9) != "��" && m_List1.m_arLabels.ElementAt(pLVCD->nmcd.dwItemSpec).ElementAt(13) == "�")
			crText = RGB(220, 0, 0);
		else
			crText = RGB(20, 133, 20);

		// Store the color back in the NMLVCUSTOMDRAW struct.
		pLVCD->clrText = crText;

		// Tell Windows to paint the control itself.
		*pResult = CDRF_DODEFAULT;
	}
}


void ShowHireReg::OnItemchangedList2(NMHDR* pNMHDR, LRESULT* pResult)
{
	NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
	// TODO: Add your control notification handler code here
	if (IsHasRights2new(41) == 0)return;
	POSITION pos;
	pos = m_List1.GetFirstSelectedItemPosition();
	if (pos == NULL)
	{
		return;
	}
	int iItem = m_List1.GetNextSelectedItem(pos);
	int iItembak = iItem;
	while (m_List1.m_arLabels.ElementAt(iItem).ElementAt(0).IsEmpty())
	{
		iItem--;
	}

	if (m_List1.GetItemText(iItem, 9) != "��" && m_List1.GetItemText(iItembak, 13) == "�")
		GetDlgItem(IDC_BUTTON2)->EnableWindow(1);
	else
		GetDlgItem(IDC_BUTTON2)->EnableWindow(0);

	*pResult = 0;
}

void ShowHireReg::OnButton10()	// ��ϴ��ť;
{
	// TODO: Add your control notification handler code here
	if (IsHasRights2new(41) == 0)return;
	HireDress2 dlg;
	if (dlg.DoModal() == IDOK)GetData();
}

void ShowHireReg::OnButton6() // ��ӡ��ť;
{
	// TODO: Add your control notification handler code here
	POSITION pos;
	pos = m_List1.GetFirstSelectedItemPosition();
	if (pos == NULL)
	{
		return;
	}
	int iItem = m_List1.GetNextSelectedItem(pos);

	while (m_List1.m_arLabels.ElementAt(iItem).ElementAt(0).IsEmpty())
	{
		iItem--;
	}

#if 1
	g_pMainWnd->PrintHireDress(m_List1.GetItemText(iItem, 0));
#else
	g_pMainWnd->PrintHireDress_01(m_List1.GetItemText(iItem, 0));
#endif
}