📄 phonebookdlg.cpp
字号:
m_origValue=m_listctrl.GetItemText(nPos,0);
m_origKey=m_listctrl.GetItemText(nPos,1);
m_dlgModify.m_sName = m_origValue;
m_dlgModify.m_sNum = m_origKey;
}
if(m_dlgModify.DoModal()==IDOK)
{
//Modify Listview content
mKey = m_dlgModify.m_sNum;
mValue = m_dlgModify.m_sName;
if(m_origKey==mKey)
{
if(m_origValue!=mValue){
//Found Telephone No. Only Modify name
pos2= m_pMap->GetStartPosition();
while(pos2!=NULL)
{
m_pMap->GetNextAssoc(pos2,cKey,cValue);
if(cValue==mValue){
s1.LoadString(IDS_DUPLICATE_NAME);
s2.LoadString(IDS_PLS_REEDIT);
MessageBox(s1,s2);
return;
}
}
m_pMap->SetAt(mKey,mValue);
m_listctrl.SetItemText(nPos,0,m_dlgModify.m_sName.GetBuffer(m_dlgModify.m_sName.GetLength()));
}
}
else
{
if(m_pMap->Lookup((LPCTSTR)mKey,(CString&)value))//要保证电话号码不跟已有的重复
{
s1.LoadString(IDS_DUPLICATE_PHONENUM);
s2.LoadString(IDS_PLS_REEDIT);
MessageBox(s1,s2);
return;
}
if(m_origValue==mValue){//只改了电话号码
//No phone Number matched Modify Num
m_pMap->RemoveKey((LPCTSTR)m_origKey);
m_pMap->SetAt(mKey,mValue);
m_listctrl.SetItemText(nPos,1,mKey.GetBuffer(mKey.GetLength()));
}else{//电话号码和姓名都被改,要保证姓名不跟已有的重复
pos2= m_pMap->GetStartPosition();
while(pos2!=NULL)
{
m_pMap->GetNextAssoc(pos2,cKey,cValue);
if(cValue==mValue){
s1.LoadString(IDS_DUPLICATE_NAME);
s2.LoadString(IDS_PLS_REEDIT);
MessageBox(s1,s2);
return;
}
}
m_pMap->RemoveKey((LPCTSTR)m_origKey);
m_pMap->SetAt(mKey,mValue);
m_listctrl.SetItemText(nPos,0,mValue.GetBuffer(mValue.GetLength()));
m_listctrl.SetItemText(nPos,1,mKey.GetBuffer(mKey.GetLength()));
}
}
}
}
void CPhoneBookDlg::OnDestroy()
{
CDialog::OnDestroy();
}
void CPhoneBookDlg::OnRclickListPhonebook(NMHDR* pNMHDR, LRESULT* pResult)
{
CPoint point(GetMessagePos());
//ClientToScreen(&point);
LVHITTESTINFO LVHitInfo;
LVHitInfo.pt = point;
LVHitInfo.flags = LVHT_ONITEM;
m_nRowInFocus = m_listctrl.HitTest(&LVHitInfo);
CMenu *m_pSubMenu=m_pContextMenu->GetSubMenu(0);
POSITION pos=m_listctrl.GetFirstSelectedItemPosition();
if(pos==NULL){
m_pContextMenu->EnableMenuItem(IDM_EDIT_PHONEBOOK,MF_GRAYED);
m_pSubMenu->EnableMenuItem(IDM_DEL_PHONEBOOK,MF_GRAYED);
}else{
m_pContextMenu->EnableMenuItem(IDM_EDIT_PHONEBOOK,MF_ENABLED);
m_pSubMenu->EnableMenuItem(IDM_DEL_PHONEBOOK,MF_ENABLED);
}
m_pSubMenu->TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON,point.x,point.y,this);
//d_pContextMenu->TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON,point.x,point.y,this);
*pResult = 0;
}
void CPhoneBookDlg::InsertRow(CString name, CString phonenum)
{
LV_ITEM lvitem;
int iIcon, iSubItem, iActualItem;
CString strUsername, strPhonenum;
LPTSTR pStrTemp1, pStrTemp2;
strUsername = name;
strPhonenum = phonenum;
CNetproApp *pApp;
pApp = (CNetproApp *)AfxGetApp();
// calculate the main and sub-item strings for the current item
pStrTemp1= strPhonenum.GetBuffer(strPhonenum.GetLength());
pStrTemp2= strUsername.GetBuffer(strUsername.GetLength());
for (iSubItem = 0; iSubItem < 2; iSubItem++)
{
if (iSubItem == 0)
iIcon = 0; // choose the icon and legend for the entry
lvitem.mask = LVIF_TEXT | (iSubItem == 0? LVIF_IMAGE : 0);
lvitem.iItem = (iSubItem == 0)? iItem : iActualItem;
lvitem.iSubItem = iSubItem;
lvitem.pszText = iSubItem == 0? pStrTemp2 : pStrTemp1;
lvitem.iImage = iIcon;
if (iSubItem == 0)
iActualItem = m_listctrl.InsertItem(&lvitem); // insert new item
else
m_listctrl.SetItem(&lvitem); // modify existing item (the sub-item text)
}
iItem=iActualItem+1;
}
void CPhoneBookDlg::OnAddPhonebook()
{
CPhonebookModify m_dlgModify;
m_dlgModify.m_sTitle.LoadString(IDS_ADD);
CString mKey,mValue,m_origKey,m_origValue;
CString value;
POSITION pos=m_listctrl.GetFirstSelectedItemPosition();
POSITION pos2;
CString cValue;
CString cKey;
CString s1,s2;
if(m_dlgModify.DoModal()==IDOK)
{
//Modify Listview content
mKey = m_dlgModify.m_sNum;
mValue = m_dlgModify.m_sName;
if(mKey==""||mValue==""){
s1.LoadString(IDS_EMPTY_NAME_OR_NUM);
s2.LoadString(IDS_PLS_REEDIT);
MessageBox(s1,s2);
//MessageBox("电话号码或姓名不能为空","请重新编辑");
OnAddPhonebook();
return;
}
if(m_pMap->Lookup((LPCTSTR)mKey,(CString&)value))//要保证电话号码不跟已有的重复
{
s1.LoadString(IDS_DUPLICATE_PHONENUM);
s2.LoadString(IDS_PLS_REEDIT);
MessageBox(s1,s2);
return;
}
pos2= m_pMap->GetStartPosition();
while(pos2!=NULL)
{
m_pMap->GetNextAssoc(pos2,cKey,cValue);
if(cValue==mValue){
s1.LoadString(IDS_DUPLICATE_NAME);
s2.LoadString(IDS_PLS_REEDIT);
MessageBox(s1,s2);
return;
}
}
m_pMap->SetAt(mKey,mValue);
InsertRow(mValue,mKey);
m_listctrl.UpdateData(FALSE);
}
}
void CPhoneBookDlg::OnDelPhonebook()
{
POSITION pos=m_listctrl.GetFirstSelectedItemPosition();
int nPos,Count,PosArray[100];
CString m_Text,m_origKey,m_origValue;
Count=0;
CString s1,s2;
if (pos == NULL)
TRACE0("No items were selected!\n");
else
{
m_Text.Format(IDS_CONFIRM_DEL,m_listctrl.GetSelectedCount( ));
s2.LoadString(IDS_DEL);
if(MessageBox(m_Text,s2,MB_OKCANCEL|MB_ICONQUESTION|MB_SYSTEMMODAL)==IDOK){
while (pos)
{
nPos = m_listctrl.GetNextSelectedItem(pos);
TRACE1("Item %d was selected!\n", nPos);
// you could do your own processing on nItem here
m_origValue=m_listctrl.GetItemText(nPos,0);
m_origKey=m_listctrl.GetItemText(nPos,1);
m_pMap->RemoveKey(m_origKey);
PosArray[Count++] = nPos;
}
for(int i=Count-1;i>=0;i--)
{
m_listctrl.DeleteItem(PosArray[i]);
}
m_listctrl.UpdateData(FALSE);
}
}
}
void CPhoneBookDlg::OnQueryPhonebook()
{
CEdit* pEdit = (CEdit*)GetDlgItem(IDC_EDIT_QUERY);
pEdit->SetSel(0,pEdit->GetWindowTextLength());
pEdit->SetFocus();
}
void CPhoneBookDlg::OnButtonAdd()
{
OnAddPhonebook();
}
void CPhoneBookDlg::OnChangeEditQuery()
{
int iType,i;
CString value;
LVFINDINFO lvFindInfo;
memset(&lvFindInfo,0,sizeof(LVFINDINFO));
iType = m_cComboQuery.GetCurSel( );
iType = m_cComboQuery.GetItemData(iType);
m_cEditQuery.GetWindowText((CString&)value);
int nSelected = m_listctrl.GetSelectedCount();
int nSelectedIndex = -1;
for ( i = 0; i < nSelected; i++)
{
nSelectedIndex = m_listctrl.GetNextItem(nSelectedIndex, LVNI_ALL | LVNI_SELECTED);
m_listctrl.SetItemState(nSelectedIndex, ~LVIS_SELECTED, LVIS_SELECTED);
}
lvFindInfo.flags = LVFI_PARTIAL;
lvFindInfo.psz = (LPCTSTR)value;
//lvFindInfo.lparam = ;
if(iType==0)
{
//按姓名
i = m_listctrl.FindItem( &lvFindInfo) ;
if(i!=-1)
m_listctrl.SetItemState(i,LVIS_FOCUSED|LVIS_SELECTED,LVIS_SELECTED | LVIS_FOCUSED);
}else{
//按电话号码
}
m_listctrl.EnsureVisible( i,FALSE);
m_listctrl.UpdateData(FALSE);
}
void CPhoneBookDlg::OnNcDestroy()
{
if(m_pContextMenu)
{
m_pContextMenu->DestroyMenu( );
delete m_pContextMenu;
}
delete m_pImageList;
delete m_pImageListSmall;
delete m_pImageHdrSmall;
CDialog::OnNcDestroy();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -