📄 phonebookdlg.cpp
字号:
// 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 + -