📄 scsmspage.cpp
字号:
}
else if((encoding&0xec) == 0x40 || (encoding&0xf4) == 0xf4){//append a space as 8 bit ascii
*(udl_a + udl + 1) = 0;
cstr = (LPCSTR)(udl_a+1);
}else{
CString str((LPCSTR)IDS_STRING153);
cstr = str;
}
m_SmsListCtrl.AddItem(nItem,2,cstr);
if(vp == 7)
{
CString cstr_date = Helper::Gsm11SCTStoCStr(udl_a-7,7);
m_SmsListCtrl.AddItem(nItem,3,cstr_date);
}
}
void *ItemData = (void *)((SCLIST_ITEMDATA *)m_SmsListCtrl.GetItemData(nItem))->ItemData;
if(ItemData)
free(ItemData);
((SCLIST_ITEMDATA *)m_SmsListCtrl.GetItemData(nItem))->ItemData = (DWORD)pRecData;
((SCLIST_ITEMDATA *)m_SmsListCtrl.GetItemData(nItem))->dirty = FALSE;
m_SmsListCtrl.Update(nItem);
}catch(LONG){
throw;
}
}
void CScSmsPage::WriteRecordN(int n,BOOL newRecord)
{
try{
int nItem = n-1;
CPcScCtrl &ScReader = ((CAgsm2Dlg *)(AfxGetApp()->m_pMainWnd))->m_SCReader;
LPBYTE pRecData = (LPBYTE)((SCLIST_ITEMDATA *)m_SmsListCtrl.GetItemData(nItem))->ItemData;
if(!pRecData)
{
pRecData = (LPBYTE)malloc(m_RecordLen);
memset(pRecData,0xff,m_RecordLen);
}
TRACE("=============Write to card %d================\n",n);
BOOL bRet = Helper::ComposeSms(pRecData,m_RecordLen,
m_SmsListCtrl.GetItemText(nItem,4),//Status
m_SmsListCtrl.GetItemText(nItem,1),//Da/Oa
m_SmsListCtrl.GetItemText(nItem,2),//Content
m_SmsListCtrl.GetItemText(nItem,3)///Date
);
for(int i=0; i<(int)m_RecordLen; i++)
{
TRACE("%02x ",pRecData[i]);
if((i%16) == 0)
TRACE("\n");
}
TRACE("\n");
if(bRet)
ScReader.UpdateRecord(n,RRM_Absolute,pRecData,(UCHAR)m_RecordLen);
((SCLIST_ITEMDATA *)m_SmsListCtrl.GetItemData(nItem))->dirty = FALSE;
((SCLIST_ITEMDATA *)m_SmsListCtrl.GetItemData(nItem))->ItemData = (DWORD)pRecData;
}catch(LONG)
{
throw;
}
}
void CScSmsPage::EditRecord()
{
POSITION pos = m_SmsListCtrl.GetFirstSelectedItemPosition();
TRACE("HotItem %d\n",pos);
if(pos)
{
CSMSDialog dlg;
int nItem = (int)pos-1;
dlg.m_smsOwner = m_SmsListCtrl.GetItemText(nItem,1);
dlg.m_smsRichEditContent = m_SmsListCtrl.GetItemText(nItem,2);
dlg.m_smsStatusStr = m_SmsListCtrl.GetItemText(nItem,4);
dlg.DoModal();
m_SmsListCtrl.AddItem(nItem,1,dlg.m_smsOwner);
m_SmsListCtrl.AddItem(nItem,2,dlg.m_smsRichEditContent);
m_SmsListCtrl.AddItem(nItem,4,dlg.m_smsStatusStr);
}
}
void CScSmsPage::OnDblclkListSms(NMHDR* pNMHDR, LRESULT* pResult)
{
// TODO: Add your control notification handler code here
EditRecord();
*pResult = 0;
}
void CScSmsPage::WriteRecord(int n)
{
TRACE("Write Record\n");
int iRet;
if(n == -1)
iRet = AfxMessageBox(IDS_STRING128,MB_YESNO);
else
iRet = AfxMessageBox(IDS_STRING129,MB_YESNO);
if(iRet == IDNO)
return;
CPcScCtrl &ScReader = ((CAgsm2Dlg *)(AfxGetApp()->m_pMainWnd))->m_SCReader;
try{
BeginWaitCursor();
SelectCurFile();
CProgressCtrl &ReadProgress = ((CAgsm2Dlg *)(AfxGetApp()->m_pMainWnd))->m_RWProgress;
int itemCount = m_SmsListCtrl.GetItemCount();
int from = 0, to = 0, i;
if(n == -1)//write all records
{
ReadProgress.SetRange(0,(SHORT)m_NumOfRecs);
ReadProgress.ShowWindow(SW_SHOW);
from = 1; to = m_NumOfRecs;
for(i=from; i <= to && i<=itemCount; i++)
{
WriteRecordN(i,FALSE);
ReadProgress.SetPos(i);
}
//Beep(1000,50);
ReadProgress.ShowWindow(SW_HIDE);
}else if( n == -2){//selected
int nSelected = m_SmsListCtrl.GetSelectedCount();
int nItem = -1;
ReadProgress.SetRange(0,(SHORT)nSelected);
ReadProgress.ShowWindow(SW_SHOW);
for (i=1; i<=nSelected; i++)
{
nItem = m_SmsListCtrl.GetNextItem(nItem, LVNI_SELECTED);
ASSERT(nItem != -1);
WriteRecordN(nItem+1,FALSE);
ReadProgress.SetPos(i);
}
ReadProgress.ShowWindow(SW_HIDE);
}else{//individual
WriteRecordN(n,FALSE);
}
EndWaitCursor();
}catch(LONG e)
{
if((e & 0xfffff000) == 0x6000 || (e & 0xfffff000) == 0x9000)
AfxMessageBox(ScReader.FormatErrMsg(e));
else
Helper::ShowLastError(e);
}
}
BOOL CScSmsPage::PreTranslateMessage(MSG* pMsg)
{
// TODO: Add your specialized code here and/or call the base class
HACCEL hAccelTable = ((CAgsm2Dlg *)(AfxGetApp()->m_pMainWnd))->m_hAccelTable;
TranslateAccelerator(GetSafeHwnd(), hAccelTable, pMsg);
return CScPropertyPage::PreTranslateMessage(pMsg);
}
BOOL CScSmsPage::CanPaste()
{
if ( !OpenClipboard() )
{
AfxMessageBox( "Cannot open the Clipboard" );
return FALSE;
}
/* get text from the clipboard */
HANDLE hClipData;
LPVOID lpClipData;
if (!(hClipData = GetClipboardData(CF_TEXT))) {
//AfxMessageBox( "Cannot get Clipboard data" );
CloseClipboard();
return FALSE;
}
if (!(lpClipData = GlobalLock(hClipData))) {
AfxMessageBox( "Out of Memory" );
CloseClipboard();
return FALSE;
}
int len = strlen((char *)lpClipData)+1;
char *buf = (char *)malloc(len);
memcpy(buf,lpClipData,len);
unsigned char *buf_cols = (unsigned char *)malloc(len*2);
char *cols[10];
int sep = ',';
int flags = CSV_TRIM | CSV_QUOTES;
int column = 10;
csv_row_parse_str((const unsigned char *)buf,
len,buf_cols,2*len,
(unsigned char **)&cols,column,sep,flags);
BOOL bRet = RowCanPaste(cols);
free(buf);
free(buf_cols);
GlobalUnlock(hClipData);
CloseClipboard();
return bRet;
}
void CScSmsPage::Paste()
{
if ( !OpenClipboard() )
{
AfxMessageBox( "Cannot open the Clipboard" );
return;
}
/* get text from the clipboard */
HANDLE hClipData;
LPVOID lpClipData;
if (!(hClipData = GetClipboardData(CF_TEXT))) {
AfxMessageBox( "Cannot get Clipboard data" );
CloseClipboard();
return;
}
if (!(lpClipData = GlobalLock(hClipData))) {
AfxMessageBox( "Out of Memory" );
CloseClipboard();
return;
}
int len = strlen((char *)lpClipData)+1;
unsigned char *buf = (unsigned char *)malloc(len);
unsigned char *buf_cols = (unsigned char *)malloc(len*2);
char *cols[10];
memcpy(buf,lpClipData,len);
UINT nSelectedCount = m_SmsListCtrl.GetSelectedCount();
POSITION pos = m_SmsListCtrl.GetFirstSelectedItemPosition();
UINT nPasted = 0;
int sep = ',';
int flags = CSV_TRIM | CSV_QUOTES;
int column = 10;
int consume_len = 0;
while(consume_len < len)
{
consume_len += csv_row_parse_str((const unsigned char *)buf+consume_len,
len,buf_cols,2*len,
(unsigned char **)&cols,column,sep,flags);
if(!RowCanPaste(cols))
continue;
CString haveRead((LPCSTR)IDS_STRING_READ);
if(nSelectedCount == 0)
{
int i = m_SmsListCtrl.GetItemCount();
char buf1[8];
sprintf(buf1,"%d",i);
m_SmsListCtrl.AddItem(i,0,buf1);
m_SmsListCtrl.AddItem(i,1,cols[1]);
m_SmsListCtrl.AddItem(i,2,cols[2]);
m_SmsListCtrl.AddItem(i,3,cols[3]);
m_SmsListCtrl.AddItem(i,4,cols[4] ? cols[4] : haveRead);
}else{
if(nPasted < nSelectedCount)
{
//AddItem((int)(pos+nPasted-1),0,buf1);
m_SmsListCtrl.AddItem((int)(pos+nPasted-1),1,cols[1]);
m_SmsListCtrl.AddItem((int)(pos+nPasted-1),2,cols[2]);
m_SmsListCtrl.AddItem((int)(pos+nPasted-1),3,cols[3]);
m_SmsListCtrl.AddItem((int)(pos+nPasted-1),4,cols[4] ? cols[4] : haveRead);
nPasted++;
}
}
}
free(buf_cols);
free(buf);
GlobalUnlock(hClipData);
CloseClipboard();
}
BOOL CScSmsPage::RowCanPaste(char *cols[])
{
int ret = 0;
char buf[512];
if(cols[0] && cols[1])
{
ret = sscanf(cols[0],"%3[0-9]",buf);
if(ret == 1)
ret = sscanf(cols[1],"%20[+0-9*#]",buf);
}
if(cols[4])
{
UCHAR rValue;
CString str(cols[4]);
if(!Helper::SmsStatusToUChar(str,rValue))
ret = 0;
}
return ret == 1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -