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

📄 addressbook.cpp

📁 一个简单的视频会议VC++MFC工程文件
💻 CPP
字号:
// AddressBook.cpp : implementation file
//

#include "stdafx.h"
#include "GraghDialog.h"
#include "AddressBook.h"
#include "GraghDialogDlg.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CAddressBook dialog

CAddressBook::CAddressBook(CWnd* pParent /*=NULL*/)
	: CDialog(CAddressBook::IDD, pParent)
{
	//{{AFX_DATA_INIT(CAddressBook)
	//}}AFX_DATA_INIT
}

void CAddressBook::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CAddressBook)
	DDX_Control(pDX, IDOK, m_OK);
	DDX_Control(pDX, IDCANCEL, m_Cancel);
	DDX_Control(pDX, IDC_MODIFY, m_Modify);
	DDX_Control(pDX, IDC_DEL, m_Del);
	DDX_Control(pDX, IDC_ADD, m_Add);
	DDX_Control(pDX, IDC_ADDRLIST, m_AddrList);
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CAddressBook, CDialog)
	//{{AFX_MSG_MAP(CAddressBook)
	ON_BN_CLICKED(IDC_ADD, OnAdd)
	ON_WM_ERASEBKGND()
	ON_WM_LBUTTONDOWN()
	ON_WM_MOUSEMOVE()
	ON_BN_CLICKED(IDC_MODIFY, OnModify)
	ON_BN_CLICKED(IDC_DEL, OnDel)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CAddressBook message handlers

BOOL CAddressBook::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	m_AddrList.SetExtendedStyle(LVS_EX_FLATSB| LVS_EX_HEADERDRAGDROP |LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES);
	LV_COLUMN lvcol;
	lvcol.mask=LVCF_FMT|LVCF_SUBITEM|LVCF_TEXT|LVCF_WIDTH;
	lvcol.fmt=LVCFMT_CENTER;
	lvcol.cx=60;
	lvcol.pszText="姓名";
	ListView_InsertColumn(m_AddrList,0,&lvcol);
	lvcol.cx=114;
	lvcol.pszText="地址";
	ListView_InsertColumn(m_AddrList,1,&lvcol);
	lvcol.cx=30;
	lvcol.pszText="自动接受";
	ListView_InsertColumn(m_AddrList,2,&lvcol);
	lvcol.cx=100;
	lvcol.pszText="备注";
	ListView_InsertColumn(m_AddrList,3,&lvcol);

	m_OK.AddToolTip (_T("呼叫选定联系人"));
	m_Cancel.AddToolTip (_T("取消"));
	m_Modify.AddToolTip (_T("修改选定联系人"));
	m_Del.AddToolTip (_T("删除选定联系人"));
	m_Add.AddToolTip (_T("添加新联系人"));

	m_AddrList.SetBkColor (0x00FFCC99);
	m_AddrList.SetTextBkColor (0x00FFCC99);
	m_AddrList.SetTextColor (0x00000000);
	
	m_AddRemote =NULL;

	SetWindowText(_T("地址簿"));

	m_hdc = GetDC ()->m_hDC ;

	BITMAP bm;
	m_bmpMain.LoadBitmap (IDB_ADDREMOTE);
	m_bmpMain.GetBitmap (&bm);
	m_Width		= bm.bmWidth ;
	m_Height	= bm.bmHeight ;
	RECT rc;
	m_pdlg->GetClientRect(&rc);
	ClientToScreen (&rc);
	::SetWindowPos (m_hWnd,HWND_TOP,rc.right  ,rc.top ,m_Width ,m_Height,0);

	POINT pt[4];
	pt[0].x=18;		pt[0].y=2;
	pt[1].x=118;	pt[1].y=2;
	pt[2].x=104;	pt[2].y=16;
	pt[3].x=4;		pt[3].y=16;
	m_hTitleRgn	=	CreatePolygonRgn(pt,4,ALTERNATE);
	DrawTitleBar(m_hdc);
	LoadList();
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

void CAddressBook::SetParent(CDialog *dlg)
{
	m_pdlg = dlg;
}

void CAddressBook::FreeSource()
{
	DeleteObject(m_hTitleRgn);
}

void CAddressBook::OnAdd() 
{
	m_AddRemote= new CAddRemote;
	m_AddRemote->SetParent (this);
	m_AddRemote->m_CallAction = 1;
	m_AddRemote->DoModal ();
	if(m_AddRemote)	delete m_AddRemote;
	m_AddRemote=NULL;
	UpdateData(TRUE);
}

void CAddressBook::OnModify() 
{
	// TODO: Add your control notification handler code here
	int iItem=ListView_GetNextItem(m_AddrList ,-1,LVNI_SELECTED);
	char sz[256];
	if(iItem<0)
	{
		AfxMessageBox("您没有选择联系人");
		return ;
	}
	ListView_GetItemText(m_AddrList,iItem,0,sz,sizeof(sz));
	m_AddRemote= new CAddRemote;
	m_AddRemote->SetParent (this);
	m_AddRemote->m_CallAction = 2;
	m_AddRemote->m_Name .Format ("%s",sz);
	ListView_GetItemText(m_AddrList,iItem,1,sz,sizeof(sz));
	m_AddRemote->m_IPAddr  .Format ("%s",sz);
	ListView_GetItemText(m_AddrList,iItem,2,sz,sizeof(sz));
	m_AddRemote->m_AutoAccept = (strstr(sz,"是")!=NULL);
	ListView_GetItemText(m_AddrList,iItem,3,sz,sizeof(sz));
	m_AddRemote->m_Comment .Format ("%s",sz);
	m_AddRemote->DoModal ();
	if(m_AddRemote)	delete m_AddRemote;
	m_AddRemote=NULL;	
	UpdateData(TRUE);
}

void CAddressBook::OnCancel() 
{
	UpdateData(TRUE);
	SaveList();
	FreeSource();
	CDialog::OnCancel ();
}

void CAddressBook::OnOK() 
{
	char hostname[200],aa[8];
	BOOL	ret=FALSE;
	ZeroMemory(hostname,sizeof(hostname));
	UpdateData(TRUE);
	SaveList();
	int iItem=ListView_GetNextItem(m_AddrList ,-1,LVNI_SELECTED);
	if(iItem<0)
	{
		AfxMessageBox("您没有选择联系人");
		return ;
	}

	int i=ListView_GetSelectionMark(m_AddrList);
	ListView_GetItemText(m_AddrList,i,1,hostname,sizeof(hostname));
	ListView_GetItemText(m_AddrList,i,2,aa,sizeof(aa));
	if(strstr(aa,"是"))
		((CGraghDialogDlg*)m_pdlg)->m_AutoAccept =TRUE;
	else
		((CGraghDialogDlg*)m_pdlg)->m_AutoAccept =FALSE;
	
	ret=((CGraghDialogDlg*)m_pdlg)->dcontrol.SendControlMessage(MESG_CONNECT,hostname);
	if(!ret)
	{
		((CGraghDialogDlg*)m_pdlg)->m_State = STATE_IDLE;
		((CGraghDialogDlg*)m_pdlg)->DisplayMesg("无法连接该联系人");
		return;
	}else
		((CGraghDialogDlg*)m_pdlg)->m_State=STATE_CALLOUT;	
	FreeSource();
	CDialog::OnOK ();
}

void CAddressBook::OnDel() 
{
	int iItem=ListView_GetNextItem(m_AddrList ,-1,LVNI_SELECTED);
	if(iItem<0)
	{
		AfxMessageBox("您没有选择联系人");
		return ;
	}
	ListView_DeleteItem(m_AddrList.m_hWnd ,iItem);
	UpdateData(TRUE);
}

void CAddressBook::OnLButtonDown(UINT nFlags, CPoint point) 
{
	CDialog::OnLButtonDown(nFlags, point);
	if(PtInRegion(m_hTitleRgn,point.x,point.y))
		PostMessage(WM_NCLBUTTONDOWN, HTCAPTION, MAKELPARAM(point.x,point.y)); 
}

void CAddressBook::OnMouseMove(UINT nFlags, CPoint point) 
{
	PtInRegion(m_hTitleRgn,point.x,point.y)?m_bHilight =TRUE:m_bHilight =FALSE;
	if(m_bHilight != m_Last )
	{
		m_Last=m_bHilight;
		DrawTitleBar(m_hdc);
	}
	CDialog::OnMouseMove(nFlags, point);
}

BOOL CAddressBook::OnEraseBkgnd(CDC* pDC) 
{
	CDC MemDC;
	MemDC.CreateCompatibleDC(pDC);
	CBitmap *pOldBMP = (CBitmap*)MemDC.SelectObject(&m_bmpMain);
	pDC->BitBlt(0,0,m_Width,m_Height,&MemDC,0,0,SRCCOPY);
	if(pOldBMP)		MemDC.SelectObject(pOldBMP);	
	MemDC.DeleteDC ();
	return TRUE;
}

void CAddressBook::DrawTitleBar(HDC hdc)
{
	RECT rc;
	GetClientRect(&rc);
	HBRUSH hbr;
	if(m_bHilight)	hbr=CreateSolidBrush(0x00FF3333);		
	else			hbr=CreateSolidBrush(0x00660000);		
	FillRgn(hdc,m_hTitleRgn,hbr);
	DeleteObject(hbr);
	
	char szTitle[64]="";
	NONCLIENTMETRICS ncm;
	ncm.cbSize = sizeof(ncm);
	SystemParametersInfo(SPI_GETNONCLIENTMETRICS, 0, &ncm, 0);
	HFONT hf=CreateFontIndirect(&ncm.lfCaptionFont);
	HFONT hof=(HFONT)SelectObject(hdc,hf);
	SetBkMode(hdc,TRANSPARENT);
	if(m_bHilight)	SetTextColor(hdc,0x000000ff);
	else			SetTextColor(hdc,0x00C0C0C0);
	GetWindowText(szTitle,63);
	
	DrawText(hdc,szTitle,strlen(szTitle),&CRect(25,3,144,22),DT_LEFT);
	SelectObject(hdc,hof);
	DeleteObject(hf);
	DeleteObject(hof);
}

void CAddressBook::LoadList()
{
//	程序所在路径
	char szPath[1024];
	GetModuleFileName(0,szPath,1024);
	int i;
	for(i=strlen(szPath);i>0;i--)
	{
		if(szPath[i]=='\\')
		{
			szPath[i+1]=0;
			break;
		}
	}

	strcpy(szPath+strlen(szPath),"联系人.ini");
	CListCtrl* h=(CListCtrl*)GetDlgItem(IDC_ADDRLIST);

//	记录数
	int count=GetPrivateProfileInt("地址","总数量",0,szPath);
	char sz[64];
	LVITEM li;
	li.iItem=10000;
	
	li.mask=LVIF_TEXT;
	li.pszText=sz;
//	读出记录并添加到列表中
	for(i=0;i<count;i++)
	{
		char s[16];
		sprintf(s,"姓名%d",i);
		li.iSubItem=0;
		GetPrivateProfileString("地址",s,"",sz,64,szPath);
		int iItem=ListView_InsertItem(h->m_hWnd ,&li);
		sprintf(s,"地址%d",i);
		GetPrivateProfileString("地址",s,"",sz,64,szPath);
		ListView_SetItemText(h->m_hWnd,iItem,1,sz);
		sprintf(s,"自动接受%d",i);
		GetPrivateProfileString("地址",s,"",sz,64,szPath);
		ListView_SetItemText(h->m_hWnd,iItem,2,sz);

		sprintf(s,"备注%d",i);
		GetPrivateProfileString("地址",s,"",sz,64,szPath);
		ListView_SetItemText(h->m_hWnd,iItem,3,sz);
	}

}

//保存通讯录
void CAddressBook::SaveList()
{
//	程序所在路径
	char szPath[1024];
	GetModuleFileName(0,szPath,1024);
	int i;
	for(i=strlen(szPath);i>0;i--)
	{
		if(szPath[i]=='\\')
		{
			szPath[i+1]=0;
			break;
		}
	}
	strcpy(szPath+strlen(szPath),"联系人.ini");
	CListCtrl* h=(CListCtrl*)GetDlgItem(IDC_ADDRLIST);
//	记录条数
	int count=ListView_GetItemCount(h->m_hWnd );
	char sz[64];
	sprintf(sz,"%d",count);
//	写入文件
	WritePrivateProfileString("地址","总数量",sz,szPath);
	for(i=0;i<count;i++)
	{
		char s[16];
		sprintf(s,"姓名%d",i);
		ListView_GetItemText(h->m_hWnd,i,0,sz,64);
		WritePrivateProfileString("地址",s,sz,szPath);
		sprintf(s,"地址%d",i);
		ListView_GetItemText(h->m_hWnd,i,1,sz,64);
		WritePrivateProfileString("地址",s,sz,szPath);
		sprintf(s,"自动接受%d",i);
		ListView_GetItemText(h->m_hWnd,i,2,sz,64);
		WritePrivateProfileString("地址",s,sz,szPath);
		sprintf(s,"备注%d",i);
		ListView_GetItemText(h->m_hWnd,i,3,sz,64);
		WritePrivateProfileString("地址",s,sz,szPath);
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -