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

📄 mainwnd.cpp

📁 Smartphone手机阅读软件
💻 CPP
📖 第 1 页 / 共 3 页
字号:
// MainWnd.cpp: implementation of the CMainWnd class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "MainWnd.h"
#include "OptionDlg.h"
#include "VersionDlg.h"
#include <projects.h>
#include <Winreg.h>
#pragma comment(lib,"note_prj.lib")

#define BOOKTYPE              _T(".txt.prc.pdb.html")
#define BOOKTYPENUM           2
#define LISTNUM               7
#define CASETOTAL             4
#define ROOTKEY               HKEY_CURRENT_USER
#define SUBKEY                TEXT("Software\\Mitac\\PhoneReader")
#define RECENTBOOKKEY         TEXT("\\RecentBook")
#define FAVORITEBOOKKEY       TEXT("\\FavoriteBook")
#define LASTPOSKEY            TEXT("\\BookLastPos")
#define SETTINGKEY            TEXT("\\Settings")

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CMainWnd::CMainWnd()
{
	m_FirstFlag = TRUE;
	m_CloseFlag = TRUE;
	m_FocusFlag = FALSE;
	m_BookListNo = 0;
	m_BookPageNo = 0;
	for (int i = 0; i < 7 ; i++)
	{
		switch(i)
		{
		case 0:
		case 2:
		case 3:
			{
				m_Setting[i] = 0;
				break;
			}
		case 1:
		case 5:
		case 6:
			{
				m_Setting[i]  = 1;
				break;
			}
		case 4:
				m_Setting[i]  = 3;	
		}
	}
}

CMainWnd::~CMainWnd()
{
}

LRESULT CMainWnd::OnCreate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
	// Create the Menu Bar.
	LoadSHMenuBar(MAKEINTRESOURCE(IDR_MAINMENU));
	SendMessage(m_hWndCB, SHCMBM_OVERRIDEKEY, VK_TBACK, 
	MAKELPARAM(SHMBOF_NODEFAULT | SHMBOF_NOTIFY, SHMBOF_NODEFAULT | SHMBOF_NOTIFY));

	if (m_BookListNo != 3)
	{
		EnableMenuItem(m_hMenu,IDM_DELFROM,MF_GRAYED);
	}

	HICON hIcon = LoadIcon(_Module.GetResourceInstance(),MAKEINTRESOURCE(IDI_PHONEREADER));
	SetIcon(hIcon,TRUE);
	SetIcon(hIcon,FALSE);

	//get the width and height of BOOKCASE_TITLE
	CBitmap tempmap;
	tempmap.LoadBitmap(IDB_BKMAP);
	BITMAP bmpInfo;
	tempmap.GetBitmap(&bmpInfo);	
	m_BookCaseWidth = bmpInfo.bmWidth;
	m_BookCaseHeight = bmpInfo.bmHeight;
	tempmap.DeleteObject();

	//create the BookList
	RECT rc;
	GetClientRect(&rc);
	rc.top += m_BookCaseHeight;
	m_ListCtrl.Create(m_hWnd, rc);

	for (int i = 0; i < 4; i++)
	{
		if (m_BookList[i].GetCount() > 0)
			m_BookList[i].RemoveAll();
	}

	m_ListCtrl.SetBkImage(IDB_LISTBKMAP);
	m_ListCtrl.SetFontColor(RGB(41, 44 ,198),RGB(0,0,0));

	GetFromRegistry(0);
	ShowBookList();

	GetFromRegistry(3);	

	UINT CaseID = RECENT_CASE_TXT;
	for (int j = 0 ; j < CASETOTAL; j++)
	{
		m_CaseRect[j].SetRect(0,0,m_BookCaseWidth,m_BookCaseHeight);
		m_CaseName[j].Empty();
		m_CaseName[j].LoadString(CaseID + j);
		m_CaseRect[j].left = m_BookCaseWidth * j / CASETOTAL+1;
		m_CaseRect[j].top = m_BookCaseHeight * 2 / 3;
		m_CaseRect[j].right = m_CaseRect[j].left + m_BookCaseWidth / CASETOTAL;	
	}

	m_hMenu = (HMENU)SendMessage(m_hWndCB, SHCMBM_GETSUBMENU, 0, IDM_MENU);
	EnableMenuItem(m_hMenu,IDM_ADDTO,MF_ENABLED);
	EnableMenuItem(m_hMenu,IDM_DELFROM,MF_GRAYED);
	if (m_BookList[m_BookListNo].GetCount() == 0)
	{
		EnableMenuItem(m_hMenu,IDM_DELFROM,MF_GRAYED);
		EnableMenuItem(m_hMenu,IDM_ADDTO,MF_GRAYED);
	}
	else
	{
		POSITION FavorPos;
		FavorPos = m_BookList[m_BookListNo].FindIndex(0);
		if (IfFavorites(m_BookList[m_BookListNo].GetAt(FavorPos).BookPath))
		{
			EnableMenuItem(m_hMenu,IDM_ADDTO,MF_GRAYED);
			EnableMenuItem(m_hMenu,IDM_DELFROM,MF_GRAYED);
		}
	}
	GetSettings();
	return 0;
}

LRESULT CMainWnd::OnPaint(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
	CPaintDC dc(m_hWnd);

	//Set BackGround of BookCase
	if (m_FirstFlag)
	{
		//draw the transparent bitmap	
		CBitmap Image, maskBitmap;		
		Image.LoadBitmap(IDB_BKMAP); 
		m_ImageDC.CreateCompatibleDC(dc); 
		m_ImageDC.SelectBitmap(Image.m_hBitmap); 
		
		m_MaskDC.CreateCompatibleDC(dc); 
		maskBitmap.CreateBitmap( m_BookCaseWidth, m_BookCaseHeight, 1, 1, NULL ); 
		m_MaskDC.SelectBitmap( maskBitmap.m_hBitmap ); 
		
		m_ImageDC.SetBkColor(RGB(0,128,128)); 
		m_MaskDC.BitBlt( 0, 0, m_BookCaseWidth, m_BookCaseHeight, m_ImageDC.m_hDC, 0, 0, SRCCOPY ); 	
		m_FirstFlag = FALSE;
	}

	CRect rect;
	GetClientRect(&rect);

	//set color of background
	HPEN hOldPen = dc.SelectStockPen(NULL_PEN);
	dc.FillSolidRect(&rect,RGB(188,214,252));

	//set the color of selected item
	rect.left += m_BookCaseWidth * m_BookListNo / CASETOTAL;
	rect.right = rect.left + m_BookCaseWidth / CASETOTAL;
	rect.bottom = rect.top + m_BookCaseHeight;
	rect.DeflateRect(3,3,3,2);

	//draw selected item
	dc.FillSolidRect(&rect,RGB(41, 44,198));

	//write text
	LOGFONT lf;
	ZeroMemory(&lf,sizeof(lf));
	lstrcpy(lf.lfFaceName, _T("Arial"));
	lf.lfWeight = 500;
	lf.lfHeight = 12;
	CFont NewFont;
	NewFont.CreateFontIndirect(&lf);
	HFONT hOldFont = dc.SelectFont(NewFont.m_hFont);


	COLORREF OldBkColor = dc.SetBkColor(RGB(188,214,252));
	COLORREF OldTextColor = dc.SetTextColor(RGB(0,0,0));

	for (int j = 0 ; j < CASETOTAL; j++)
	{		
		if (j == m_BookListNo)
		{
			dc.SetTextColor(RGB(255,255,255));
			dc.SetBkColor(RGB(41, 44 ,198));
		}
		dc.DrawText(m_CaseName[j],m_CaseName[j].GetLength(),m_CaseRect[j],DT_CENTER);
		if (j == m_BookListNo)
		{
			dc.SetTextColor(RGB(0,0,0));
			dc.SetBkColor(RGB(188,214,252));
		}
	}

	dc.BitBlt(0, 0 ,m_BookCaseWidth , m_BookCaseHeight, m_ImageDC.m_hDC, 0, 0,SRCINVERT); 
	dc.BitBlt(0, 0, m_BookCaseWidth , m_BookCaseHeight, m_MaskDC.m_hDC, 0, 0, SRCAND); 
	dc.BitBlt(0, 0, m_BookCaseWidth , m_BookCaseHeight, m_ImageDC.m_hDC, 0, 0,SRCINVERT); 
	
	dc.SelectPen(hOldPen);
	dc.SetBkColor(OldBkColor);
	dc.SetTextColor(OldTextColor);
	dc.SelectFont(hOldFont);

	return 0;
}

LRESULT CMainWnd::OnAction(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
{
	SendMessage(SPL_EXECUTE,0);
	return 0;
}

LRESULT CMainWnd::OnHotKey(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
	if (m_CloseFlag)
	{
		if(HIWORD(lParam) == VK_TBACK)
		{
			if (m_BookPageNo == 0)
			{
				m_ImageDC.DeleteDC();
				m_MaskDC.DeleteDC();
				PostQuitMessage(0);
			}
			else
			{
				m_BookPageNo --;
				ShowBookList();
				m_CloseFlag = FALSE;
				switch (m_BookListNo)
				{	
				case 0:
				case 1:
				case 2:
					{
						EnableMenuItem(m_hMenu,IDM_ADDTO,MF_ENABLED);
						EnableMenuItem(m_hMenu,IDM_DELFROM,MF_GRAYED);
						break;
					}
				case 3:
					{
						EnableMenuItem(m_hMenu,IDM_ADDTO,MF_GRAYED);
						EnableMenuItem(m_hMenu,IDM_DELFROM,MF_ENABLED);
						break;
					}
				}
				
			}
		}
	}
	else
		m_CloseFlag = TRUE;
	return 0;
}

LRESULT CMainWnd::OnExecute(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
	if (m_BookList[m_BookListNo].GetCount() == 0)
		return 0;

	RECT rc;
	CString Item,FilePath;
	::SystemParametersInfo(SPI_GETWORKAREA, 0, &rc, 0);
	int ItemNo = m_ListCtrl.GetSelectedIndex();
	m_ListCtrl.GetItemText(ItemNo,2,Item);

	POSITION pos;
	if ((ItemNo == LISTNUM -1) && (m_BookList[m_BookListNo].GetCount() - 1 > (m_BookPageNo + 1) * (LISTNUM -1)))
	{
		CString MoreStr;
		MoreStr.LoadString(MORE_BOOK_TXT);
		if (MoreStr.Compare(Item) == 0)
		{
			m_BookPageNo ++;
			ShowBookList();
			switch (m_BookListNo)
			{	
			case 0:
			case 1:
			case 2:
				{
					EnableMenuItem(m_hMenu,IDM_ADDTO,MF_ENABLED);
					EnableMenuItem(m_hMenu,IDM_DELFROM,MF_GRAYED);
					break;
				}			
			case 3:
				{
					EnableMenuItem(m_hMenu,IDM_DELFROM,MF_ENABLED);
					EnableMenuItem(m_hMenu,IDM_ADDTO,MF_GRAYED);
					break;
				}
			}
			pos = m_BookList[m_BookListNo].FindIndex(m_BookPageNo * (LISTNUM - 1));
			if (IfFavorites(m_BookList[m_BookListNo].GetAt(pos).BookPath))
				EnableMenuItem(m_hMenu,IDM_ADDTO,MF_GRAYED);
			
			return 0;
		}
	}
	ItemNo = (LISTNUM  - 1) * m_BookPageNo  + ItemNo;
	
	
	pos = m_BookList[m_BookListNo].FindIndex(ItemNo);
	
	CFindFile FindTool;
	if (!FindTool.FindFile(m_BookList[m_BookListNo].GetAt(pos).BookPath))
	{
		CString Msg,MsgTitle;
		MsgTitle.LoadString(TITLE_TXT);
		if (m_BookListNo == 3)
		{
			Msg.LoadString(MSG_NOLINK_WARNING);
			if (MessageBox(Msg,MsgTitle,MB_YESNO | MB_ICONQUESTION) == IDYES)
			{
				m_BookList[m_BookListNo].RemoveAt(pos);
				if ((m_BookListNo == 0) || (m_BookListNo == 3))
				{
					SetRegistry(m_BookListNo);
				}
				ShowBookList();
			}
		}
		else
		{
			Msg.LoadString(MSG_FINDERR);
			MessageBox(Msg,MsgTitle,MB_OK | MB_ICONINFORMATION);
		}
		
		return 0;
	}
	FindTool.Close();	

	if (!m_BookWnd.IsWindow())
	{
		//create window
		m_BookWnd.Create(NULL,rc,L" ",WS_VISIBLE);	
	}
	else
	{
		m_BookWnd.SetWindowText(L" ");
		m_BookWnd.ShowWindow(SW_SHOW);
	}

	if (m_BookListNo == 3)
		m_BookWnd.EnableDelFavorite(MF_GRAYED,MF_ENABLED);
	else
	{
		if (IfFavorites(m_BookList[m_BookListNo].GetAt(pos).BookPath))
			m_BookWnd.EnableDelFavorite(MF_GRAYED,MF_GRAYED);
		else
			m_BookWnd.EnableDelFavorite(MF_ENABLED,MF_GRAYED);
	}

	//show book
	for (int i = 0; i < 7 ; i++)
	{
		m_BookWnd.m_Setting[i] = m_Setting[i];
	}
	
	FilePath =  m_BookList[m_BookListNo].GetAt(pos).BookPath;
	if(m_BookList[m_BookListNo].GetAt(pos).TypeNo == 0)
		m_BookWnd.m_bFormat  = CExBuffer::FORMAT_TEXT;
	if(m_BookList[m_BookListNo].GetAt(pos).TypeNo == 1)
		m_BookWnd.m_bFormat  = CExBuffer::FORMAT_PRC;
	if(m_BookList[m_BookListNo].GetAt(pos).TypeNo == 2)
		m_BookWnd.m_bFormat  = CExBuffer::FORMAT_HTML;

	m_BookWnd.m_BookPath = FilePath;
	int KeyNo = 0;
	int Pos = GetLastPos(FilePath,KeyNo);
	if (Pos != -1)
		m_BookWnd.m_LastPagePos = Pos;
	else
		m_BookWnd.m_LastPagePos = 0;
	
	m_BookWnd.m_BookMark = m_BookList[m_BookListNo].GetAt(pos).BookMark;
	FilePath = GetSpecStr(FilePath,_T("\\"));
	m_BookWnd.m_BookName = GetSpecStr(FilePath,_T("."),FALSE);
	m_BookWnd.m_MainWnd = m_hWnd;
	m_BookWnd.m_RecentPage = 0;
	if (m_BookListNo != 3)
		m_BookWnd.m_FavorFlag = FALSE;
	else
		m_BookWnd.m_FavorFlag = TRUE;
	m_BookWnd.ShowBook();
	return 0;
}

/////////////////////////////////////////////////////////////////////////////////
// FUNCTION NAME:FindBook
// PARAMETER: 
//			BookListDir ----- Directory of BookList
//	        BookListNo  ------ No of BookList(0 -- 4)
// REMARK:  Find Special Books with No
// RETURN:
//          Find or Not  
// AUTHOR: 
// VERSION: 1.0    DATE: 26/09/2002
// MODIFY:         DATE:               REASON:
//////////////////////////////////////////////////////////////////////////////////
BOOL CMainWnd::FindBook(CString BookListDir,int BookListNo)
{
	//prepare for look for books	
	if (BookListDir.Right(1).Compare(_T("\\")) != 0)
		BookListDir += _T("\\");
	BookListDir += _T("*.*");
	CFindFile FindTool;
	BOOL FindFlag = FindTool.FindFile(BookListDir);
	if (!FindFlag)		
		return FALSE;

	//begin to look for books
	CString TypeStr;
	TypeStr = BOOKTYPE;
	CString FileName;
	CString TempStr1;
	int TypePos = -1;
	BookItem_Struct BookItem;	
	BOOL TypeFindFlag = FALSE;
	do
	{
		if (FindTool.IsDirectory())
			FindBook(FindTool.GetFilePath(),BookListNo);
		else
		{
			FileName = FindTool.GetFileName();
			TempStr1 = GetSpecStr(FileName,_T("."));
			if (TempStr1.IsEmpty())
				continue;
			TempStr1.MakeLower();
			// put file path into booklist by their type
			TypePos = TypeStr.Find(TempStr1);
			if (TypePos != -1)
			{
				ZeroMemory(&BookItem,sizeof(BookItem));
				wcscpy(BookItem.BookPath,FindTool.GetFilePath());
				BookItem.TypeNo = (TypePos -1) /4;	
				if (BookItem.TypeNo > 1)
					BookItem.TypeNo -- ;
				m_BookList[BookListNo].AddTail(BookItem);			
			}
		}
	}	while (FindTool.FindNextFile());

	return TRUE;
}

LRESULT CMainWnd::OnMenu(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
{
	switch (wID)
	{
	case IDM_SETTING:
		{
			COptionDlg OptionDlg;
			for (int i = 0 ;i < 7 ; i++)
				OptionDlg.m_Setting[i] = m_Setting[i];
			
			if (OptionDlg.DoModal() == IDOK)
			{
				for (i = 0 ; i < 7 ; i++)
					m_Setting[i] = OptionDlg.m_Setting[i];
			}	
			InputSettings();
			break;

⌨️ 快捷键说明

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