// lyfzSMSHandleDlg.cpp : ʵ���ļ�
//

#include "stdafx.h"
#include "lyfzSMSHandle.h"
#include "lyfzSMSHandleDlg.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#endif

#if USE_TRAYICON
#define WM_MY_TRAY_NOTIFICATION WM_USER + 108
const UINT WM_TASKBARCREATED = ::RegisterWindowMessage(_T("lyfzSMSHandle"));
#endif
// ����Ӧ�ó��򡰹��ڡ��˵���� CAboutDlg �Ի���

class CAboutDlg : public CDialog
{
public:
	CAboutDlg();

	// �Ի�������
	enum {
		IDD = IDD_ABOUTBOX
	};

protected:
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV ֧��

	// ʵ��
protected:
	DECLARE_MESSAGE_MAP()
};

CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
END_MESSAGE_MAP()


// ClyfzSMSHandleDlg �Ի���
#if USE_TRAYICON
ClyfzSMSHandleDlg::ClyfzSMSHandleDlg(CWnd* pParent /*=NULL*/)
	: CDialog(ClyfzSMSHandleDlg::IDD, pParent), m_trayIcon(IDR_MAINFRAME)
#else
ClyfzSMSHandleDlg::ClyfzSMSHandleDlg(CWnd* pParent /*=NULL*/)
	: CDialog(ClyfzSMSHandleDlg::IDD, pParent)
#endif
{
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);

	m_bAutoRuning = AfxGetApp()->GetProfileInt(_T("lyfzSMSHandle"), _T("Autoruning"), 0);
#if USE_TRAYICON
	m_isNotify = TRUE;
	m_bNoticeTray = TRUE;
#endif
}

void ClyfzSMSHandleDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
}

BEGIN_MESSAGE_MAP(ClyfzSMSHandleDlg, CDialog)
	ON_WM_SYSCOMMAND()
	ON_WM_PAINT()
	ON_WM_QUERYDRAGICON()
#if USE_TRAYICON
	ON_MESSAGE(WM_MY_TRAY_NOTIFICATION, OnTrayNotification)
	ON_REGISTERED_MESSAGE(WM_TASKBARCREATED, OnTaskBarCreated)
#endif
	//}}AFX_MSG_MAP
	ON_COMMAND(Menu_AutoRun, &ClyfzSMSHandleDlg::OnAutorun)
	ON_COMMAND(Menu_Exit, &ClyfzSMSHandleDlg::OnExit)
	ON_BN_CLICKED(BTN_REFRESH, &ClyfzSMSHandleDlg::OnBnClickedRefresh)
	ON_WM_TIMER()
END_MESSAGE_MAP()


// ClyfzSMSHandleDlg ��Ϣ��������
#if USE_TRAYICON
void ClyfzSMSHandleDlg::InitTrayIcon()
{
	m_trayIcon.SetNotificationWnd(this, WM_MY_TRAY_NOTIFICATION);
	m_trayIcon.SetIcon(IDR_MAINFRAME, _T("���Ŵ�������"));
	m_trayIcon.SetIconInfos(IDI_ITRAY, IDI_ITRAY, IDI_ITRAY);
	m_trayIcon.SetDefaultTip(_T("���Ŵ�������"));
}

LRESULT ClyfzSMSHandleDlg::OnTaskBarCreated(WPARAM wp, LPARAM lp)
{
	Shell_NotifyIcon(NIM_ADD, &m_trayIcon.m_nid);
	return 0;
}

// Handle notification from tray icon: display a message.
LRESULT ClyfzSMSHandleDlg::OnTrayNotification(WPARAM uID, LPARAM lEvent)
{
	if (m_isNotify)
	{
		static LPCSTR MouseMessages[] = { "WM_MOUSEMOVE",
			"WM_LBUTTONDOWN", "WM_LBUTTONUP", "WM_LBUTTONDBLCLK",
			"WM_RBUTTONDOWN", "WM_RBUTTONUP", "WM_RBUTTONDBLCLK",
			"WM_MBUTTONDOWN", "WM_MBUTTONUP", "WM_MBUTTONDBLCLK" };
	}

	if (uID != IDR_MAINFRAME)
		return m_trayIcon.OnTrayNotification(uID, lEvent);

	switch (lEvent)
	{
	case WM_RBUTTONUP:
		TrayRight();
		break;
	case WM_LBUTTONUP:
		break;
	case WM_LBUTTONDBLCLK:
		TaskNotifyIcon();
		break;
	default:
		break;
	}
	return 0;
}

void ClyfzSMSHandleDlg::TrayRight()
{
	CMenu menu;
	if (!menu.LoadMenu(IDR_MENU1))
		return;

	CMenu* pSubMenu = menu.GetSubMenu(0);
	if (!pSubMenu)
		return;

	if (m_bAutoRuning)
		pSubMenu->CheckMenuItem(Menu_AutoRun, MF_BYCOMMAND | MF_CHECKED);
	else
		pSubMenu->CheckMenuItem(Menu_AutoRun, MF_BYCOMMAND | MF_UNCHECKED);

	CPoint point;
	GetCursorPos(&point);
	::SetForegroundWindow(m_hWnd);
	pSubMenu->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y, this);
}

void ClyfzSMSHandleDlg::TaskNotifyIcon()
{
	if (!m_bNoticeTray)
	{
		m_trayIcon.SetIcon(IDR_MAINFRAME, _T("���Ŵ�������"));
		ShowWindow(SW_SHOWNORMAL);
		m_bNoticeTray = TRUE;
	}
	else
	{
		m_trayIcon.SetIcon(IDR_MAINFRAME, _T("���Ŵ�������"));
		ShowWindow(SW_HIDE);
		m_bNoticeTray = FALSE;
	}
}
#endif

BOOL ClyfzSMSHandleDlg::OnInitDialog()
{
	SetWindowPos(&wndNoTopMost, 0, 0, 0, 0, SWP_HIDEWINDOW);
	ModifyStyleEx(WS_EX_APPWINDOW, WS_EX_TOOLWINDOW);

	CDialog::OnInitDialog();
	// ��������...���˵������ӵ�ϵͳ�˵��С�

	// IDM_ABOUTBOX ������ϵͳ���Χ�ڡ�
	ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
	ASSERT(IDM_ABOUTBOX < 0xF000);

	CMenu* pSysMenu = GetSystemMenu(FALSE);
	if (pSysMenu != NULL)
	{
		BOOL bNameValid;
		CString strAboutMenu;
		bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);
		ASSERT(bNameValid);
		if (!strAboutMenu.IsEmpty())
		{
			pSysMenu->AppendMenu(MF_SEPARATOR);
			pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
		}
	}

	// ���ô˶Ի����ͼ�ꡣ��Ӧ�ó��������ڲ��ǶԻ���ʱ����ܽ��Զ�
	//  ִ�д˲���
	SetIcon(m_hIcon, TRUE);			// ���ô�ͼ��
	SetIcon(m_hIcon, FALSE);		// ����Сͼ��

	// TODO: �ڴ����Ӷ���ij�ʼ������
	if (CDBInterface::GetInstance()->OpenDatabase() == FALSE)
	{
		LOG4C_NO_FILENUM((LOG_NOTICE,"�״����ݿ�����ʧ��,����������Ϣ�����ݿ�����Ƿ������������������Ϣ����ȷ,�������������������ų���"));
	}


	m_SMSHandle.GetMainInfo();

	SetDlgItemText(STC_ACCOUNT, m_SMSHandle.s_SMSInfo.msgaccount);
	SetDlgItemText(STC_REMAINING, m_SMSHandle.s_SMSInfo.msgbalance);
	SetDlgItemText(STC_HISTORYSEND, m_SMSHandle.s_SMSInfo.msgused);

	//SetTimer(0, 5000, NULL);
#if USE_TRAYICON
	InitTrayIcon();
#endif

	return TRUE;  // ���ǽ��������õ��ؼ������򷵻� TRUE
}

void ClyfzSMSHandleDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
	if ((nID & 0xFFF0) == IDM_ABOUTBOX)
	{
		CAboutDlg dlgAbout;
		dlgAbout.DoModal();
	}
	else
	{
		CDialog::OnSysCommand(nID, lParam);
	}
}

// �����Ի���������С����ť������Ҫ����Ĵ���
//  �����Ƹ�ͼ�ꡣ����ʹ���ĵ�/��ͼģ�͵� MFC Ӧ�ó���
//  �⽫�ɿ���Զ���ɡ�
void ClyfzSMSHandleDlg::OnPaint()
{
	if (IsIconic())
	{
		CPaintDC dc(this); // ���ڻ��Ƶ��豸������

		SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);

		// ʹͼ���ڹ����������о���
		int cxIcon = GetSystemMetrics(SM_CXICON);
		int cyIcon = GetSystemMetrics(SM_CYICON);
		CRect rect;
		GetClientRect(&rect);
		int x = (rect.Width() - cxIcon + 1) / 2;
		int y = (rect.Height() - cyIcon + 1) / 2;

		// ����ͼ��
		dc.DrawIcon(x, y, m_hIcon);
	}
	else
	{
		CDialog::OnPaint();
	}
}

//���û��϶���С������ʱϵͳ���ô˺���ȡ�ù��
//��ʾ��
HCURSOR ClyfzSMSHandleDlg::OnQueryDragIcon()
{
	return static_cast<HCURSOR>(m_hIcon);
}

void ClyfzSMSHandleDlg::OnAutorun()
{
	m_bAutoRuning = !m_bAutoRuning;
	AfxGetApp()->WriteProfileInt(_T("lyfzSMSHandle"), _T("Autoruning"), m_bAutoRuning);

	//BYTE szData[1024] = { 0 };
	//::GetModuleFileNameA(NULL, (LPSTR)szData, sizeof(szData));
	AddAutoSysRun((LPBYTE)g_szModuleFileName,_tcslen(g_szModuleFileName)*sizeof(TCHAR), _T("lyfzSMSHandle"), m_bAutoRuning);
}

void ClyfzSMSHandleDlg::OnExit()
{
	CDialog::OnOK();
}

void ClyfzSMSHandleDlg::OnCancel()
{
	ShowWindow(SW_HIDE);
	m_bNoticeTray = FALSE;
}

void ClyfzSMSHandleDlg::OnOK()
{
	ShowWindow(SW_HIDE);
	m_bNoticeTray = FALSE;
}


void ClyfzSMSHandleDlg::OnBnClickedRefresh()
{
	QuerAccountInfo tAccountInfo;
	m_SMSHandle.GetSMSBlance(tAccountInfo);

	SetDlgItemText(STC_REMAINING, tAccountInfo.strBalance);
	SetDlgItemText(STC_SIGNATURE, tAccountInfo.strSignatures);
	UpdateData();
}


void ClyfzSMSHandleDlg::OnTimer(UINT_PTR nIDEvent)
{
	if (nIDEvent == 0)
	{
		if (CDBInterface::GetInstance()->IsOpen() == FALSE)
		{
			SetDlgItemText(STC_DBCONNECTSTATUS, _T("ʧ��"));
			SetDlgItemText(STC_DBFAILDREASON, CDBInterface::GetInstance()->GetConnectErrorDescriptor());
		}
		else
		{
			SetDlgItemText(STC_DBCONNECTSTATUS, _T("����"));
			SetDlgItemText(STC_DBFAILDREASON, _T("��"));
		}

		if (m_SMSHandle.GetHTTPErrorInf() == _T(""))
		{
			SetDlgItemText(STC_SENDSMSSTATUS, _T("����"));
			SetDlgItemText(STC_SENDFAILDREASON, _T("��"));
		}
		else
		{
			SetDlgItemText(STC_SENDSMSSTATUS, _T("ʧ��"));
			SetDlgItemText(STC_SENDFAILDREASON, m_SMSHandle.GetHTTPErrorInf());
		}
	}

	CDialog::OnTimer(nIDEvent);
}