?? phonebooklistctrl.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))//要保證電話號碼不跟已有的重復(fù)
{
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;
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -