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

📄 mainwnd.cpp

📁 Smartphone手机阅读软件
💻 CPP
📖 第 1 页 / 共 3 页
字号:
		}
	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 + -