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
}