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

📄 booklistview.cpp

📁 此程序用到了,ADO连接ACCESS数据库,切分窗口,以及不同视图之间进行通信.List Control和Tree Control,用户UI线程等技术.
💻 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 + -