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

📄 htmlviewer.cpp

📁 chm文件阅读器.开发工具EVC 支持ARM处理器和 模拟器环境 可直接编译通过 基于PPC的 也可以编译为WINCE下的程序
💻 CPP
字号:
// HtmlViewer.cpp : implementation file
//

#include "stdafx.h"
#include "CHM Reader.h"
#include "HtmlViewer.h"
#include "htmlctrl.h"
#include "CHMFile.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CHtmlViewer dialog


CHtmlViewer::CHtmlViewer(CWnd* pParent /*=NULL*/)
	: CSTHtmlDialog(CHtmlViewer::IDD, pParent)
{
	//{{AFX_DATA_INIT(CHtmlViewer)	
	m_Title = _T("");
	//}}AFX_DATA_INIT

	CVORegistry Reg(HKEY_LOCAL_MACHINE, _T("Software\\CHMReader"),false);
	m_bShrink=(BOOL)Reg.ReadDWORD(_T("Shrink"),true);
	m_bClearType=(BOOL)Reg.ReadDWORD(_T("ClearType"),true);
	m_TextSize=Reg.ReadDWORD(_T("TextSize"),2);
}

void CHtmlViewer::DoDataExchange(CDataExchange* pDX)
{
	CSTHtmlDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CHtmlViewer)	
	DDX_Control(pDX, IDC_TITLE, m_TitleCtrl);
	DDX_Text(pDX, IDC_TITLE, m_Title);
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CHtmlViewer, CSTHtmlDialog)
	//{{AFX_MSG_MAP(CHtmlViewer)	
	ON_COMMAND(ID_PREV_PAGE, OnPrevPage)
	ON_COMMAND(ID_NEXT_PAGE, OnNextPage)
	ON_COMMAND(ID_TOOLS_FITTOWINDOW, OnToolsFittowindow)
	ON_COMMAND(ID_TOOLS_TEXTSIZE_LARGE, OnToolsTextsizeLarge)
	ON_COMMAND(ID_TOOLS_TEXTSIZE_LARGEST, OnToolsTextsizeLargest)
	ON_COMMAND(ID_TOOLS_TEXTSIZE_MEDIUM, OnToolsTextsizeMedium)
	ON_COMMAND(ID_TOOLS_TEXTSIZE_SMALL, OnToolsTextsizeSmall)
	ON_COMMAND(ID_TOOLS_TEXTSIZE_SMALLEST, OnToolsTextsizeSmallest)
	ON_COMMAND(ID_TOOLS_CLEARTYPE, OnToolsCleartype)
	ON_COMMAND(ID_BACK, OnBack)	
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CHtmlViewer message handlers

BOOL CHtmlViewer::OnInitDialog() 
{
	CSTHtmlDialog::OnInitDialog();

#ifdef FULL_SCREEN
	// Call SHInitDialog with flags for full screen.
	SHINITDLGINFO shidi;
	shidi.dwMask = SHIDIM_FLAGS;
	shidi.dwFlags = SHIDIF_FULLSCREENNOMENUBAR;
	shidi.hDlg = m_hWnd;
	SHInitDialog(&shidi);
#endif

	// Init CCeCommandBar ToolBar
	m_wndCommandBar.m_bShowSharedNewButton = false;
	m_wndCommandBar.Create(this);
	m_wndCommandBar.InsertMenuBar(IDR_ViewBar);
	m_wndCommandBar.LoadToolBar(IDR_MAINFRAME);
	m_wndCommandBar.SetBarStyle(m_wndCommandBar.GetBarStyle() | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_FIXED);

#ifdef FULL_SCREEN
    // SHFullScreen fails if dialog box is not foreground.
	SetForegroundWindow();  
	SHFullScreen(m_hWnd, SHFS_HIDETASKBAR | SHFS_HIDESIPBUTTON);

    // Resize the window over the taskbar area.
	#define MENU_HEIGHT 26
	RECT rect;
	GetWindowRect(&rect);
	rect.top -= MENU_HEIGHT;
	MoveWindow(&rect, TRUE);
#endif

	// Set Html Options
	SetHtml(m_HTMLText);
	::SendMessage(m_hwndHtml,DTM_ENABLESHRINK,0,m_bShrink);
	::SendMessage(m_hwndHtml,DTM_ENABLECLEARTYPE,0,(LPARAM)m_bClearType);
	::SendMessage(m_hwndHtml,DTM_ZOOMLEVEL,0,(LPARAM)m_TextSize);	

	// Set Menu Options Check Marks
	SetCheck(ID_TOOLS_FITTOWINDOW,m_bShrink);
	SetCheck(ID_TOOLS_CLEARTYPE,m_bClearType);
	SetTextCheck();				

	UpdateData(false);

	// All Done
	return true;
}

BOOL CHtmlViewer::SetHtmlText(CString Text) 
{	
	m_HTMLText=Text;
	return TRUE;  
}

void CHtmlViewer::OnPrevPage() 
{	
	EndDialog(101);
}

void CHtmlViewer::OnNextPage() 
{
	EndDialog(100);	
}

void CHtmlViewer::OnLink(CString strHref)
{		
	m_NewCHMFile=m_pCHMFile->m_FileName;
	m_strHref=strHref;	
	if (strHref.Left(7).CompareNoCase(_T("MS-ITS:"))==0)
	{
		int idx=strHref.Find(_T("::"),7);
		m_NewCHMFile=strHref.Mid(7,idx-7);
		m_strHref=strHref.Mid(idx+2);
	}
	if (strHref.Left(1).Compare(_T("#"))==0)
	{
		::SendMessage(m_hwndHtml,DTM_ANCHORW,0,(LPARAM)(LPWSTR)(LPCTSTR)strHref.Mid(1));
		return;
	}
	else
	{
		if (m_pCHMFile)
		{
			CCHMFileInfo *pInfo=m_pCHMFile->CheckFileExists(strHref);
			if (pInfo!=NULL)
				EndDialog(102);
		}
	}
	return;
}

void CHtmlViewer::OnToolsFittowindow() 
{
	m_bShrink=!m_bShrink;	
	::SendMessage(m_hwndHtml,DTM_ENABLESHRINK,0,m_bShrink);
	SaveSettings();
	SetCheck(ID_TOOLS_FITTOWINDOW,m_bShrink);
}

void CHtmlViewer::OnToolsTextsizeLargest()
{
	m_TextSize=4;
	::SendMessage(m_hwndHtml,DTM_ZOOMLEVEL,0,(LPARAM)4);	
	SaveSettings();	
	SetTextCheck();
}

void CHtmlViewer::OnToolsTextsizeLarge() 
{
	m_TextSize=3;
	::SendMessage(m_hwndHtml,DTM_ZOOMLEVEL,0,(LPARAM)3);
	SaveSettings();
	SetTextCheck();
}

void CHtmlViewer::OnToolsTextsizeMedium() 
{
	m_TextSize=2;
	::SendMessage(m_hwndHtml,DTM_ZOOMLEVEL,0,(LPARAM)2);	
	SaveSettings();
	SetTextCheck();
}

void CHtmlViewer::OnToolsTextsizeSmall() 
{
	m_TextSize=1;
	::SendMessage(m_hwndHtml,DTM_ZOOMLEVEL,0,(LPARAM)1);
	SaveSettings();
	SetTextCheck();
}

void CHtmlViewer::OnToolsTextsizeSmallest() 
{	
	m_TextSize=0;
	::SendMessage(m_hwndHtml,DTM_ZOOMLEVEL,0,(LPARAM)0);
	SaveSettings();
	SetTextCheck();
}

void CHtmlViewer::OnToolsCleartype() 
{
	m_bClearType=!m_bClearType;
	::SendMessage(m_hwndHtml,DTM_ENABLECLEARTYPE,0,(LPARAM)m_bClearType);
	SaveSettings();
	SetCheck(ID_TOOLS_CLEARTYPE,m_bClearType);
}

void CHtmlViewer::OnBack() 
{
	// ::SendMessage(m_hwndHtml,DTM_ANCHORW,0,(LPARAM)(LPWSTR)(LPCTSTR)strHref.Mid(1));
}

void CHtmlViewer::SetCheck(int nID, BOOL bEnable)
{
	// Get Menu Pointer		
	CToolBarCtrl& tb = m_wndCommandBar.GetToolBarCtrl();
	TBBUTTON    tbtn; 
	tb.GetButton(0, &tbtn);
	HMENU hMenu=(HMENU)tbtn.dwData;
	::CheckMenuItem(hMenu,nID,MF_BYCOMMAND|(bEnable?MF_CHECKED:MF_UNCHECKED));
}

void CHtmlViewer::SaveSettings()
{
	CVORegistry Reg(HKEY_LOCAL_MACHINE, _T("Software\\CHMReader"),true);
	Reg.WriteDWORD(_T("Shrink"),(DWORD)m_bShrink);
	Reg.WriteDWORD(_T("ClearType"),(DWORD)m_bClearType);
	Reg.WriteDWORD(_T("TextSize"),(DWORD)m_TextSize);
}

void CHtmlViewer::SetTextCheck()
{	
	SetCheck(ID_TOOLS_TEXTSIZE_LARGEST, (m_TextSize==4?true:false));	
	SetCheck(ID_TOOLS_TEXTSIZE_LARGE, (m_TextSize==3?true:false));	
	SetCheck(ID_TOOLS_TEXTSIZE_MEDIUM, (m_TextSize==2?true:false));	
	SetCheck(ID_TOOLS_TEXTSIZE_SMALL, (m_TextSize==1?true:false));	
	SetCheck(ID_TOOLS_TEXTSIZE_SMALLEST, (m_TextSize==0?true:false));
}

⌨️ 快捷键说明

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