📄 booklistview.cpp
字号:
// BookListView.cpp : implementation file
//
#include "stdafx.h"
#include "ChooseBookTool.h"
#include "BookListView.h"
#include "MainFrm.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CBookListView
static CString BookList[7] = {"BookID","ISBN","图书书名","出版社名称","作者","出版日期",\
"所属类别"};
IMPLEMENT_DYNCREATE(CBookListView, CFormView)
CBookListView::CBookListView()
: CFormView(CBookListView::IDD)
{
//{{AFX_DATA_INIT(CBookListView)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
}
CBookListView::~CBookListView()
{
}
void CBookListView::DoDataExchange(CDataExchange* pDX)
{
CFormView::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CBookListView)
DDX_Control(pDX, IDC_LIST_BOOK, m_CtrBookList);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CBookListView, CFormView)
//{{AFX_MSG_MAP(CBookListView)
ON_WM_PAINT()
ON_WM_WINDOWPOSCHANGING()
ON_NOTIFY(NM_RCLICK, IDC_LIST_BOOK, OnRclickListBook)
ON_NOTIFY(HDN_ITEMCHANGING, IDC_LIST_BOOK, OnItemchangingListBook)
ON_NOTIFY(LVN_ITEMCHANGED, IDC_LIST_BOOK, OnItemchangedListBook)
ON_NOTIFY(LVN_DELETEITEM, IDC_LIST_BOOK, OnDeleteitemListBook)
ON_NOTIFY(LVN_DELETEALLITEMS, IDC_LIST_BOOK, OnDeleteallitemsListBook)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CBookListView diagnostics
#ifdef _DEBUG
void CBookListView::AssertValid() const
{
CFormView::AssertValid();
}
void CBookListView::Dump(CDumpContext& dc) const
{
CFormView::Dump(dc);
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CBookListView message handlers
void CBookListView::OnInitialUpdate()
{
CFormView::OnInitialUpdate();
// TODO: Add your specialized code here and/or call the base class
CWnd* pWnd = GetDlgItem(IDC_LIST_BOOK);
GetClientRect(&BookList_Rect);
pWnd->MoveWindow(BookList_Rect);
m_Imagelist.Create(16,16,TRUE,2,2);
m_Imagelist.Add(AfxGetApp()->LoadIcon(IDR_BOOKLIST));
m_CtrBookList.SetImageList(&m_Imagelist,LVSIL_SMALL);
m_font.CreateFont(16,0,0,0,FW_NORMAL,0,0,0,
DEFAULT_CHARSET,OUT_CHARACTER_PRECIS,CLIP_CHARACTER_PRECIS,
DEFAULT_QUALITY,DEFAULT_PITCH|FF_DONTCARE,"Arial");
m_CtrBookList.SetFont(&m_font);
m_CtrBookList.SetBkColor(RGB(247,247,255));
m_CtrBookList.SetTextColor(RGB(0,0,255));
m_CtrBookList.SetTextBkColor(RGB(247,247,247));
m_CtrBookList.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES|
LVS_EX_MULTIWORKAREAS|LVS_EX_CHECKBOXES|LVS_EX_HEADERDRAGDROP);
AddBookListColumn();
}
void CBookListView::OnPaint()
{
CPaintDC dc(this); // device context for painting
// TODO: Add your message handler code here
GetClientRect(&BookList_Rect);
int cx = BookList_Rect.Width();
GetDlgItem(IDC_LIST_BOOK)->MoveWindow(BookList_Rect);
for (int i=0;i<7;i++)
{
m_CtrBookList.SetColumnWidth(i,cx/7);
}
// Do not call CFormView::OnPaint() for painting messages
}
void CBookListView::AddBookListColumn()
{
CRect rtClient;
GetClientRect(&rtClient);
int cy = rtClient.Width();
for (int i=0;i<7;i++)
{
m_CtrBookList.InsertColumn(i,BookList[i],LVCFMT_CENTER,cy/7,i);
}
}
void CBookListView::OnWindowPosChanging(WINDOWPOS FAR* lpwndpos)
{
CFormView::OnWindowPosChanging(lpwndpos);
// TODO: Add your message handler code here
//禁止视图类的滚动条
ShowScrollBar(SB_BOTH,FALSE);
ModifyStyle(WS_HSCROLL,0,SWP_DRAWFRAME);
}
void CBookListView::OnRclickListBook(NMHDR* pNMHDR, LRESULT* pResult)
{
// TODO: Add your control notification handler code here
int i = 0;
CRect rect;
CPoint point;
//得到鼠标坐标
::GetCursorPos(&point);
HMENU hMenu = ::CreatePopupMenu();
UINT CmdID;
::AppendMenu(hMenu,MF_STRING,101,"全选[&A]");
::AppendMenu(hMenu,MF_STRING,102,"删除[&D]");
::AppendMenu(hMenu,MF_STRING,103,"选择[&S]");
::AppendMenu(hMenu,MF_STRING,104,"刷新[&F]");
::AppendMenu(hMenu,MF_STRING,105,"取消选中[&C]");
::AppendMenu(hMenu,MF_STRING,106,"全部取消选中[&Q]");
::AppendMenu(hMenu,MF_STRING,107,"全部删除[&R]");
CmdID = (UINT)::TrackPopupMenu
(hMenu,TPM_LEFTALIGN|TPM_RIGHTBUTTON|TPM_RETURNCMD,point.x,point.y,0,m_hWnd,NULL);
switch(CmdID)
{
case 101:
for (i=0;i<m_CtrBookList.GetItemCount();i++)
{
m_CtrBookList.SetCheck(i);
}
break;
case 102:
if (MessageBox("真的要删除此条记录吗?","警告",MB_ICONWARNING|MB_OKCANCEL) == IDOK)
{
m_pos = m_CtrBookList.GetFirstSelectedItemPosition();
m_nIndex = m_CtrBookList.GetNextSelectedItem(m_pos);
m_CtrBookList.DeleteItem(m_nIndex);
}
break;
case 103:
m_pos = m_CtrBookList.GetFirstSelectedItemPosition();
m_nIndex = m_CtrBookList.GetNextSelectedItem(m_pos);
m_CtrBookList.SetCheck(m_nIndex);
break;
case 104:
Invalidate(TRUE);
break;
case 105:
m_pos = m_CtrBookList.GetFirstSelectedItemPosition();
m_nIndex = m_CtrBookList.GetNextSelectedItem(m_pos);
m_CtrBookList.SetCheck(m_nIndex,FALSE);
break;
case 106:
for (i=0;i<m_CtrBookList.GetItemCount();i++)
{
m_CtrBookList.SetCheck(i,FALSE);
}
break;
case 107:
if (MessageBox("真的要全部删除吗?","警告",MB_ICONWARNING|MB_OKCANCEL)==IDOK)
{
m_CtrBookList.DeleteAllItems();
}
break;
default:
break;
}
UpdateData(FALSE);
*pResult = 0;
}
void CBookListView::OnItemchangingListBook(NMHDR* pNMHDR, LRESULT* pResult)
{
HD_NOTIFY *phdn = (HD_NOTIFY *) pNMHDR;
// TODO: Add your control notification handler code here
AfxMessageBox("记录正在改变!");
*pResult = 0;
}
void CBookListView::OnItemchangedListBook(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
// TODO: Add your control notification handler code here
CString str;
int BookNumber;
BookNumber = m_CtrBookList.GetItemCount();
CMainFrame *pFrame = (CMainFrame*)AfxGetApp()->m_pMainWnd;
CStatusBar *pStatus = &pFrame->m_wndStatusBar;
int nIndex = 0;
if (pStatus)
{
str.Format("当前数量:%d",BookNumber);
nIndex = pStatus->CommandToIndex(ID_BOOKNUM);
pStatus->SetPaneText(nIndex,str,TRUE);
//AfxMessageBox(str);
}
*pResult = 0;
}
void CBookListView::OnDeleteitemListBook(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
// TODO: Add your control notification handler code here
CString str;
int BookNumber;
BookNumber = m_CtrBookList.GetItemCount();
BookNumber -=1;
CMainFrame *pFrame = (CMainFrame*)AfxGetApp()->m_pMainWnd;
CStatusBar *pStatus = &pFrame->m_wndStatusBar;
int nIndex = 0;
if (pStatus)
{
str.Format("当前数量:%d",BookNumber);
nIndex = pStatus->CommandToIndex(ID_BOOKNUM);
pStatus->SetPaneText(nIndex,str,TRUE);
//AfxMessageBox(str);
}
*pResult = 0;
}
void CBookListView::OnDeleteallitemsListBook(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
// TODO: Add your control notification handler code here
CString str = _T("");
CMainFrame *pFrame = (CMainFrame*)AfxGetApp()->m_pMainWnd;
CStatusBar *pStatus = &pFrame->m_wndStatusBar;
int nIndex = 0;
if (pStatus)
{
str.Format("当前数量:0");
nIndex = pStatus->CommandToIndex(ID_BOOKNUM);
pStatus->SetPaneText(nIndex,str,TRUE);
//AfxMessageBox(str);
}
*pResult = 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -