www.pudn.com > CirMMI.rar > DglPhoneBook.cpp


// DglPhoneBook.cpp : implementation file 
// 
#include "stdafx.h" 
#include "resource.h" 
#include "DglPhoneBook.h" 
#include "cirmmidlg.h" 
 
#ifdef _DEBUG 
#define new DEBUG_NEW 
#undef THIS_FILE 
static char THIS_FILE[] = __FILE__; 
#endif 
 
///////////////////////////////////////////////////////////////////////////// 
// CDglPhoneBook dialog 
 
 
CDglPhoneBook::CDglPhoneBook(CWnd* pParent /*=NULL*/) 
	: CDialog(CDglPhoneBook::IDD, pParent) 
{ 
	//{{AFX_DATA_INIT(CDglPhoneBook) 
		// NOTE: the ClassWizard will add member initialization here 
	//}}AFX_DATA_INIT 
	m_iOptionSel=0;m_iOptionSel2; 
	m_iZ=0; 
 
	LOGFONT lf; 
	memset(&lf, 0, sizeof(lf)); 
	lf.lfOutPrecision= 3; 
	lf.lfClipPrecision= 2; 
	lf.lfQuality= 1; 
	lf.lfPitchAndFamily= 49; 
	lf.lfHeight= -14;//小四 -24:小二 
	//lf.lfWidth=12; 
	lf.lfWeight= 200; 
	lf.lfCharSet= GB2312_CHARSET; 
	//lf.lfCharSet= DEFAULT_CHARSET; 
	wcscpy(lf.lfFaceName, _T("Courier New")); 
	m_ListFont.m_hObject= ::CreateFontIndirect(&lf); 
	 
} 
 
 
void CDglPhoneBook::DoDataExchange(CDataExchange* pDX) 
{ 
	CDialog::DoDataExchange(pDX); 
	//{{AFX_DATA_MAP(CDglPhoneBook) 
	DDX_Control(pDX, IDC_STATIC_POINT, m_ctPoint); 
	DDX_Control(pDX, IDC_STATIC_TITLE, m_ctTitle); 
	DDX_Control(pDX, IDC_STATIC_PRELAYER, m_ctPreLayer); 
	DDX_Control(pDX, IDC_LIST1, m_ctList); 
	//}}AFX_DATA_MAP 
} 
 
 
BEGIN_MESSAGE_MAP(CDglPhoneBook, CDialog) 
	//{{AFX_MSG_MAP(CDglPhoneBook) 
	ON_WM_CTLCOLOR() 
	ON_WM_PAINT() 
	//}}AFX_MSG_MAP 
		INIT_EXIT_MAP(InitWnd,ExitWnd) 
	MY_KEY_MAP(OnKeyProc) 
END_MESSAGE_MAP() 
 
///////////////////////////////////////////////////////////////////////////// 
// CDglPhoneBook message handlers 
 
 
//进入通讯录窗体 
LRESULT CDglPhoneBook::InitWnd(WPARAM wParam, LPARAM lParam) 
{ 
	m_iOptionSel=0; 
	m_iOptionSel2=0; 
	m_iZ=0; 
 
	m_ctList.MoveWindow(m_RectList); 
	DisPlayJu(); 
	 
	m_ctList.SetCurSel(0); 
	return 1; 
} 
 
//退出通讯录窗体 
LRESULT CDglPhoneBook::ExitWnd(WPARAM wParam, LPARAM lParam) 
{ 
	 
	// 
	return 1; 
} 
 
 
// 
//WPARAM字节分配:data2, data1, 类型  
//LPARAM暂时没有用到 
UINT CDglPhoneBook::OnKeyProc(WPARAM wKey, LPARAM lunUse) 
{ 
	FromMcuInfo* pInfo= (FromMcuInfo*)wKey; 
	BYTE cbType= pInfo->type;// 
	BYTE cbValue= pInfo->key[0];//键值 或者 字节个数(可能是)	 
	BYTE cbData1= pInfo->key[1];//音量值(可能是) 
	BYTE cbData2= pInfo->key[2];// 
	LRESULT ret=1; 
	if(0x20==cbType) 
	{ 
		switch(cbValue)//可接收的按键:左、右、退出 
		{ 
		case KEY_UP: 
			{ 
				 
				if(m_ctList.GetCount()>0 && m_ctList.GetCurSel()==0) 
				{ 
					m_ctList.SetCurSel(m_ctList.GetCount()-1); 
					m_ctList.Invalidate(FALSE); 
				} 
				else 
					m_ctList.SendMessage(WM_KEYDOWN,VK_UP); 
				 
 
			 } 
			break; 
		case KEY_DOWN: 
			{ 
				if(m_ctList.GetCount()>0 && m_ctList.GetCurSel()==m_ctList.GetCount()-1) 
				{ 
					m_ctList.SetCurSel(0); 
					m_ctList.Invalidate(FALSE); 
				} 
				else  
					m_ctList.SendMessage(WM_KEYDOWN,VK_DOWN);	 
			} 
			break; 
		case KEY_LEFT: 
			m_ctList.SendMessage(WM_KEYDOWN,VK_PRIOR);			 
			break; 
		case KEY_RIGHT: 
			m_ctList.SendMessage(WM_KEYDOWN,VK_NEXT);		 
			break; 
		case KEY_CALL://呼叫 
		case KEY_ENTER://确认 
			{ 
				if(0==m_iZ) 
				{		 
			 
					if(KEY_ENTER==cbValue) 
					{ 
						m_iZ=1; 
						m_iOptionSel=m_ctList.GetCurSel(); 
						if(m_iOptionSel==-1) 
							m_iOptionSel=0; 
					 
						CRect rect(m_RectList); 
						ScreenToClient(rect); 
						rect.top+=20; 
						m_ctList.MoveWindow(rect); 
						 
						DisPlayRecord(); 
					} 
				} 
				else 
				{ 
					//呼叫 
					 
					m_iOptionSel2=m_ctList.GetCurSel(); 
					if(m_iOptionSel2!=-1) 
						{	 
						CCirMMIDlg *pMainDlg=(CCirMMIDlg *)AfxGetMainWnd(); 
						 
						if(pMainDlg->m_bHandset) 
							{	 
								pMainDlg->m_DlgPopShow.ToShow(_T("请摘机后在按呼叫键呼叫"),RGB(200,200,0));							 
						 
							}			 
						CPhoneBookRecord *pPBR=(CPhoneBookRecord *)m_ctList.GetItemDataPtr(m_iOptionSel2); 
						if(pPBR && lstrlen(pPBR->szNum)>0) 
						{ 
							INT datalen=lstrlen(pPBR->szNum); 
							BYTE *pdata=new BYTE[datalen]; 
							for(int i=0;iszNum[i]; 
							} 
 
							((CCirMMIDlg*)AfxGetMainWnd())->GsmrCall((BYTE)pPBR->ct,(BYTE)(pPBR->pri+'0'),pdata,datalen); 
						} 
					} 
				} 
			} 
			break; 
		case KEY_QUIT://有问题呀? 
			{ 
				if(0==m_iZ) 
					ret=0; 
				else 
				{ 
					m_iZ=0; 
					m_ctList.MoveWindow(m_RectList); 
					DisPlayJu(); 
 
				} 
			} 
			break; 
		default:	 
			ret=0;//Do nothing 
		}//END switch() 
		 
	 
	} 
	else 
		ret=0; 
	return ret; 
} 
 
void CDglPhoneBook::DisPlayJu() 
{ 
	m_ctPoint.SetWindowText(_T("按光标键选择内容 按确认键确认 按退出键返回上级菜单")); 
	m_ctList.ResetContent(); 
	m_ctPreLayer.SetWindowText(_T("")); 
	if(g_PhoneBookList.GetCount()>0) 
	{	 
		POSITION pos=g_PhoneBookList.GetHeadPosition(); 
	 
		while(pos) 
		{ 
			CPhoneBook *pPB=(CPhoneBook *)g_PhoneBookList.GetNext(pos); 
			if(pPB) 
				m_ctList.AddString(pPB->szUnit);			 
		}; 
 
		if(m_ctList.GetCount()>0) 
		{ 
			if(m_iOptionSel==-1) 
				m_iOptionSel=0; 
			 
			if(m_iOptionSel0) 
	{	 
		INT index=0; 
		POSITION pos=g_PhoneBookList.GetHeadPosition(); 
	 
		while(pos) 
		{ 
			CPhoneBook *pPB=(CPhoneBook *)g_PhoneBookList.GetNext(pos); 
			 
			if(index==m_iOptionSel) 
			{ 
				if(pPB)			 
					m_ctPreLayer.SetWindowText(pPB->szUnit); 
				else 
					m_ctPreLayer.SetWindowText(_T("")); 
				 
				if(pPB->PtrList.GetCount()>0) 
				{ 
					POSITION pos2=pPB->PtrList.GetHeadPosition(); 
					while(pos2) 
					{ 
						CPhoneBookRecord *pPBR=(CPhoneBookRecord *)pPB->PtrList.GetNext(pos2);							 
						if(pPBR) 
						{ 
							for(int i=0;iszNum / sizeof pPBR->szNum[0];i++ ) 
								if(pPBR->szNum[i]!=(char)pPBR->szNum[i]) 
									pPBR->szNum[i]=0; 
									 
 
							CString strRecord; 
							strRecord.Format(_T("%-12s %s"),pPBR->szName,pPBR->szNum); 
							INT cnt=m_ctList.AddString(strRecord); 
							m_ctList.SetItemDataPtr(cnt,pPBR); 
						} 
					} 
						 
				} 
				else 
				{ 
					m_ctList.AddString(_T("没有电话记录")); 
					m_ctPoint.SetWindowText(_T("按退出键返回上级菜单")); 
 
				} 
				break; 
			} 
			index++;			 
		}; 
 
		if(m_ctList.GetCount()>0) 
		{ 
			if(m_iOptionSel2==-1) 
				m_iOptionSel2=0; 
		 
			if(m_iOptionSel2=0); 
		 
		if(pos && pPB) 
		{ 
			do 
			{ 
				pos2=pos; 
				pPB2=(CPhoneBook *)g_PhoneBookList.GetNext(pos); 
				if(pPB2) 
				{ 
					if(lstrcmp(pPB->szUnit,pPB2->szUnit)>0) 
					{ 
						 
						g_PhoneBookList.SetAt(pos1,pPB2); 
						g_PhoneBookList.SetAt(pos2,pPB); 
						pPB=pPB2; 
					} 
					 
				} 
			}while(pos); 
		} 
		 
		 
	} 
	 
	return TRUE;  // return TRUE unless you set the focus to a control 
	              // EXCEPTION: OCX Property Pages should return FALSE 
} 
 
HBRUSH CDglPhoneBook::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)  
{ 
	HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor); 
	 
	// TODO: Change any attributes of the DC here 
	 
	// TODO: Return a different brush if the default is not desired 
	if(pWnd==&m_ctList) 
	{ 
	pDC->SetBkMode(TRANSPARENT); 
	pDC->SetBkColor(g_CommonSet.crMainBk); 
	pDC->SetTextColor(g_CommonSet.crSecondText);//RGB(64,64,64)); 
	return 	(HBRUSH)g_CommonSet.pBrListBox->GetSafeHandle(); 
	}else if(pWnd==&m_ctTitle) 
	{ 
		pDC->SetBkMode(TRANSPARENT); 
		pDC->SetTextColor(RGB(255,255,255)); 
	} 
	return hbr; 
} 
 
void CDglPhoneBook::OnPaint()  
{ 
	CPaintDC dc(this); // device context for painting 
	 
	CRect rect; 
	GetClientRect(rect); 
	rect.DeflateRect(1,4,2,1); 
	dc.FrameRect(rect,g_CommonSet.pBrFrameBorder); 
	rect.DeflateRect(2,2,2,2); 
	CBrush br(RGB(128,128,128)); 
	dc.FrameRect(rect,&br);	 
	// Do not call CDialog::OnPaint() for painting messages 
}