📄 mainwnd.cpp
字号:
}
case IDM_ADDTO:
{
if (m_BookList[m_BookListNo].GetCount())
{
int ItemNo = m_ListCtrl.GetSelectedIndex();
// check if this item is "More"
CString Item;
m_ListCtrl.GetItemText(ItemNo,2,Item);
CString MoreStr;
MoreStr.LoadString(MORE_BOOK_TXT);
if ((ItemNo == LISTNUM - 1) && (MoreStr.Compare(Item) == 0))
{
if (m_BookList[m_BookListNo].GetCount() - 1 > (m_BookPageNo + 1) * (LISTNUM -1))
break;
}
POSITION pos;
pos = m_BookList[m_BookListNo].FindIndex(m_BookPageNo * (LISTNUM -1) + ItemNo);
CString Msg,MsgTitle,BookName;
m_ListCtrl.GetItemText(ItemNo,2,BookName);
Msg.Format(MSG_ADDWARNING,BookName);
MsgTitle.LoadString(TITLE_TXT);
if (MessageBox(Msg,MsgTitle, MB_YESNO | MB_ICONQUESTION) == IDYES)
{
if (!IfFavorites(m_BookList[m_BookListNo].GetAt(pos).BookPath))
{
m_BookList[3].AddHead(m_BookList[m_BookListNo].GetAt(pos));
SetRegistry(3);
EnableMenuItem(m_hMenu,IDM_ADDTO,MF_GRAYED);
}
}
}
break;
}
case IDM_DELFROM:
{
if ((m_BookListNo == 3) && (m_BookList[m_BookListNo].GetCount()))
{
int ItemNo = m_ListCtrl.GetSelectedIndex();
POSITION pos = m_BookList[3].FindIndex(m_BookPageNo * (LISTNUM -1) + ItemNo);
CString Msg,MsgTitle,BookName;
m_ListCtrl.GetItemText(ItemNo,2,BookName);
Msg.Format(MSG_DELWARNING,BookName);
MsgTitle.LoadString(TITLE_TXT);
if (MessageBox(Msg,MsgTitle, MB_YESNO | MB_ICONQUESTION) == IDYES)
{
m_BookList[3].RemoveAt(pos);
SetRegistry(3);
if (m_BookList[m_BookListNo].GetCount() == 0)
EnableMenuItem(m_hMenu,IDM_DELFROM,MF_GRAYED);
ShowBookList();
}
}
break;
}
case IDM_VERSION:
{
CVersionDlg dlg;
dlg.DoModal();
break;
}
case IDM_EXIT:
{
m_ImageDC.DeleteDC();
m_MaskDC.DeleteDC();
PostQuitMessage(0);
}
}
return 0;
}
LRESULT CMainWnd::OnKeyDown(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
// TODO : Add Code for message handler. Call DefWindowProc if necessary.
CString BookDirStr;
if (wParam == VK_TLEFT)
{
if (m_BookListNo == 0)
m_BookListNo = CASETOTAL - 1 ;
else
m_BookListNo --;
m_BookPageNo = 0;
}
if (wParam == VK_TRIGHT)
{
if (m_BookListNo == CASETOTAL - 1)
m_BookListNo = 0;
else
m_BookListNo ++;
m_BookPageNo = 0;
}
switch (m_BookListNo)
{
case 0:
{
EnableMenuItem(m_hMenu,IDM_ADDTO,MF_ENABLED);
EnableMenuItem(m_hMenu,IDM_DELFROM,MF_GRAYED);
if (wParam == VK_TRIGHT)
{
m_ListCtrl.m_ImageTypeFlag = TRUE;
}
GetFromRegistry(0);
break;
}
case 1:
{
BookDirStr.LoadString(DOCUMENT_DIR_TXT);
m_BookList[m_BookListNo].RemoveAll();
FindBook(BookDirStr,m_BookListNo);
EnableMenuItem(m_hMenu,IDM_ADDTO,MF_ENABLED);
EnableMenuItem(m_hMenu,IDM_DELFROM,MF_GRAYED);
break;
}
case 2:
{
m_BookList[m_BookListNo].RemoveAll();
if (FindStorage())
{
for (int t = 0 ; t < 2 ; t++)
{
if (!m_Storage[t].IsEmpty())
FindBook(m_Storage[t],m_BookListNo);
}
}
EnableMenuItem(m_hMenu,IDM_ADDTO,MF_ENABLED);
EnableMenuItem(m_hMenu,IDM_DELFROM,MF_GRAYED);
if (wParam == VK_LEFT)
{
m_ListCtrl.m_ImageTypeFlag = TRUE;
}
break;
}
case 3:
{
EnableMenuItem(m_hMenu,IDM_DELFROM,MF_ENABLED);
EnableMenuItem(m_hMenu,IDM_ADDTO,MF_GRAYED);
m_ListCtrl.m_ImageTypeFlag = FALSE;
GetFromRegistry(3);
break;
}
}
int ItemNo = m_ListCtrl.GetSelectedIndex();
if (wParam == VK_TDOWN)
ItemNo ++;
if (wParam == VK_TUP)
ItemNo --;
if ((wParam == VK_TLEFT) || (wParam == VK_TRIGHT))
{
if (m_BookList[m_BookListNo].GetCount() == 0)
{
EnableMenuItem(m_hMenu,IDM_DELFROM,MF_GRAYED);
EnableMenuItem(m_hMenu,IDM_ADDTO,MF_GRAYED);
}
ShowBookList();
}
else
{
// check if this item is "More"
if (ItemNo == LISTNUM - 1)
{
CString Item;
m_ListCtrl.GetItemText(ItemNo,2,Item);
CString MoreStr;
MoreStr.LoadString(MORE_BOOK_TXT);
if ( MoreStr.Compare(Item) == 0)
{
if (m_BookList[m_BookListNo].GetCount() - 1 > (m_BookPageNo + 1) * (LISTNUM -1))
{
EnableMenuItem(m_hMenu,IDM_DELFROM,MF_GRAYED);
EnableMenuItem(m_hMenu,IDM_ADDTO,MF_GRAYED);
}
}
}
}
POSITION FavorPos;
if ((wParam == VK_TLEFT) || (wParam == VK_TRIGHT))
FavorPos = m_BookList[m_BookListNo].FindIndex(0);
else
FavorPos = m_BookList[m_BookListNo].FindIndex(ItemNo + m_BookPageNo * (LISTNUM - 1));
if (IfFavorites(m_BookList[m_BookListNo].GetAt(FavorPos).BookPath))
EnableMenuItem(m_hMenu,IDM_ADDTO,MF_GRAYED);
return 0;
}
void CMainWnd::ShowBookList(BOOL RedrawFlag)
{
m_ListCtrl.DeleteAllItems();
int BookNum = m_BookList[m_BookListNo].GetCount();
if (BookNum == 0 )
{
RedrawWindow();
return;
}
BOOL PageFlag = FALSE;
if (BookNum > LISTNUM * (m_BookPageNo + 1) - m_BookPageNo)
{
BookNum = LISTNUM * (m_BookPageNo + 1) - m_BookPageNo - 1;
PageFlag = TRUE;
}
POSITION pos;
for (int i = LISTNUM * m_BookPageNo - m_BookPageNo ; i < BookNum ; i++)
{
pos = m_BookList[m_BookListNo].FindIndex(i);
CString ItemStr;
ItemStr = GetSpecStr(m_BookList[m_BookListNo].GetAt(pos).BookPath,_T("\\"));
ItemStr = GetSpecStr(ItemStr,_T("."),FALSE);
m_ListCtrl.AddItem(ItemStr,m_BookList[m_BookListNo].GetAt(pos).TypeNo);
}
if (PageFlag)
{
CString MoreBook;
MoreBook.LoadString(MORE_BOOK_TXT);
CString NoStr;
NoStr.Format(_T("%d"), LISTNUM);
m_ListCtrl.InsertItem(LISTNUM,MoreBook);
m_ListCtrl.m_MoreFlag = TRUE;
m_ListCtrl.SetItemText(LISTNUM - 1, 1, NoStr);
m_ListCtrl.SetItemText(LISTNUM - 1, 2, MoreBook);
}
else
m_ListCtrl.m_MoreFlag = FALSE;
m_ListCtrl.SelectItem(0);
if (RedrawFlag)
RedrawWindow();
}
BOOL CMainWnd::GetFromRegistry(int ListNo)
{
HKEY hKey = NULL;
DWORD cbData = 0;
CString SubKeys,BookKeys;
SubKeys = SUBKEY;
if (ListNo == 0)
SubKeys += RECENTBOOKKEY;
else
SubKeys += FAVORITEBOOKKEY;
CFindFile FindTool;
// get length of list
int ListLength = 0;
if(ERROR_SUCCESS == RegOpenKeyEx(ROOTKEY, SUBKEY, 0, 0, &hKey))
{
cbData = sizeof(int);
if (ListNo == 0)
{
if(ERROR_SUCCESS != RegQueryValueEx(hKey,RECENTBOOKKEY, NULL, NULL, (LPBYTE)&ListLength, &cbData))
{
RegCloseKey(hKey);
return FALSE;
}
}
else
{
if(ERROR_SUCCESS != RegQueryValueEx(hKey,FAVORITEBOOKKEY, NULL, NULL, (LPBYTE)&ListLength, &cbData))
{
RegCloseKey(hKey);
return FALSE;
}
}
}
else
{
RegCloseKey(hKey);
return FALSE;
}
RegCloseKey(hKey);
if ((ListLength > 0) && (m_BookList[ListNo].GetCount() > 0))
m_BookList[ListNo].RemoveAll();
BookItem_Struct item;
TCHAR BookPath[255];
for (int i = 0 ;i < ListLength ; i++)
{
BookKeys.Format(_T("%s%d"),SubKeys,i);
if(ERROR_SUCCESS == RegOpenKeyEx(ROOTKEY, BookKeys, 0, 0, &hKey))
{
ZeroMemory(&item,sizeof(item));
memset(BookPath, 0 ,sizeof(BookPath));
cbData = 255 * sizeof(TCHAR);
if(ERROR_SUCCESS != RegQueryValueEx(hKey, _T("BookPath"), NULL, NULL, (LPBYTE)BookPath, &cbData))
{
RegCloseKey(hKey);
return FALSE;
}
wcscpy(item.BookPath,BookPath);
cbData = sizeof(int);
if(ERROR_SUCCESS != RegQueryValueEx(hKey, _T("TypeNo"), NULL, NULL, (LPBYTE)&item.TypeNo, &cbData))
{
RegCloseKey(hKey);
return FALSE;
}
cbData = sizeof(int);
if(ERROR_SUCCESS != RegQueryValueEx(hKey, _T("BookMark"), NULL, NULL, (LPBYTE)&item.BookMark, &cbData))
{
RegCloseKey(hKey);
return FALSE;
}
RegCloseKey(hKey);
if (ListNo == 0)
{
if (FindTool.FindFile(item.BookPath))
m_BookList[ListNo].AddTail(item);
}
else
m_BookList[ListNo].AddTail(item);
}
}
return TRUE;
}
BOOL CMainWnd::SetRegistry(int ListNo)
{
HKEY hKey ;
DWORD dwDisposition ;
CString SubKeys,BookKeys;
SubKeys = SUBKEY;
if (ListNo == 0)
SubKeys += RECENTBOOKKEY;
else
SubKeys += FAVORITEBOOKKEY;
POSITION pos;
DelFromRegistry(ListNo);
if(RegCreateKeyEx(ROOTKEY,SUBKEY,0,NULL,0, 0, NULL,&hKey, &dwDisposition) == ERROR_SUCCESS)
{
int ListLength = m_BookList[ListNo].GetCount();
if (ListNo == 0)
{
if(RegSetValueEx(hKey, RECENTBOOKKEY, NULL, REG_DWORD, (LPBYTE)&ListLength, sizeof(int)) != ERROR_SUCCESS)
{
RegCloseKey(hKey);
return FALSE;
}
}
else
{
if(RegSetValueEx(hKey, FAVORITEBOOKKEY, NULL, REG_DWORD, (LPBYTE)&ListLength, sizeof(int)) != ERROR_SUCCESS)
{
RegCloseKey(hKey);
return FALSE;
}
}
}
else
return FALSE;
RegCloseKey(hKey);
TCHAR BookName[255];
for (int i = 0; i < m_BookList[ListNo].GetCount(); i++)
{
BookKeys.Format(_T("%s%d"),SubKeys,i);
pos = m_BookList[ListNo].FindIndex(i);
memset(BookName , 0 ,sizeof(BookName));
wcscpy(BookName , m_BookList[ListNo].GetAt(pos).BookPath);
if(RegCreateKeyEx(ROOTKEY,BookKeys,0,NULL,0, 0, NULL,&hKey, &dwDisposition) == ERROR_SUCCESS)
{
if(RegSetValueEx(hKey, _T("BookPath"), NULL, REG_SZ, (LPBYTE)BookName, wcslen(BookName) * sizeof(TCHAR)) != ERROR_SUCCESS)
{
RegCloseKey(hKey);
return FALSE;
}
if(RegSetValueEx(hKey, _T("TypeNo"), NULL, REG_DWORD, (LPBYTE)&m_BookList[ListNo].GetAt(pos).TypeNo, sizeof(int)) != ERROR_SUCCESS)
{
RegCloseKey(hKey);
return FALSE;
}
if(RegSetValueEx(hKey, _T("BookMark"), NULL, REG_DWORD, (LPBYTE)&m_BookList[ListNo].GetAt(pos).BookMark, sizeof(int)) != ERROR_SUCCESS)
{
RegCloseKey(hKey);
return FALSE;
}
RegCloseKey(hKey);
}
}
return TRUE;
}
LRESULT CMainWnd::OnCloseBook(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
CReadBookWnd *CloseWnd = (CReadBookWnd*)wParam;
if (lParam)
{
//close normal window of readbook
m_CloseFlag = FALSE;
//get settings
for (int i = 0; i < 7 ; i++)
{
m_Setting[i] = CloseWnd->m_Setting[i];
}
InputSettings();
int ItemNo = m_ListCtrl.GetSelectedIndex();
POSITION pos;
pos = m_BookList[m_BookListNo].FindIndex(m_BookPageNo * (LISTNUM - 1) + ItemNo);
CString BookPath = m_BookList[m_BookListNo].GetAt(pos).BookPath;
//set bookmark
m_BookList[m_BookListNo].GetAt(pos).BookMark = CloseWnd->m_BookMark;
// set Recent Book List
BookItem_Struct item;
ZeroMemory(&item,sizeof(item));
item = m_BookList[m_BookListNo].GetAt(pos);
POSITION FirstPos;
for (int t = 0 ; t < m_BookList[0].GetCount(); t ++)
{
FirstPos = m_BookList[0].FindIndex(t);
CString BookInfo = m_BookList[0].GetAt(FirstPos).BookPath;
if (BookInfo == item.BookPath)
m_BookList[0].RemoveAt(FirstPos);
}
m_BookList[0].AddHead(item);
if (m_BookList[0].GetCount() > 7)
m_BookList[0].RemoveTail();
SetRegistry(0);
GetFromRegistry(0);
//set to favorite
if ((m_BookListNo != 3) && (CloseWnd->m_FavorFlag == TRUE))
{
if (!IfFavorites(m_BookList[m_BookListNo].GetAt(pos).BookPath))
{
m_BookList[3].AddHead(item);
SetRegistry(3);
EnableMenuItem(m_hMenu,IDM_DELFROM,MF_GRAYED);
EnableMenuItem(m_hMenu,IDM_ADDTO,MF_GRAYED);
}
}
//del from favorite
if ((m_BookListNo == 3) && (CloseWnd->m_FavorFlag == FALSE))
{
m_BookList[3].RemoveAt(pos);
SetRegistry(3);
ShowBookList();
}
if (CloseWnd->m_hWnd == m_FullBookWnd.m_hWnd)
m_BookWnd.DestroyWindow();
CString BookDirStr;
if (m_BookListNo == 1)
{
BookDirStr.LoadString(DOCUMENT_DIR_TXT);
m_BookList[m_BookListNo].RemoveAll();
FindBook(BookDirStr,m_BookListNo);
ShowBookList();
}
if (m_BookListNo == 2)
{
m_BookList[m_BookListNo].RemoveAll();
if (FindStorage())
{
for (int t = 0 ; t < 2 ; t++)
{
if (!m_Storage[t].IsEmpty())
FindBook(m_Storage[t],m_BookListNo);
}
}
ShowBookList();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -