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

📄 scsmspage.cpp

📁 agsm a gsm sim manager for browsing, managing, and manipulating the phonebook,SMS on the SIM card. I
💻 CPP
📖 第 1 页 / 共 2 页
字号:
			}
			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 + -