datetestforbldlg.cpp

来自「基于蓝牙设备的电话本设计,基于wince5.0标准sdk vs2005」· C++ 代码 · 共 437 行

CPP
437
字号
// DateTestForBLDlg.cpp : 实现文件
//

#include "stdafx.h"
#include "DateTestForBL.h"
#include "DateTestForBLDlg.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#endif

// CDateTestForBLDlg 对话框

CDateTestForBLDlg::CDateTestForBLDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CDateTestForBLDlg::IDD, pParent)
	, m_PhoneNum(_T(""))
	, m_Time(_T(""))
	, m_showtime(_T(""))
	, m_timeshow(_T(""))
{
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CDateTestForBLDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	DDX_Text(pDX, IDC_PhoneNum, m_PhoneNum);
	DDX_Text(pDX, IDC_Time, m_Time);
	DDX_Text(pDX, IDC_ShowTime, m_showtime);
	DDX_Text(pDX, IDC_TIMESHOW, m_timeshow);
}

BEGIN_MESSAGE_MAP(CDateTestForBLDlg, CDialog)
#if defined(_DEVICE_RESOLUTION_AWARE) && !defined(WIN32_PLATFORM_WFSP)
	ON_WM_SIZE()
#endif
	//}}AFX_MSG_MAP
	ON_BN_CLICKED(IDC_First, &CDateTestForBLDlg::OnFirst)
	ON_BN_CLICKED(IDC_Pre, &CDateTestForBLDlg::OnBnClickedPre)
	ON_BN_CLICKED(IDC_Next, &CDateTestForBLDlg::OnBnClickedNext)
	ON_BN_CLICKED(IDC_End, &CDateTestForBLDlg::OnBnClickedEnd)
	ON_BN_CLICKED(IDC_Add, &CDateTestForBLDlg::OnBnClickedAdd)
	ON_BN_CLICKED(IDC_Edit, &CDateTestForBLDlg::OnBnClickedEdit)
	ON_BN_CLICKED(IDC_Reflash, &CDateTestForBLDlg::OnBnClickedReflash)
	ON_BN_CLICKED(IDC_Save, &CDateTestForBLDlg::OnBnClickedSave)
	ON_BN_CLICKED(IDC_Dele, &CDateTestForBLDlg::OnBnClickedDele)
	ON_WM_TIMER()
	ON_EN_SETFOCUS(IDC_Time, &CDateTestForBLDlg::OnEnSetfocusTime)
END_MESSAGE_MAP()


// CDateTestForBLDlg 消息处理程序

BOOL CDateTestForBLDlg::OnInitDialog()
{
	CDialog::OnInitDialog();

	// 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
	//  执行此操作
	SetIcon(m_hIcon, TRUE);			// 设置大图标
	SetIcon(m_hIcon, FALSE);		// 设置小图标
   
	// TODO: 在此添加额外的初始化代码
	
//装载学生表到m_lstStudent队列
	CFile PhoneFile;
	CPhoneNumData PhoneData;
	DWORD dwRead;
      
	//如果数据文件存在,就读取
	ZeroMemory(&PhoneData,sizeof(PhoneData));
	if (PhoneFile.Open(PHONEFILEPATH,CFile::modeRead))
	{
		do
		{
			dwRead = PhoneFile.Read(&PhoneData,sizeof(PhoneData));
			if (dwRead != 0 )
			{
				m_lstPhoneNum.AddTail(PhoneData);
			}
		}while(dwRead > 0);
		//关闭数据文件
		PhoneFile.Close();
	}
	else  //创建文件
	{
		if (!PhoneFile.Open(PHONEFILEPATH,CFile::modeCreate|CFile::modeWrite))
		{
			AfxMessageBox(_T("datebase false"));
			return FALSE;
		}
		PhoneFile.Close();
	}

	//初始化界面显示
	
	if (m_lstPhoneNum.GetCount() > 0)
	{
		PhoneData = m_lstPhoneNum.GetHead();
		m_iCurPos = 0;
		//初始划第一条显示
		m_PhoneNum = PhoneData.PhoneNum;
		m_Time = PhoneData.CallTime;
      
		UpdateData(false);
	}
	
   
	SetControlEnable(FALSE);
	//设置指针移动按钮有效性
	SetNavigatorButton(m_iCurPos);
  SetTimer(1,1000,NULL);
	return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE
}

#if defined(_DEVICE_RESOLUTION_AWARE) && !defined(WIN32_PLATFORM_WFSP)
void CDateTestForBLDlg::OnSize(UINT /*nType*/, int /*cx*/, int /*cy*/)
{
	if (AfxIsDRAEnabled())
	{
		DRA::RelayoutDialog(
			AfxGetResourceHandle(), 
			this->m_hWnd, 
			DRA::GetDisplayMode() != DRA::Portrait ? 
			MAKEINTRESOURCE(IDD_DATETESTFORBL_DIALOG_WIDE) : 
			MAKEINTRESOURCE(IDD_DATETESTFORBL_DIALOG));
	}
}
#endif


void CDateTestForBLDlg::SetControlEnable(bool aValue)
{
	/*设置输入框的有效性*/
// 	((CEdit*)GetDlgItem(IDC_XSXM))->EnableWindow(aValue);  
// 	((CEdit*)GetDlgItem(IDC_XSXB))->EnableWindow(aValue);  
	((CEdit*)GetDlgItem(IDC_PhoneNum))->EnableWindow(aValue);  
	((CEdit*)GetDlgItem(IDC_Time))->EnableWindow(aValue);  
	/*设置指针移动按钮的有效性*/
	((CButton*)GetDlgItem(IDC_First))->EnableWindow(!aValue);    
	((CButton*)GetDlgItem(IDC_Pre))->EnableWindow(!aValue); 
	((CButton*)GetDlgItem(IDC_Next))->EnableWindow(!aValue); 
	((CButton*)GetDlgItem(IDC_End))->EnableWindow(!aValue); 
	/*设置操作按钮的有效性*/
	((CButton*)GetDlgItem(IDC_Add))->EnableWindow(!aValue);
	((CButton*)GetDlgItem(IDC_Edit))->EnableWindow(!aValue);
	((CButton*)GetDlgItem(IDC_Reflash))->EnableWindow(aValue);
	((CButton*)GetDlgItem(IDC_Save))->EnableWindow(aValue);
	((CButton*)GetDlgItem(IDC_Dele))->EnableWindow(!aValue);
}

void CDateTestForBLDlg::SetNavigatorButton(int aValue)
{
	//如果学生队列数据小于2
	if (m_lstPhoneNum.GetCount() < 2)
	{
		((CButton*)GetDlgItem(IDC_First))->EnableWindow(FALSE);
		((CButton*)GetDlgItem(IDC_Pre))->EnableWindow(FALSE);
		((CButton*)GetDlgItem(IDC_Next))->EnableWindow(FALSE);
		((CButton*)GetDlgItem(IDC_End))->EnableWindow(FALSE);
		return;		
	}
	//指针移到首部
	if (aValue == 0)
	{
		((CButton*)GetDlgItem(IDC_First))->EnableWindow(FALSE);
		((CButton*)GetDlgItem(IDC_Pre))->EnableWindow(FALSE);
		if (m_lstPhoneNum.GetCount() >=2)
		{
			((CButton*)GetDlgItem(IDC_Next))->EnableWindow(TRUE);
			((CButton*)GetDlgItem(IDC_End))->EnableWindow(TRUE);
		}
	}//如果指针移到末尾
	else if (aValue == m_lstPhoneNum.GetCount() - 1)
	{
		((CButton*)GetDlgItem(IDC_Next))->EnableWindow(FALSE);
		((CButton*)GetDlgItem(IDC_End))->EnableWindow(FALSE);
		if (m_lstPhoneNum.GetCount() >=2)
		{
			((CButton*)GetDlgItem(IDC_First))->EnableWindow(TRUE);
			((CButton*)GetDlgItem(IDC_Pre))->EnableWindow(TRUE);
		}
	}
	else
	{
		((CButton*)GetDlgItem(IDC_First))->EnableWindow(TRUE);
		((CButton*)GetDlgItem(IDC_Pre))->EnableWindow(TRUE);
		((CButton*)GetDlgItem(IDC_Next))->EnableWindow(TRUE);
		((CButton*)GetDlgItem(IDC_End))->EnableWindow(TRUE);
	}
}

void CDateTestForBLDlg::OnFirst()
{
	// TODO: 在此添加控件通知处理程序代码
	CPhoneNumData PhoneData = m_lstPhoneNum.GetHead();
	m_iCurPos = 0;
	//更新显示
	m_PhoneNum = PhoneData.PhoneNum;
	m_Time = PhoneData.CallTime;
	//m_xsxb = studentData.xb;
	//m_csqq = studentData.csrq;
	//m_bjmc = studentData.bjmc;
	UpdateData(false);
	//设置指针移动按钮有效性
	SetNavigatorButton(m_iCurPos);
}

void CDateTestForBLDlg::OnBnClickedPre()
{
	// TODO: 在此添加控件通知处理程序代码
	m_iCurPos--;
	POSITION pos = m_lstPhoneNum.FindIndex(m_iCurPos);
	CPhoneNumData PhoneData = m_lstPhoneNum.GetAt(pos);

	//更新显示
	m_PhoneNum = PhoneData.PhoneNum;
	m_Time = PhoneData.CallTime;
	UpdateData(false);
	//设置指针移动按钮有效性
	SetNavigatorButton(m_iCurPos);
}

void CDateTestForBLDlg::OnBnClickedNext()
{
	// TODO: 在此添加控件通知处理程序代码
	m_iCurPos++;
	POSITION pos = m_lstPhoneNum.FindIndex(m_iCurPos);
	CPhoneNumData PhoneData = m_lstPhoneNum.GetAt(pos);
	//更新显示
	m_PhoneNum = PhoneData.PhoneNum;
	m_Time = PhoneData.CallTime;
	UpdateData(false);
	//设置指针移动按钮有效性
	SetNavigatorButton(m_iCurPos);
}

void CDateTestForBLDlg::OnBnClickedEnd()
{
	// TODO: 在此添加控件通知处理程序代码
	CPhoneNumData PhoneData = m_lstPhoneNum.GetTail();
	m_iCurPos = m_lstPhoneNum.GetCount() - 1;
	//更新显示
	m_PhoneNum = PhoneData.PhoneNum;
	m_Time = PhoneData.CallTime;
	UpdateData(false);
	//设置指针移动按钮有效性
	SetNavigatorButton(m_iCurPos);

}

void CDateTestForBLDlg::OnBnClickedAdd()
{
	// TODO: 在此添加控件通知处理程序代码
    KillTimer(1);
	m_operID = 0 ; //表示添加操作
	m_PhoneNum = _T("");
	m_Time = m_timeshow;
	UpdateData(FALSE);
	SetControlEnable(TRUE);
}

void CDateTestForBLDlg::OnBnClickedEdit()
{
	// TODO: 在此添加控件通知处理程序代码
	if (m_lstPhoneNum.IsEmpty())
	{
		AfxMessageBox(_T("没有可编辑的记录"));
		return;
	}
	m_operID = 1 ; //表示编辑操作
	SetControlEnable(TRUE);
}

void CDateTestForBLDlg::OnBnClickedReflash()
{
	// TODO: 在此添加控件通知处理程序代码
	POSITION pos = m_lstPhoneNum.FindIndex(m_iCurPos);
	CPhoneNumData PhoneData = m_lstPhoneNum.GetAt(pos);
	//更新显示
	m_PhoneNum = PhoneData.PhoneNum;
	m_Time = PhoneData.CallTime;
	UpdateData(false);
	SetControlEnable(FALSE);
	//设置指针移动按钮有效性
	SetNavigatorButton(m_iCurPos);
}

void CDateTestForBLDlg::OnBnClickedSave()
{
	// TODO: 在此添加控件通知处理程序代码
	CPhoneNumData PhoneData;
	CFile PhoneFile;
	
	UpdateData(TRUE);
	switch (m_operID )
	{
	case 0 :  /*添加操作*/
		{

			/*将添加的东西写入文件*/
			ZeroMemory(&PhoneData,sizeof(PhoneData));
			wcscpy(PhoneData.CallTime,m_Time);
		    //wcscpy(PhoneData.CallTime,TempTime);
			wcscpy(PhoneData.PhoneNum,m_PhoneNum);
			
			PhoneFile.Open(PHONEFILEPATH,CFile::modeRead | CFile::modeWrite);
			PhoneFile.SeekToEnd();
			PhoneFile.Write(&PhoneData,sizeof(PhoneData));
			PhoneFile.Close();
			//更新内存队列
			m_lstPhoneNum.AddTail(PhoneData);

			SetControlEnable(FALSE);	
			//设置指针移动按钮有效性
			m_iCurPos = m_lstPhoneNum.GetCount()-1;
			SetNavigatorButton(m_iCurPos);
			break;
		}
	case 1: /*编辑操作*/
		{
			/*将添加的东西写入文件*/
			
			ZeroMemory(&PhoneData,sizeof(PhoneData));
			wcscpy(PhoneData.CallTime,m_Time);
			//wcscpy(PhoneData.CallTime,TempTime);
			wcscpy(PhoneData.PhoneNum,m_PhoneNum);
			
			PhoneFile.Open(PHONEFILEPATH,CFile::modeRead | CFile::modeWrite);
			PhoneFile.Seek(sizeof(PhoneData)*(m_iCurPos) ,CFile::begin);
			PhoneFile.Write(&PhoneData,sizeof(PhoneData));
			PhoneFile.Close();
			//更新内存队列
			m_lstPhoneNum.SetAt(m_lstPhoneNum.FindIndex(m_iCurPos),PhoneData);	

			SetControlEnable(FALSE);	
			//设置指针移动按钮有效性
			SetNavigatorButton(m_iCurPos);
			break;
		}
	}	
	SetTimer(1,1000,NULL);
}

void CDateTestForBLDlg::OnBnClickedDele()
{
	// TODO: 在此添加控件通知处理程序代码
	if (m_lstPhoneNum.IsEmpty())
	{
		AfxMessageBox(_T("没有可删除的记录"));
		return;
	}

	//先从队列中移除
	POSITION pos = m_lstPhoneNum.FindIndex(m_iCurPos);
	m_lstPhoneNum.RemoveAt(pos);
	if (m_iCurPos != 0)
	{
		m_iCurPos--;
	}
	//更新界面显示
	if (!m_lstPhoneNum.IsEmpty())
	{
		pos = m_lstPhoneNum.FindIndex(m_iCurPos);
		CPhoneNumData PhoneData = m_lstPhoneNum.GetAt(pos);

		//更新显示
		m_PhoneNum = PhoneData.PhoneNum;
		m_Time = PhoneData.CallTime;
		
		UpdateData(false);
	}
	else
	{
		//更新显示
		m_PhoneNum =_T(""); 
		m_Time = _T("");
		UpdateData(false);
	}
	SetControlEnable(FALSE);
	//设置指针移动按钮有效性
	SetNavigatorButton(m_iCurPos);
	//将文件重写
	CPhoneNumData PhoneData;
	CFile PhoneFile;
	PhoneFile.Open(PHONEFILEPATH,CFile::modeCreate | CFile::modeWrite);

	pos = m_lstPhoneNum.GetHeadPosition();
	for (int i=0;i<m_lstPhoneNum.GetCount();i++)
	{
		ZeroMemory(&PhoneData,sizeof(PhoneData));
		PhoneData = m_lstPhoneNum.GetNext(pos);
		PhoneFile.Write(&PhoneData,sizeof(PhoneData));
	}
	PhoneFile.Close();
}

void CDateTestForBLDlg::OnTimer(UINT_PTR nIDEvent)
{
	// TODO: 在此添加消息处理程序代码和/或调用默认值
	SYSTEMTIME showNowTime;  
	//获取系统时间类  
	GetLocalTime(&showNowTime);  
	//获取本地时间  
	CString TimeString;  
	//转换  
	CString temp,temp1,temp2,str1,str2;  
	TimeString.Format(_T("%4d%02d%02d%02d%02d%02d")  
		,showNowTime.wYear  
		,showNowTime.wMonth  
		,showNowTime.wDay  
		,showNowTime.wHour  
		,showNowTime.wMinute  
		,showNowTime.wSecond);   
	//定义时间格式  
	//当前系统时间准确时间_tandow_2007-10-10_by_MercuryXu  
	// other..... 
	this->UpdateData(TRUE);
	m_showtime = TimeString;
	m_timeshow = TimeString;
	//m_Time = TimeString;
	this->UpdateData(FALSE);
	//return TimeString;  
     CDialog::OnTimer(nIDEvent);  
}

void CDateTestForBLDlg::GetNowTime(void)
{

}

void CDateTestForBLDlg::OnEnSetfocusTime()
{
	// TODO: 在此添加控件通知处理程序代码

}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?