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

📄 phonebookdlg.cpp

📁 通信增值服务,上网接听电话
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// PhoneBookDlg.cpp : implementation file
//

#include "stdafx.h"
#include "netpro.h"
#include "PhonebookListCtrl.h"
#include "PhoneBookDlg.h"
#include "PhonebookModify.h"

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


#define NUM_COLUMNS 2
#define NUM_ITEMS   7

static _TCHAR *_gszColumnLabel[NUM_COLUMNS] =
{
	_T("姓名"), _T("电话号码")
};

static int _gnColumnFmt[NUM_COLUMNS] =
{
	LVCFMT_LEFT, LVCFMT_LEFT
};

static int _gnColumnWidth[NUM_COLUMNS] =
{
	100, 120
};

static _TCHAR *_gszItem[NUM_ITEMS][NUM_COLUMNS] =
{
	_T("Yellow"),  _T("255"),
	_T("Red"),     _T("255"),
	_T("Green"),   _T("0"),  
	_T("Magenta"), _T("255"),
	_T("Cyan"),    _T("0"),  
	_T("Blue"),    _T("0"),  
	_T("Gray"),    _T("192"),
};

/////////////////////////////////////////////////////////////////////////////
// CPhoneBookDlg dialog


CPhoneBookDlg::CPhoneBookDlg(CMapStringToString* map,CWnd* pParent /*=NULL*/)
	: CDialog(CPhoneBookDlg::IDD, pParent)
{
	m_pImageHdrSmall = NULL;
	m_pImageList = NULL;
	m_pImageListSmall = NULL;
	m_pContextMenu= NULL;
	/*if(!m_pContextMenu)
			return FALSE;
	*/
	iItem = 0;
	m_pMap = map;

}


void CPhoneBookDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CPhoneBookDlg)
	DDX_Control(pDX, IDC_EDIT_QUERY, m_cEditQuery);
	DDX_Control(pDX, IDC_COMBO_QUERY, m_cComboQuery);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CPhoneBookDlg, CDialog)
	//{{AFX_MSG_MAP(CPhoneBookDlg)
	ON_COMMAND(IDM_EDIT_PHONEBOOK, OnEditPhonebook)
	ON_WM_DESTROY()
	ON_NOTIFY(NM_RCLICK, IDC_LIST_PHONEBOOK, OnRclickListPhonebook)
	ON_COMMAND(IDM_ADD_PHONEBOOK, OnAddPhonebook)
	ON_COMMAND(IDM_DEL_PHONEBOOK, OnDelPhonebook)
	ON_COMMAND(IDM_QUERY_PHONEBOOK, OnQueryPhonebook)
	ON_BN_CLICKED(IDC_BUTTON_ADD, OnButtonAdd)
	ON_EN_CHANGE(IDC_EDIT_QUERY, OnChangeEditQuery)
	ON_WM_NCDESTROY()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CPhoneBookDlg message handlers

BOOL CPhoneBookDlg::OnInitDialog() 
{
	CDialog::OnInitDialog();
	m_cComboQuery.SetItemData(0,0);
	m_cComboQuery.SetItemData(1,1);
	m_cComboQuery.SetCurSel(0);

	m_pContextMenu = new CMenu();
	BOOL CmOK=m_pContextMenu->LoadMenu(IDR_PHONEBOOK_MENU);
	
	m_listctrl.SubclassDlgItem(IDC_LIST_PHONEBOOK,this);
	
	
	pApp = (CNetproApp *)AfxGetApp();
	HWND hwnd;
	hwnd=pApp->GetMainWnd()->m_hWnd;
	CRect rect;
	//GetClientRect(rect);
	::GetWindowRect(hwnd,rect);
	//ScreenToClient(rect);
	::SetWindowPos(GetSafeHwnd(),HWND_NOTOPMOST,rect.left+100,rect.top-100,rect.Width(),rect.Height(),
		SWP_NOSIZE | SWP_FRAMECHANGED);
	//::MoveWindow(GetSafeHwnd(),100,100,rect.Width(),rect.Height(),TRUE);
	
	//srand((unsigned) time(NULL));  // start the random number generator
	//ChangeListCtrlStyle(LVS_SHOWSELALWAYS|LVS_SINGLESEL ,TRUE);
	ChangeListCtrlStyle(LVS_SHOWSELALWAYS ,TRUE);
	ChangeListCtrlStyle(LVS_EDITLABELS ,TRUE);
	// create image list for header items
	m_pImageHdrSmall = new CImageList();
	ASSERT(m_pImageHdrSmall != NULL);    // serious allocation failure checking
	m_pImageHdrSmall->Create(16, 16, ILC_MASK, 2, 2);
	m_pImageHdrSmall->Add(pApp->LoadIcon(IDI_HDRICON1));
	m_pImageHdrSmall->Add(pApp->LoadIcon(IDI_HDRICON2));

	// fill in image lists
	m_pImageList = new CImageList();
	m_pImageListSmall = new CImageList();
	ASSERT(m_pImageList != NULL && m_pImageListSmall != NULL);    // serious allocation failure checking
	m_pImageList->Create(32, 32, TRUE,  2, 2);
	m_pImageListSmall->Create(16, 16, TRUE, 2, 2);
	m_pImageList->Add(pApp->LoadIcon(IDI_ICONLIST1));
	m_pImageList->Add(pApp->LoadIcon(IDI_ICONLIST2));
	m_pImageListSmall->Add(pApp->LoadIcon(IDI_ICONLIST1));
	m_pImageListSmall->Add(pApp->LoadIcon(IDI_ICONLIST2));

	FillListCtrl();
	ASSERT(m_pMap!=NULL);
	m_listctrl.SetStrMap(m_pMap);
	POSITION pos =NULL;
	pos = m_pMap->GetStartPosition();
	CString cValue;
	CString cKey;
	while(pos!=NULL)
	{
		m_pMap->GetNextAssoc(pos,cKey,cValue);
		InsertRow(cValue, cKey);
	}
	CString s;
	s.LoadString(IDS_PLS_INPUT_NAME_TO_QUERY);
	m_cEditQuery.SetWindowText(s);
	m_listctrl.UpdateData(FALSE);  
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

void CPhoneBookDlg::FillListCtrl()
{
	CRect           rect;
	CString         strItem1;
	CString         strItem2;
	strItem1.LoadString(IDS_NAME);
	strItem2.LoadString(IDS_PHONENUM);

	m_listctrl.SetImageList(m_pImageList, LVSIL_NORMAL);
	m_listctrl.SetImageList(m_pImageListSmall, LVSIL_SMALL);

	// insert two columns (REPORT mode) and modify the new header items
	m_listctrl.GetWindowRect(&rect);
	m_listctrl.InsertColumn(0, strItem1, LVCFMT_LEFT,
		rect.Width() * 2/5, 0);
	m_listctrl.InsertColumn(1, strItem2, LVCFMT_LEFT,
		rect.Width() * 3/5, 1);

	/*Another way
	// insert columns

	int i;
	LV_COLUMN lvc;

	lvc.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;

	for(i = 0; i<NUM_COLUMNS; i++)
	{
		lvc.iSubItem = i;//?在列表中的序号
		lvc.pszText = _gszColumnLabel[i];
		lvc.cx = _gnColumnWidth[i];
		lvc.fmt = _gnColumnFmt[i];
		m_CListMail.InsertColumn(i,&lvc);
	}
	*/

	ChangeView(LVS_REPORT);
	m_listctrl.SetExtendedStyle(m_listctrl.GetExtendedStyle()|LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);
	ModifyHeaderItems();
	
}

void CPhoneBookDlg::ModifyHeaderItems()
{
	HD_ITEM curItem;

	// retrieve embedded header control
	CHeaderCtrl* pHdrCtrl= NULL;
	pHdrCtrl= m_listctrl.GetHeaderCtrl();

	pHdrCtrl->SetImageList(m_pImageHdrSmall);
	// add bmaps to each header item
	pHdrCtrl->GetItem(0, &curItem);
	curItem.mask= HDI_IMAGE | HDI_FORMAT;
	curItem.iImage= 0;
	curItem.fmt= HDF_LEFT | HDF_IMAGE | HDF_STRING;
	pHdrCtrl->SetItem(0, &curItem);

	pHdrCtrl->GetItem(1, &curItem);
	curItem.mask= HDI_IMAGE | HDI_FORMAT;
	curItem.iImage= 1;
	curItem.fmt= HDF_LEFT | HDF_IMAGE | HDF_STRING;
	pHdrCtrl->SetItem(1, &curItem);

}

void CPhoneBookDlg::RenewListCtrl(DWORD dwStyle, BOOL bSetBits)
{
	DWORD   dwStyleOld, dwExtStyles;
	CRect   rect;

	dwStyleOld = GetWindowLong(m_listctrl.m_hWnd, GWL_STYLE);
	if (bSetBits)
		dwStyleOld |= dwStyle;   // turn on bits specified by caller.
	else
		dwStyleOld &= ~dwStyle;  // turn off bits specified by caller.

	m_listctrl.GetWindowRect(&rect);
	ScreenToClient(&rect);
	dwExtStyles= m_listctrl.GetExtendedStyle(); //save extended styles
	m_listctrl.DestroyWindow();
	m_listctrl.Create(dwStyleOld, rect, this, IDC_LIST_PHONEBOOK);
	m_listctrl.ModifyStyleEx(0,WS_EX_CLIENTEDGE); // renew the 3D border of the control
	m_listctrl.SetExtendedStyle(dwExtStyles);

	FillListCtrl(); // repopulate with a new item group

	// work areas are not carried over with the new control
	m_listctrl.SetWorkAreas(0, NULL);
	UpdateData(FALSE);  // update the dialog


}

void CPhoneBookDlg::ChangeListCtrlStyle(DWORD dwStyle, BOOL bSetBits)
{
	CRect   rect;

	m_listctrl.GetWindowRect(&rect);
	ScreenToClient(&rect);
	ASSERT(dwStyle != 0);  // watch out for LVS_foo DEFINITIONS which are 0.
	if (bSetBits)
		m_listctrl.ModifyStyle(0, dwStyle);
	else
		m_listctrl.ModifyStyle(dwStyle, 0);

	InvalidateRect(rect);
	UpdateData(FALSE);  // send information back to the dialog

}

void CPhoneBookDlg::ChangeView(long style)
{
	long lStyle,lStyleOld;
	lStyle = style;
	lStyleOld = GetWindowLong(m_listctrl.m_hWnd, GWL_STYLE);
	lStyleOld &= ~(LVS_TYPEMASK);  // turn off all the style (view mode) bits
	lStyleOld |= lStyle;        // Set the new style for the control
	SetWindowLong(m_listctrl.m_hWnd, GWL_STYLE, lStyleOld);
}

void CPhoneBookDlg::OnEditPhonebook() 
{
	CPhonebookModify m_dlgModify;
	CString mKey,mValue,m_origKey,m_origValue;
	CString value;
	POSITION pos=m_listctrl.GetFirstSelectedItemPosition();
	POSITION pos2= m_pMap->GetStartPosition();
	CString cValue;
	CString cKey;
	CString s1,s2;
	int nPos;
	if(pos==NULL)
	{
		//Launch Add Dialog
		OnAddPhonebook();
		return;
	}
	else
	{
		nPos = m_listctrl.GetNextSelectedItem(pos);

⌨️ 快捷键说明

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