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

📄 phonebooklistctrl.cpp

📁 通信增值服务,上网接听电话
💻 CPP
字号:
// PhonebookListCtrl.cpp : implementation file
//

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

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

/////////////////////////////////////////////////////////////////////////////
// CPhonebookListCtrl
/*
CPhonebookListCtrl::CPhonebookListCtrl(CMapStringToString* map)
{
	m_iEditSubItem=-1;
	m_iEditItem=-1;
	m_nEdit=-1;
	m_pMap = map;
}*/

CPhonebookListCtrl::CPhonebookListCtrl()
{
	m_iEditSubItem=-1;
	m_iEditItem=-1;
	m_nEdit=-1;
	m_pMap = NULL;
}

CPhonebookListCtrl::~CPhonebookListCtrl()
{
}


BEGIN_MESSAGE_MAP(CPhonebookListCtrl, CListCtrl)
	//{{AFX_MSG_MAP(CPhonebookListCtrl)
	ON_NOTIFY_REFLECT(LVN_BEGINLABELEDIT, OnBeginlabeledit)
	ON_NOTIFY_REFLECT(LVN_ENDLABELEDIT, OnEndlabeledit)
	ON_WM_ERASEBKGND()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CPhonebookListCtrl message handlers
BOOL CPhonebookListCtrl::AddItem(int nItem, int nSubItem, LPCTSTR strItem, int nImageIndex)
{
	LV_ITEM lvItem;
	lvItem.mask = LVIF_TEXT;
	lvItem.iItem = nItem;
	lvItem.iSubItem = nSubItem;
	lvItem.pszText = (LPTSTR) strItem;
	if(nImageIndex != -1){
		lvItem.mask |= LVIF_IMAGE;
		lvItem.iImage |= LVIF_IMAGE;
	}
	if(nSubItem == 0)
		return InsertItem(&lvItem);
	return SetItem(&lvItem);

}

BOOL CPhonebookListCtrl::AddColumn(LPCTSTR strItem, int nItem, int nSubItem, int nMask, int nFmt)
{
	LV_COLUMN lvc;
	lvc.mask = nMask;
	lvc.fmt = nFmt;
	lvc.pszText = (LPTSTR) strItem;
	lvc.cx = GetStringWidth(lvc.pszText) + 15;
	if(nMask & LVCF_SUBITEM){
		if(nSubItem != -1)
			lvc.iSubItem = nSubItem;
		else
			lvc.iSubItem = nItem;
	}
	return InsertColumn(nItem,&lvc);

}

void CPhonebookListCtrl::OnBeginlabeledit(NMHDR* pNMHDR, LRESULT* pResult) 
{
	LV_DISPINFO* pDispInfo = (LV_DISPINFO*)pNMHDR;
	// TODO: Add your control notification handler code here
	CPoint posMouse;
    GetCursorPos(&posMouse);
    ScreenToClient(&posMouse);

    LV_COLUMN lvc;
    lvc.mask=LVCF_WIDTH;

    CRect rcItem;
	GetItemRect(pDispInfo->item.iItem,rcItem,LVIR_LABEL);
	

    if(rcItem.PtInRect(posMouse))
        m_nEdit=0;	

    int nCol=1;
    while(m_nEdit==-1 && GetColumn(nCol,&lvc))
    {	
        rcItem.left=rcItem.right;
        rcItem.right+=lvc.cx;

        if(rcItem.PtInRect(posMouse))
            m_nEdit=nCol;	

        nCol++;	
    }

    if(m_nEdit==-1)
        return;
			
	m_iEditItem = pDispInfo->item.iItem;
    m_iEditSubItem = m_nEdit;

	CEdit* m_LVEdit = GetEditControl();
	/*HWND hWnd=(HWND)SendMessage(LVM_GETEDITCONTROL);
    ASSERT(hWnd!=NULL);
    VERIFY(m_LVEdit.SubclassWindow(hWnd));
	*/
    //m_LVEdit.m_x=rcItem.left;
    //m_LVEdit.m_y=rcItem.top-1;
	CRect rect;
	m_LVEdit->GetWindowRect((LPRECT)rect);
	ScreenToClient( rect );

	m_LVEdit->SetWindowPos(&wndTop , rcItem.left ,rcItem.top-1,rect.Width(),rect.Height(),SWP_SHOWWINDOW );
	m_LVEdit->MoveWindow(rcItem.left ,rcItem.top-1,rect.Width(),rect.Height(),TRUE);
    m_LVEdit->SetWindowText(GetItemText(pDispInfo->item.iItem,m_nEdit));

   	
	*pResult = 0;
}

void CPhonebookListCtrl::OnEndlabeledit(NMHDR* pNMHDR, LRESULT* pResult) 
{
	LV_DISPINFO* pDispInfo = (LV_DISPINFO*)pNMHDR;
 	*pResult = TRUE;
	POSITION pos2;
	CString cKey,cValue;
 
    CString sEdit=pDispInfo->item.pszText;

    if(!sEdit.IsEmpty()&&sEdit!=GetItemText(m_iEditItem,m_iEditSubItem))
    {

    //check dual name or telephone number
	if(m_iEditSubItem==0){
		//Alter name
			pos2= m_pMap->GetStartPosition();
			while(pos2!=NULL)
			{
				m_pMap->GetNextAssoc(pos2,cKey,cValue);
				if(cValue==sEdit){
				MessageBox("该用户名已存在","请重新编辑");
				goto exit1;
				//EditLabel(m_iEditItem);
				//return;
				}
			}
			
			m_pMap->SetAt(GetItemText(m_iEditItem,1),sEdit);
			SetItemText(pDispInfo->item.iItem,m_nEdit,sEdit);
			
	}else{
		//alter Number
		if(m_pMap->Lookup((LPCTSTR)sEdit,(CString&)cValue))//要保证电话号码不跟已有的重复
		{
			MessageBox("该电话号码已存在","请重新编辑");
			
		}else{
		m_pMap->RemoveKey((LPCTSTR)GetItemText(m_iEditItem,1));
		m_pMap->SetAt(sEdit,(LPCTSTR)GetItemText(m_iEditItem,0));
		SetItemText(pDispInfo->item.iItem,m_nEdit,sEdit);
		}

	}
	
    }
exit1:
    m_nEdit=-1;
	m_iEditSubItem=-1;
	m_iEditItem=-1;

    SetItemState(pDispInfo->item.iItem,0,LVNI_FOCUSED|LVNI_SELECTED);


	*pResult = 0;
}

BOOL CPhonebookListCtrl::OnEraseBkgnd(CDC* pDC) 
{

	// TODO: Add your message handler code here and/or call default
	CEdit* pEdit = GetEditControl();
	
	//m_iEditItem and m_iEditSubItem were set in the 
	//LVN_BEGINLABELEDIT message handler
	
	if( pEdit && ::IsWindowVisible( pEdit->GetSafeHwnd() ) 
		&& m_iEditItem != -1 && m_iEditSubItem != -1 )
	{
		CRect rcEdit;
		pEdit->GetWindowRect( rcEdit );
		ScreenToClient( rcEdit );

		CRect rcSubItem;
		GetSubItemRect( m_iEditItem, m_iEditSubItem, 
						LVIR_LABEL, rcSubItem );

		rcEdit.left = rcSubItem.left;
		rcEdit.right= rcSubItem.right;

		if( m_iEditSubItem > 0 )
			rcEdit.left += 4;//This is a little wierd
							
		pEdit->MoveWindow( rcEdit );

		return CListCtrl::OnEraseBkgnd(pDC);
	}
	else
		return CListCtrl::OnEraseBkgnd(pDC);
}

void CPhonebookListCtrl::SetStrMap(CMapStringToString *map)
{
	ASSERT(map!=NULL);
	m_pMap = map;
}

⌨️ 快捷键说明

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