📄 phonebookpage.cpp
字号:
// PhoneBookPage.cpp : implementation file
//
#include "stdafx.h"
#include "SIMTOOL.h"
#include "PhoneBookPage.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CPhoneBookPage dialog
extern CSIMTOOLApp theApp;
DWORD WINAPI ExportPBProc(LPVOID lpParameter);
DWORD WINAPI ImportPBProc(LPVOID lpParameter);
CPhoneBookPage::CPhoneBookPage(CWnd* pParent /*=NULL*/)
: CDialogResize(CPhoneBookPage::IDD, pParent)
{
//{{AFX_DATA_INIT(CPhoneBookPage)
//}}AFX_DATA_INIT
}
void CPhoneBookPage::DoDataExchange(CDataExchange* pDX)
{
CDialogResize::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CPhoneBookPage)
DDX_Control(pDX, IDC_BTNSAVE, m_btnsave);
DDX_Control(pDX, IDC_BTNOPEN, m_btnopen);
DDX_Control(pDX, IDC_BTNIMPORT, m_btnimport);
DDX_Control(pDX, IDC_BTNEXPORT, m_btnexport);
DDX_Control(pDX, IDC_PHONEBOOK, m_pblist);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CPhoneBookPage, CDialogResize)
//{{AFX_MSG_MAP(CPhoneBookPage)
ON_BN_CLICKED(IDC_BTNOPEN, OnBtnopen)
ON_BN_CLICKED(IDC_BTNSAVE, OnBtnsave)
ON_BN_CLICKED(IDC_BTNEXPORT, OnBtnexport)
ON_BN_CLICKED(IDC_BTNIMPORT, OnBtnimport)
ON_NOTIFY(NM_RCLICK, IDC_PHONEBOOK, OnRclickPhonebook)
ON_WM_CONTEXTMENU()
ON_COMMAND(ID_DIALNUM, OnDialnum)
ON_COMMAND(ID_SENDSMSTO, OnSendsmsto)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
BEGIN_DLGRESIZE_MAP(CPhoneBookPage)
DLGRESIZE_CONTROL(IDC_PHONEBOOK, DLSZ_SIZE_X | DLSZ_SIZE_Y)
DLGRESIZE_CONTROL(IDC_BTNIMPORT, DLSZ_MOVE_X)
DLGRESIZE_CONTROL(IDC_BTNEXPORT, DLSZ_MOVE_X)
DLGRESIZE_CONTROL(IDC_BTNSAVE, DLSZ_MOVE_X)
DLGRESIZE_CONTROL(IDC_BTNOPEN, DLSZ_MOVE_X)
END_DLGRESIZE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CPhoneBookPage message handlers
BOOL CPhoneBookPage::OnInitDialog()
{
CDialogResize::OnInitDialog();
// TODO: Add extra initialization here
menu.LoadMenu(MAKEINTRESOURCE(IDR_DIAL));
InitResizing(FALSE, FALSE, WS_CLIPCHILDREN);
DWORD dwStyle = m_pblist.GetExtendedStyle();
dwStyle |= LVS_EX_FULLROWSELECT;
m_pblist.SetExtendedStyle(dwStyle);
imaSmall.Create(IDB_IMAGELIST, 16, 0, RGB(0,128,128));
m_pblist.SetImageList(&imaSmall, LVSIL_SMALL);
m_pblist.SetExtendedStyle(LVS_EX_FULLROWSELECT);
InsertPhoneBookHead("索引号", "姓名", "电话号码");
m_btnsave.SetIcon(IDI_SAVE, 16, 16);
m_btnopen.SetIcon(IDI_OPEN, 16, 16);
m_btnimport.SetIcon(IDI_IMPORT, 16, 16);
m_btnexport.SetIcon(IDI_EXPORT, 16, 16);
AutoSizeColumns(&m_pblist);
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void CPhoneBookPage::InsertPhoneBookHead(char * index,
char * name,
char * phonenum)
{
m_pblist.InsertColumn(0,index,LVCFMT_LEFT,80);
m_pblist.InsertColumn(1,name,LVCFMT_LEFT,300);
m_pblist.InsertColumn(2,phonenum,LVCFMT_LEFT,480);
}
void CPhoneBookPage::InsertPhoneBook(int imageindex,
char * index,
char * name,
char * phonenum)
{
int listindex;
LV_ITEM lvItem;
listindex=m_pblist.GetItemCount();
lvItem.mask = LVIF_IMAGE|LVIF_TEXT;
lvItem.iItem =listindex;
lvItem.iSubItem =0;
lvItem.iImage=imageindex;
lvItem.pszText = (LPTSTR) index;
m_pblist.InsertItem(&lvItem);
lvItem.mask = LVIF_TEXT;
lvItem.iItem =listindex;
lvItem.iSubItem =1;
lvItem.pszText = (LPTSTR) name;
m_pblist.SetItem(&lvItem);
lvItem.mask = LVIF_TEXT;
lvItem.iItem =listindex;
lvItem.iSubItem =2;
lvItem.pszText = (LPTSTR) phonenum;
m_pblist.SetItem(&lvItem);
}
void CPhoneBookPage::DelPhoneBookList()
{
m_pblist.DeleteAllItems();
}
int CPhoneBookPage::GetItemCount()
{
return m_pblist.GetItemCount();
}
void CPhoneBookPage::SaveTempFile()
{
FILE * savestream;
char itemtmp[1000], cTmpPath[MAX_PATH];
int itemcount, i;
CString pathname, phoneindex, name, phonenum, strAppPath;
memset(cTmpPath, 0, MAX_PATH);
memset(itemtmp, 0, 1000);
itemcount = GetItemCount();
strAppPath = theApp.GetAppPath();
sprintf(cTmpPath, "%s\\tmp.txt", strAppPath);
if((savestream = fopen(cTmpPath, "w+")) == NULL)
{
MessageBox("创建尽是文件失败", "AWS");
return;
}
for (i=0; i<itemcount; i++)
{
memset(itemtmp,0,1000);
phoneindex = m_pblist.GetItemText(i, 0);
name = m_pblist.GetItemText(i, 1);
phonenum = m_pblist.GetItemText(i, 2);
sprintf(itemtmp, "%s\t%s\t%s\n", phoneindex, name, phonenum);
fwrite(itemtmp, sizeof(char), strlen(itemtmp), savestream);
}
fclose(savestream);
}
void CPhoneBookPage::OnBtnopen()
{
// TODO: Add your control notification handler code here
CFileDialog filedlg(TRUE,NULL,NULL,OFN_HIDEREADONLY,
"TXT Files (*.txt)|*.txt|All Files (*.*)|*.*||",NULL);
CString pathname, phoneindex, name, phonenum, itemtmp, tmp;
CIVStringSet m_setstrings;
char openfile[MAX_PATH], buf[2], phid[5], num[20], per[50];;
FILE * openstream;
int count, nWord, front, back;
memset(openfile,0,MAX_PATH);
memset(buf, 0, 2);
memset(phid, 0, 5);
memset(num, 0, 20);
memset(per, 0, 50);
m_setstrings.Add("\t");
if (filedlg.DoModal() == IDOK)
{
pathname = filedlg.GetPathName();
sprintf(openfile, "%s", pathname);
if((openstream = fopen(openfile, "r")) == NULL)
{
MessageBox("文件无法打开", "AWS");
return;
}
DelPhoneBookList();
while(!feof(openstream))
{
count = fread(buf, sizeof(char), 1, openstream);
if(ferror(openstream))
{
perror( "Read error" );
break;
}
itemtmp += buf;
if (strcmp(buf, "\n") == 0)
{
UINT nPos = m_setstrings.FindFirstIn(itemtmp, nWord);
if (nPos != 0xFFFFFFFF)
{
do
{
front = nPos;
phoneindex = itemtmp.Left(front);
nPos = m_setstrings.FindNext(nWord);
back = nPos;
tmp = itemtmp.Left(back);
name = tmp.Right(tmp.GetLength()-front-1);
front = back;
tmp = itemtmp.Left(itemtmp.GetLength()-1);
phonenum = tmp.Right(tmp.GetLength()-front-1);
nPos = m_setstrings.FindNext(nWord);
} while (nPos != 0xFFFFFFFF);
sprintf(phid, "%s", phoneindex);
sprintf(per, "%s", name);
sprintf(num, "%s", phonenum);
InsertPhoneBook(8,phid,per,num);
itemtmp = "";
}
}
}
fclose(openstream);
SaveTempFile();
}
}
void CPhoneBookPage::OnBtnsave()
{
// TODO: Add your control notification handler code here
int itemcount, i;
CFileDialog filedlg(FALSE,NULL,NULL,OFN_HIDEREADONLY,
"TXT Files (*.txt)|*.txt|All Files (*.*)|*.*||",NULL);
CString pathname, phoneindex, name, phonenum;
FILE * savestream;
char savefile[MAX_PATH], itemtmp[1000];
memset(savefile,0,MAX_PATH);
itemcount = GetItemCount();
if (itemcount == 0)
{
MessageBox("没有可以保存的电话簿数据", "AWS");
return;
}
if (filedlg.DoModal() == IDOK) {
pathname = filedlg.GetPathName();
pathname += ".txt";
sprintf(savefile, "%s", pathname);
// 保存路径
if((savestream = fopen(savefile, "w+")) == NULL)
{
MessageBox("文件无法打开", "AWS");
return;
}
for (i=0; i<itemcount; i++)
{
memset(itemtmp,0,1000);
phoneindex = m_pblist.GetItemText(i, 0);
name = m_pblist.GetItemText(i, 1);
phonenum = m_pblist.GetItemText(i, 2);
sprintf(itemtmp, "%s\t%s\t%s\n", phoneindex, name, phonenum);
fwrite(itemtmp, sizeof(char), strlen(itemtmp), savestream);
}
fclose(savestream);
}
}
void CPhoneBookPage::OnBtnexport()
{
// TODO: Add your control notification handler code here
HANDLE hThread, hProc;
char cText[100], comm[20];
CString RetInfo, sDevComm, sStatus, sAppComm;
memset(comm, 0, 20);
memset(cText, 0, 100);
sAppComm = theApp.GetAppComm();
sprintf(comm, "%s", sAppComm);
theApp.SetStatusText("正在寻找GPRS无线网络设备,请稍后...");
theApp.SetDevText("");
sDevComm = theApp.OpenDev(comm, 9600);
if (sDevComm.GetLength() == 0)
{
theApp.SetStatusText("设备未被找到或端口未被初始化,正在尝试初始化...");
sDevComm = theApp.MultiBautOpenDev(comm);;
if (sDevComm.GetLength() == 0)
{
theApp.mobile.CloseComm();
theApp.SetStatusText("没有找到设备或端口波特率不匹配,请确定设备是否连接...");
MessageBox("没有找到设备或端口波特率不匹配!", "AWS");
return;
}
else
{
theApp.SetStatusText("端口初始化完成,正在打开端口...");
sDevComm = theApp.OpenDev(comm, 9600);
}
}
if (theApp.GetDevType() == "WAVECOM")
{
theApp.SetStatusText("");
sprintf(cText, "ADBON GPRS MODEM : %s/%d", sDevComm, 9600);
theApp.SetDevText(cText);
DelPhoneBookList();
m_ProgDlg.Create(IDD_PROGDLG);
ExitEvent=CreateEvent( NULL, // no security
TRUE, // explicit reset req
FALSE, // initial event reset
NULL ) ; // no name
ExitedEvent=CreateEvent( NULL, // no security
TRUE, // explicit reset req
FALSE, // initial event reset
NULL ) ; // no name
if ((hThread=CreateThread(NULL,0,ExportPBProc,this,0,&ThreadId))==NULL) {
CloseHandle(ExitEvent);
CloseHandle(ExitedEvent);
MessageBox("创建通讯线程失败","错误信息",MB_OK);
return;
}
hProc=GetCurrentProcess();
SetPriorityClass(hProc,HIGH_PRIORITY_CLASS);
SetThreadPriority(hThread,THREAD_PRIORITY_TIME_CRITICAL);
}
if (theApp.GetDevType() == "BENQ")
{
theApp.SetStatusText("");
sprintf(cText, "ADBON GPRS MODEM : %s/%d", sDevComm, 9600);
theApp.SetDevText(cText);
DelPhoneBookList();
m_ProgDlg.Create(IDD_PROGDLG);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -