?? formpb.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 + -