⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 formpb.cpp

📁 PPC开发的代码
💻 CPP
字号:
// FormPB.cpp : implementation file
//

#include "stdafx.h"
#include "MoblieX.h"
#include "FormPB.h"

#include "phoneBook.h"

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

/////////////////////////////////////////////////////////////////////////////
// CFormPB

IMPLEMENT_DYNCREATE(CFormPB, CFormView)

CFormPB::CFormPB()
	: CFormView(CFormPB::IDD)
{
	//{{AFX_DATA_INIT(CFormPB)
	m_itemID = 0;
	m_name = _T("");
	m_phoneNo = _T("");
	m_pbmRadio = 0;
	m_pbDes = _T("");
	//}}AFX_DATA_INIT
	m_pbmID = PBM_ME;
}

CFormPB::~CFormPB()
{
}

void CFormPB::DoDataExchange(CDataExchange* pDX)
{
	CFormView::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CFormPB)
	DDX_Control(pDX, IDC_PB_DES, m_pbDesCtrl);
	DDX_Control(pDX, IDC_LIST, m_listCtrl);
	DDX_Text(pDX, IDC_ITEM_ID, m_itemID);
	DDX_Text(pDX, IDC_NAME, m_name);
	DDX_Text(pDX, IDC_PHONE_NO, m_phoneNo);
	DDX_Radio(pDX, IDC_PB_ME, m_pbmRadio);
	DDX_Text(pDX, IDC_PB_DES, m_pbDes);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CFormPB, CFormView)
	//{{AFX_MSG_MAP(CFormPB)
	ON_BN_CLICKED(IDC_PB_ADD, OnPbAdd)
	ON_BN_CLICKED(IDC_PB_DEL, OnPbDel)
	ON_BN_CLICKED(IDC_PB_MD, OnPbMd)
	ON_BN_CLICKED(IDC_PB_ME, OnPbMe)
	ON_BN_CLICKED(IDC_PB_SM, OnPbSm)
	ON_LBN_SELCHANGE(IDC_LIST, OnSelchangeList)
	ON_COMMAND(ID_PB_UPDATE, OnPbUpdate)
	ON_COMMAND(ID_PB_GET, OnPbGet)
	ON_UPDATE_COMMAND_UI(ID_PB_GET, OnUpdatePbGet)
	ON_COMMAND(ID_PB_LOAD, OnPbLoad)
	ON_COMMAND(ID_PB_SAVE, OnPbSave)
	ON_COMMAND(ID_PB_PUT, OnPbPut)
	ON_COMMAND(ID_PB_REMOVE_ALL, OnPbRemoveAll)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CFormPB diagnostics

#ifdef _DEBUG
void CFormPB::AssertValid() const
{
	CFormView::AssertValid();
}

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

/////////////////////////////////////////////////////////////////////////////
// CFormPB message handlers

void CFormPB::PhoneBookUpdate()
{
CPhoneBook & pb = GetDocument()->GetPhoneBook( m_pbmID );
int i, size;

	m_pbDes.Format( "号码本容量为%d条, 已用%d条",
		pb.GetPhoneBookTotalSize(), pb.GetPhoneBookSize() );
	m_itemID = 0;
	m_name.Empty();
	m_phoneNo.Empty();

	m_listCtrl.ResetContent();
	size = pb.GetPhoneBookSize();
	for( i = 0; i < size; i++ )
	{
		m_listCtrl.AddString( pb.GetItemShortDes( i ) );
	}

	UpdateData( FALSE );
}

void CFormPB::OnPbMd() 
{
	if( !CheckCommState() )
		return;

	UpdateData();

int i;
	if( ( i = m_listCtrl.GetCurSel() ) == LB_ERR )
	{
		MessageBox( "没有指定要修改的条目" );
		return;
	}
CPhoneBook & pb = GetDocument()->GetPhoneBook( m_pbmID );

	if( !pb.IsValidItemID( m_itemID ) )
	{//无效编号
		MessageBox( "指定的编号无效, 修改失败" );
		return;
	}

	if( !pb.IsSameItemID( i, m_itemID ) )
	{
		if( pb.IsEmptyItemID( m_itemID ) )
		{
			MessageBox( "提示: 由于原编号已被改变, 将生成一个新条目" );
			i = pb.AddItem( m_itemID, m_name, m_phoneNo );
			if( i <= 0 )
			{//可能是某些参数非法
				MessageBox( "修改失败, 数据不合要求" );
				return;
			}
			GetDocument()->SendCommandStr( pb.GetCommand( PBC_CPBS_SET), CW_CPBS_SET );
			GetDocument()->SendCommandStr( pb.GetCommandWriteItem(i), CW_CPBW_SET );
			m_listCtrl.AddString( pb.GetItemShortDes(i) );
			m_listCtrl.SetCurSel( i );
			OnSelchangeList();
		}
		else
		{
			MessageBox( "由于原编号已被改变, 且此编号已存在一个条目, 修改失败" );
			return;
		}
	}
	else
	{//修改
		if( !pb.EditItem( i, m_itemID, m_name, m_phoneNo ) )
		{//可能是某些参数非法
			MessageBox( "修改失败, 数据不合要求" );
			return;
		}
		GetDocument()->SendCommandStr( pb.GetCommand( PBC_CPBS_SET), CW_CPBS_SET );
		GetDocument()->SendCommandStr( pb.GetCommandWriteItem(i), CW_CPBW_SET );
		m_listCtrl.InsertString( i, pb.GetItemShortDes(i) );
		m_listCtrl.DeleteString( i+1 );
		m_listCtrl.SetCurSel( i );
	}

	GetDocument()->UpdateDlgPBSData();//更新电话选取对话框中的数据
}

BOOL CFormPB::CheckCommState()
{
	if( !GetDocument()->IsCommPortOpen() )
	{
		MessageBox( "尚未与手机建立连接!" );
		return FALSE;
	}
	return TRUE;
}

void CFormPB::OnInitialUpdate() 
{
	CFormView::OnInitialUpdate();

	if( (GetDocument()->GetPhoneBook(m_pbmID)).GetPhoneBookSize() <= 0 )
	{
		AfxGetMainWnd()->PostMessage( WM_COMMAND, ID_PB_GET );
		return;
	}

	PhoneBookUpdate();
}

void CFormPB::OnPbAdd() 
{
	if( !CheckCommState() )
		return;

CPhoneBook & pb = GetDocument()->GetPhoneBook( m_pbmID );
int itemID = pb.GetEmptyItemID();
	if( itemID < 0 )
	{
		MessageBox( "电话本已满" );
		return;
	}

int i = pb.AddItem( itemID, "无名氏", "00000000" );

	GetDocument()->SendCommandStr( pb.GetCommand( PBC_CPBS_SET), CW_CPBS_SET );
	GetDocument()->SendCommandStr( pb.GetCommandWriteItem(i), CW_CPBW_SET );

	m_listCtrl.AddString( pb.GetItemShortDes(i) );
	m_listCtrl.SetCurSel( i );
	OnSelchangeList();

	GetDocument()->UpdateDlgPBSData();//更新电话选取对话框中的数据
}

void CFormPB::OnPbDel()
{
	if( !CheckCommState() )
		return;

	UpdateData();

int i;
	if( ( i = m_listCtrl.GetCurSel() ) == LB_ERR )
	{
		MessageBox( "没有指定要删除的条目" );
		return;
	}
CPhoneBook & pb = GetDocument()->GetPhoneBook( m_pbmID );

	//删除手机中的条目
	GetDocument()->SendCommandStr( pb.GetCommand( PBC_CPBS_SET), CW_CPBS_SET );
	GetDocument()->SendCommandStr( pb.GetCommandDelItem(i), CW_CPBW_SET );
	pb.RemoveAt( i );//删除软件中的号码本条目
	m_listCtrl.DeleteString( i );//删除列表中的条目

	i--;
	if( i >= 0 )
	{
		m_listCtrl.SetCurSel( i );
	}
	OnSelchangeList();

	GetDocument()->UpdateDlgPBSData();//更新电话选取对话框中的数据
}

void CFormPB::OnPbMe() 
{
	m_pbmID = PBM_ME;
	UpdateData();
	PhoneBookUpdate();
	if( (GetDocument()->GetPhoneBook(m_pbmID)).GetPhoneBookSize() <= 0 )
	{
		AfxGetMainWnd()->PostMessage( WM_COMMAND, ID_PB_GET );
		return;
	}
}

void CFormPB::OnPbSm() 
{
	m_pbmID = PBM_SM;
	UpdateData();
	PhoneBookUpdate();
	if( (GetDocument()->GetPhoneBook(m_pbmID)).GetPhoneBookSize() <= 0 )
	{
		AfxGetMainWnd()->PostMessage( WM_COMMAND, ID_PB_GET );
		return;
	}
}

void CFormPB::OnSelchangeList() 
{
int i;
	if( ( i = m_listCtrl.GetCurSel() ) == LB_ERR )
	{
		MessageBox( "没有指定要修改的条目" );
		return;
	}
CPhoneBook & pb = GetDocument()->GetPhoneBook( m_pbmID );

	if( !pb.GetItem( i, m_itemID, m_name, m_phoneNo ) )
	{//找不到指定的条目
		MessageBox( "错误: 未能找到指定的条目" );
		return;
	}
	UpdateData( FALSE );
}

void CFormPB::OnPbUpdate() 
{
	PhoneBookUpdate();

	GetDocument()->UpdateDlgPBSData();//更新电话选取对话框中的数据
}

void CFormPB::OnPbGet() 
{
CString str;
CMoblieXDoc * pDoc = GetDocument();
CPhoneBook & pb = pDoc->GetPhoneBook( m_pbmID );

	pDoc->SendCommandStr( pb.GetCommand( PBC_CPBS_SET ), CW_CPBS_SET );//设为相应的电话本
	pDoc->SendCommandStr( pb.GetCommand( PBC_GET_ALL ), CW_CPBR_GET );
}

void CFormPB::OnUpdatePbGet(CCmdUI* pCmdUI) 
{
CMoblieXDoc * pDoc = GetDocument();

	pCmdUI->Enable( pDoc->IsCommPortOpen()
		&& (pDoc->GetPhoneBook(m_pbmID)).HavePB() );
}

void CFormPB::OnPbLoad() 
{
const char * pbName;
CMoblieXDoc * pDoc = GetDocument();

	if( m_pbmID == PBM_ME )
	{
		pbName = pDoc->m_dlgPBPath.m_me;
	}
	else
	{
		pbName = pDoc->m_dlgPBPath.m_sm;
	}
CFileDialog dlgFile( TRUE, "txt", pbName );

	if( dlgFile.DoModal() != IDOK )
	{
		return;
	}

CPhoneBook & pb = pDoc->GetPhoneBook( m_pbmID );
	if( !pb.Load( dlgFile.GetPathName() ) )
	{
		MessageBox( "从文件加载电话本失败" );
	}
	else
	{
		PhoneBookUpdate();
		MessageBox( "已从文件成功加载电话本" );
		pDoc->UpdateDlgPBSData();//更新电话选取对话框中的数据
	}
}

void CFormPB::OnPbSave() 
{
const char * pbName;
CMoblieXDoc * pDoc = GetDocument();

	if( m_pbmID == PBM_ME )
	{
		pbName = pDoc->m_dlgPBPath.m_me;
	}
	else
	{
		pbName = pDoc->m_dlgPBPath.m_sm;
	}
CFileDialog dlgFile( FALSE, "txt", pbName );

	if( dlgFile.DoModal() != IDOK )
	{
		return;
	}

CPhoneBook & pb = pDoc->GetPhoneBook( m_pbmID );
	if( pb.Save( dlgFile.GetPathName() ) )
	{
//		MessageBox( "已成功保存电话本到文件" );
	}
	else
	{
		MessageBox( "保存电话本失败" );
	}
}

void CFormPB::OnPbPut() 
{
CMoblieXDoc * pDoc = GetDocument();
CPhoneBook & pb = pDoc->GetPhoneBook( m_pbmID );

	//规范所有条目, 包括编号/长度等
	pb.RegularizeAllItem();

int i, size = pb.GetPhoneBookSize();

	pDoc->SendCommandStr( pb.GetCommand( PBC_CPBS_SET ), CW_CPBS_SET );
	for( i = 0; i < size; i++ )
	{
		pDoc->SendCommandStr( pb.GetCommandWriteItem( i ), CW_CPBW_SET );
	}

	pDoc->SendCommandStr( pb.GetCommand( PBC_GET_ALL ), CW_CPBR_GET );
}

void CFormPB::OnPbRemoveAll() 
{
CMoblieXDoc * pDoc = GetDocument();
CPhoneBook & pb = pDoc->GetPhoneBook( m_pbmID );

int i, size = pb.GetPhoneBookSize();

	pDoc->SendCommandStr( pb.GetCommand( PBC_CPBS_SET ), CW_CPBS_SET );
	for( i = 0; i < size; i++ )
	{
		pDoc->SendCommandStr( pb.GetCommandDelItem( i ), CW_CPBW_SET );
	}

	pDoc->SendCommandStr( pb.GetCommand( PBC_GET_ALL ), CW_CPBR_GET );
}

⌨️ 快捷键说明

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