📄 mainfrm.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 + -