📄 mainwnd.cpp
字号:
// 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 + -