// 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();
SetHtml(m_HTMLText);
// 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);
// Set Html Options
::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));
}