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

📄 mainfrm.cpp

📁 个人电子图书管理系统.提供电子书的书名和其他信息.检查电子书信息的合法性(E-1) .为这本电子书生成 id.使用分类id
💻 CPP
字号:
// GUI/MainFrm.cpp : CMainFrame 类的实现
//
#include "stdafx.h"
#include "KingBook.h"
#include "MainFrm.h"
#include "BookInfoView.h"
#include "BookListView.h"
#include "BookTreeView.h"
#include <strsafe.h>
#include "KingBookDoc.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif


// CMainFrame

IMPLEMENT_DYNCREATE(CMainFrame, CFrameWnd)

BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
    ON_WM_CREATE()
    // 全局帮助命令
    ON_COMMAND(ID_HELP_FINDER, &CFrameWnd::OnHelpFinder)
    ON_COMMAND(ID_HELP, &CFrameWnd::OnHelp)
    ON_COMMAND(ID_CONTEXT_HELP, &CFrameWnd::OnContextHelp)
    ON_COMMAND(ID_DEFAULT_HELP, &CFrameWnd::OnHelpFinder)
    ON_UPDATE_COMMAND_UI(IDM_DELETE_BOOK, &CMainFrame::OnUpdateDeleteBook)
    ON_UPDATE_COMMAND_UI(IDM_ADDTO_FAVORITE, &CMainFrame::OnUpdateAddtoFavorite)
    ON_UPDATE_COMMAND_UI(IDM_ADD_BOOK, &CMainFrame::OnUpdateAddBook)
    ON_UPDATE_COMMAND_UI(IDM_EDIT_BOOK, &CMainFrame::OnUpdateEditBook)
END_MESSAGE_MAP()

static UINT indicators[] =
{
    ID_SEPARATOR,           // 状态行指示器
    ID_INDICATOR_CAPS,
    ID_INDICATOR_NUM,
    ID_INDICATOR_SCRL,
};


// CMainFrame 构造/析构

CMainFrame::CMainFrame()
{
    // TODO: 在此添加成员初始化代码
}

CMainFrame::~CMainFrame()
{
}

//BOOL CMainFrame::CreateToolBar()
//{
//    int MAX_LEN = 16;
//    HWND hwndParent = this->m_hWnd;
//    HWND hwndTB; 
//    //   TBADDBITMAP tbab; 
/// /    TBBUTTON tbb[3]; 
//    TBBUTTON* tbb = new TBBUTTON[3]; 
//    char* szBuf = new char[16]; 
//    int iCut, iCopy, iPaste;
//    INITCOMMONCONTROLSEX icex;
//    HRESULT hr;
//    size_t cch;
//
//    // Ensure that the common control DLL is loaded. 
//    icex.dwSize = sizeof(INITCOMMONCONTROLSEX);
//    icex.dwICC  = ICC_BAR_CLASSES;
//    InitCommonControlsEx(&icex);
//
//    // Create a toolbar. 
//    hwndTB = ::CreateWindowEx(0, TOOLBARCLASSNAME, (LPSTR) NULL, 
//        WS_CHILD | CCS_ADJUSTABLE, 0, 0, 0, 0, hwndParent, 
//        (HMENU) IDR_TOOLBAR24, AfxGetApp()->m_hInstance, NULL); 
//
//    // Send the TB_BUTTONSTRUCTSIZE message, which is required for 
//    // backward compatibility. 
//    ::SendMessage(hwndTB, TB_BUTTONSTRUCTSIZE, (WPARAM) sizeof(TBBUTTON), 0); 
//
//    // Add the button strings to the toolbar's internal string list. 
//    LoadString(AfxGetApp()->m_hInstance, ID_EDIT_CUT, szBuf, MAX_LEN-1); 
//    //Save room for second terminating null character.
//    hr = StringCchLength(szBuf, MAX_LEN, &cch);
//    if(SUCCEEDED(hr))
//    {
//        szBuf[cch + 2] = 0;  //Double-null terminate.
//    }
//    else
//    {
//        // TODO: Write error handler.
//    } 
//    iCut = ::SendMessage(hwndTB, TB_ADDSTRING, 0, (LPARAM) (LPSTR) szBuf); 
//    LoadString(AfxGetApp()->m_hInstance, ID_EDIT_COPY, szBuf, MAX_LEN-1);  
//    //Save room for second terminating null character.
//    hr = StringCchLength(szBuf, MAX_LEN, &cch);
//    if(SUCCEEDED(hr))
//    {
//        szBuf[cch + 2] = 0;  //Double-null terminate.
//    }
//    else
//    {
//        // TODO: Write error handler.
//    } 
//    iCopy = ::SendMessage(hwndTB, TB_ADDSTRING, (WPARAM) 0, 
//        (LPARAM) (LPSTR) szBuf); 
//    LoadString(AfxGetApp()->m_hInstance, ID_EDIT_PASTE, szBuf, MAX_LEN-1);  
//    //Save room for second terminating null character.
//    hr = StringCchLength(szBuf, MAX_LEN, &cch);
//    if(SUCCEEDED(hr))
//    {
//        szBuf[cch + 2] = 0;  //Double-null terminate.
//    }
//    else
//    {
//        // TODO: Write error handler.
//    } 
//    iPaste = ::SendMessage(hwndTB, TB_ADDSTRING, (WPARAM) 0, 
//        (LPARAM) (LPSTR) szBuf); 
//
//    // Fill the TBBUTTON array with button information, and add the 
//    // buttons to the toolbar. The buttons on this toolbar have text 
//    // but do not have bitmap images. 
//    tbb[0].iBitmap = I_IMAGENONE; 
//    tbb[0].idCommand = ID_EDIT_CUT; 
//    tbb[0].fsState = TBSTATE_ENABLED; 
//    tbb[0].fsStyle = BTNS_BUTTON; 
//    tbb[0].dwData = 0; 
//    tbb[0].iString = iCut; 
//
//    tbb[1].iBitmap = I_IMAGENONE; 
//    tbb[1].idCommand = ID_EDIT_COPY; 
//    tbb[1].fsState = TBSTATE_ENABLED; 
//    tbb[1].fsStyle = BTNS_BUTTON; 
//    tbb[1].dwData = 0; 
//    tbb[1].iString = iCopy; 
//
//    tbb[2].iBitmap = I_IMAGENONE; 
//    tbb[2].idCommand = ID_EDIT_PASTE; 
//    tbb[2].fsState = TBSTATE_ENABLED; 
//    tbb[2].fsStyle = BTNS_BUTTON; 
//    tbb[2].dwData = 0; 
//    tbb[2].iString = iPaste; 
//
//    ::SendMessage(hwndTB, TB_ADDBUTTONS, (WPARAM) 3/*NUM_BUTTONS*/, 
//        (LPARAM) (LPTBBUTTON) &tbb); 
//
//    ::SendMessage(hwndTB, TB_AUTOSIZE, 0, 0); 
//
//    ::ShowWindow(hwndTB, SW_SHOW); 
//    //return hwndTB; 
//    return TRUE; 
//
//}
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
    if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
        return -1;

    //if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP
    //	| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) 
    //    ||!m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
    //{
    //	TRACE0("未能创建工具栏\n");
    //	return -1;      // 未能创建
    //}
	if (!m_wndReBar.Create(this))
	{
		TRACE0("Failed to create rebar\n");
		return -1;      // fail to create
	}
    if (!m_wndToolBar.CreateEx(this))
    {
        TRACE0("Failed to create toolbar\n");
        return -1;      // fail to create
    }
    CBitmap    bmp;
	CImageList img;
	CString    str;
    
    m_wndToolBar.GetToolBarCtrl().SetButtonWidth(34, 38);
	m_wndToolBar.GetToolBarCtrl().SetExtendedStyle(TBSTYLE_EX_DRAWDDARROWS);

	//img.Create(IDB_HOTTOOLBAR32, 34, 0, RGB(255, 255, 255));
    bmp.LoadBitmap(IDB_TOOLBAR8);
    img.Create(34, 34, ILC_COLOR24, 6, 0);
    img.Add(&bmp, RGB(0, 0, 0));
	m_wndToolBar.GetToolBarCtrl().SetHotImageList(&img);
	m_wndToolBar.GetToolBarCtrl().SetImageList(&img);
	img.Detach();
    bmp.Detach();
    bmp.LoadBitmap(IDB_DIS_TOOLBAR8);
    img.Create(34, 34, ILC_COLOR24, 6, 0);
    img.Add(&bmp, RGB(0, 0, 0));
    m_wndToolBar.GetToolBarCtrl().SetDisabledImageList(&img);
	img.Detach();
    bmp.Detach();

	m_wndToolBar.ModifyStyle(0, TBSTYLE_FLAT | TBSTYLE_TRANSPARENT);
	m_wndToolBar.SetButtons(NULL, 6);

    // Set each button
    m_wndToolBar.SetButtonInfo(0, IDM_ADD_BOOK, TBSTYLE_BUTTON, 0);
    m_wndToolBar.SetButtonInfo(1, IDM_EDIT_BOOK, TBSTYLE_BUTTON, 1);
    m_wndToolBar.SetButtonInfo(2, IDM_ADDTO_FAVORITE, TBSTYLE_BUTTON, 2);	
    m_wndToolBar.SetButtonInfo(3, IDM_DELETE_BOOK, TBSTYLE_BUTTON, 3);
    m_wndToolBar.SetButtonInfo(4, ID_HELP_FINDER, TBSTYLE_BUTTON, 4);
    m_wndToolBar.SetButtonInfo(5, ID_APP_EXIT, TBSTYLE_BUTTON, 5);
    
    CRect rectToolBar;
	// set up toolbar button sizes
//	m_wndToolBar.SetSizes(rectToolBar.Size(), CSize(16,15));
	m_wndToolBar.SetSizes(CSize(41, 40), CSize(34,34));
	m_wndToolBar.GetItemRect(0, &rectToolBar);

    this->m_wndReBar.AddBar(&m_wndToolBar,NULL, NULL, RBBS_GRIPPERALWAYS|RBBS_FIXEDBMP|RBBS_USECHEVRON);

	// set up min/max sizes and ideal sizes for pieces of the rebar
	REBARBANDINFO rbbi;

	rbbi.cbSize = sizeof(rbbi);
	rbbi.fMask = RBBIM_CHILDSIZE | RBBIM_IDEALSIZE | RBBIM_SIZE;
	rbbi.cxMinChild = rectToolBar.Width();
	rbbi.cyMinChild = rectToolBar.Height();
	rbbi.cx = rbbi.cxIdeal = rectToolBar.Width() * 9;
	m_wndReBar.GetReBarCtrl().SetBandInfo(0, &rbbi);
	rbbi.cxMinChild = 0;

	m_wndToolBar.SetBarStyle(m_wndToolBar.GetBarStyle() |
		CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_FIXED);

    //    CreateToolBar();
    if (!m_wndStatusBar.Create(this) ||
        !m_wndStatusBar.SetIndicators(indicators,
        sizeof(indicators)/sizeof(UINT)))
    {
        TRACE0("未能创建状态栏\n");
        return -1;      // 未能创建
    }

    // TODO: 如果不需要工具栏可停靠,则删除这三行
    //m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
    //EnableDocking(CBRS_ALIGN_ANY);
    //DockControlBar(&m_wndToolBar);

    return 0;
}

BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
    if( !CFrameWnd::PreCreateWindow(cs) )
        return FALSE;
    // TODO: 在此处通过修改
    //  CREATESTRUCT cs 来修改窗口类或样式

    return TRUE;
}


// CMainFrame 诊断

#ifdef _DEBUG
void CMainFrame::AssertValid() const
{
    CFrameWnd::AssertValid();
}

void CMainFrame::Dump(CDumpContext& dc) const
{
    CFrameWnd::Dump(dc);
}

#endif //_DEBUG


// CMainFrame 消息处理程序

BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
{
    // TODO: 创建分割视图
    if(! this->m_wndLeft.CreateStatic(this, 1, 2))
    {
        TRACE0("Failed to Create Left Splitter\n");
        return FALSE;
    }

    if (!m_wndLeft.CreateView(0, 0,
        RUNTIME_CLASS(CBookTreeView), CSize(180, 50), pContext))
    {
        TRACE0("Failed to create first pane\n");
        return FALSE;
    }

    if(! this->m_wndRight.CreateStatic(
        &m_wndLeft, 
        2, 1,
        WS_CHILD | WS_VISIBLE | WS_BORDER,  // style, WS_BORDER is needed
        m_wndLeft.IdFromRowCol(0, 1)
        ))
    {
        TRACE0("Failed to Create Right Splitter\n");
        return FALSE;
    }

    // now create the two views inside the nested splitter
    int cyList = max(lpcs->cy / 2, 260);    // height of text pane

    //TRACE0("")
    if (!m_wndRight.CreateView(0, 0,
        RUNTIME_CLASS(CBookListView), CSize(20, cyList), pContext))
    {
        TRACE0("Failed to create first pane\n");
        return FALSE;
    }

    if (!m_wndRight.CreateView(1, 0,
        RUNTIME_CLASS(CBookInfoView), CSize(20, 50), pContext))
    {
        TRACE0("Failed to create first pane\n");
        return FALSE;
    }


    return TRUE;//CFrameWnd::OnCreateClient(lpcs, pContext);
}



// CKingBookToolBar

IMPLEMENT_DYNAMIC(CKingBookToolBar, CToolBar)

CKingBookToolBar::CKingBookToolBar()
{

}

CKingBookToolBar::~CKingBookToolBar()
{
}


BEGIN_MESSAGE_MAP(CKingBookToolBar, CToolBar)
END_MESSAGE_MAP()



// CKingBookToolBar 消息处理程序



BOOL CKingBookToolBar::CreateEx(CWnd* pParentWnd, DWORD dwCtrlStyle , DWORD dwStyle , CRect rcBorders , UINT nID)
{
    // TODO: 在此添加专用代码和/或调用基类
    if(CToolBar::CreateEx(pParentWnd, dwCtrlStyle, dwStyle, rcBorders, nID) != TRUE)
    {
        return FALSE;
    }
    LoadToolBar(IDR_MAINFRAME);
    //CToolBarCtrl &tbCtrl = this->GetToolBarCtrl();
    //CImageList imgList;
    //imgList.Create(24, 24, ILC_COLOR8, 0, 4);
    //imgList.Add(AfxGetApp()->LoadIcon(IDI_ICON_EXIT));
    //imgList.Add(AfxGetApp()->LoadIcon(IDI_ICON_HELP));
    //tbCtrl.SetImageList(&imgList);
    // LoadBitmap(IDR_TOOLBAR24);

    return TRUE;
}

// 更新菜单状态, 删除图书
void CMainFrame::OnUpdateDeleteBook(CCmdUI *pCmdUI)
{
    // 判断活动视图
    if(this->GetActiveView()->GetRuntimeClass() != RUNTIME_CLASS(CBookListView))
    {
        pCmdUI->Enable(FALSE);
        return ;
    }
    // 判断, listView是否选中图书

    CKingBookDoc* pDoc = (CKingBookDoc*)this->GetActiveDocument();
    if(pDoc->GetShownBook() == "")
    {
        pCmdUI->Enable(FALSE);
    }
    else
    {
        pCmdUI->Enable(TRUE);
    }
}

// 更新菜单状态, 添加到收藏
void CMainFrame::OnUpdateAddtoFavorite(CCmdUI *pCmdUI)
{
    // 判断活动视图
    if(this->GetActiveView()->GetRuntimeClass() != RUNTIME_CLASS(CBookListView))
    {
        pCmdUI->Enable(FALSE);
        return ;
    }
    // 判断, listView是否选中图书

    CKingBookDoc* pDoc = (CKingBookDoc*)this->GetActiveDocument();
    if(pDoc->GetShownBook() == "")
    {
        pCmdUI->Enable(FALSE);
    }
    else
    {
        pCmdUI->Enable(TRUE);
    }    
}

// 更新菜单状态, "收藏夹"等没有这个菜单/按钮
void CMainFrame::OnUpdateAddBook(CCmdUI *pCmdUI)
{
    CKingBookDoc* pDoc = (CKingBookDoc*)this->GetActiveDocument();
    if(pDoc->GetShownBookClass() == Library::IDS_ALL_BOOK)
    {
        pCmdUI->Enable(FALSE);
    }
    else if(pDoc->GetShownBookClass() == Library::IDS_RECENT)
    {
        pCmdUI->Enable(FALSE);
    }
    else if(pDoc->GetShownBookClass() == Library::IDS_FAVORITE)
    {
        pCmdUI->Enable(FALSE);
    }
    else // 某个图书分类
    {
        pCmdUI->Enable(TRUE);
    }
     

}

// 编辑图书信息
void CMainFrame::OnUpdateEditBook(CCmdUI *pCmdUI)
{
    // 判断活动视图
    if(this->GetActiveView()->GetRuntimeClass() != RUNTIME_CLASS(CBookListView))
    {
        pCmdUI->Enable(FALSE);
        return ;
    }
    // 判断, listView是否选中图书

    CKingBookDoc* pDoc = (CKingBookDoc*)this->GetActiveDocument();
    if(pDoc->GetShownBook() == "")
    {
        pCmdUI->Enable(FALSE);
    }
    else
    {
        pCmdUI->Enable(TRUE);
    }    
    
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -