// HexView.cpp : implementation of the CHexView class // #include "stdafx.h" #include "ex21b.h" #include "PoemDoc.h" #include "HexView.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CHexView IMPLEMENT_DYNCREATE(CHexView, CScrollView) BEGIN_MESSAGE_MAP(CHexView, CScrollView) //{{AFX_MSG_MAP(CHexView) // NOTE - the ClassWizard will add and remove mapping macros here. // DO NOT EDIT what you see in these blocks of generated code! //}}AFX_MSG_MAP // Standard printing commands ON_COMMAND(ID_FILE_PRINT, CScrollView::OnFilePrint) ON_COMMAND(ID_FILE_PRINT_DIRECT, CScrollView::OnFilePrint) ON_COMMAND(ID_FILE_PRINT_PREVIEW, CScrollView::OnFilePrintPreview) ON_MESSAGE(WM_COMMANDHELP, OnCommandHelp) ON_MESSAGE(WM_HELPHITTEST, OnHelpHitTest) END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CHexView construction/destruction CHexView::CHexView() : m_rectPrint(0, 0, 11520, -15120) { // TODO: add construction code here } CHexView::~CHexView() { } BOOL CHexView::PreCreateWindow(CREATESTRUCT& cs) { // TODO: Modify the Window class or styles here by modifying // the CREATESTRUCT cs return CScrollView::PreCreateWindow(cs); } ///////////////////////////////////////////////////////////////////////////// // CHexView drawing void CHexView::OnDraw(CDC* pDC) { // hex dump of document strings int i, j, k, l, n, nHeight; CString outputLine, str; CFont font; TEXTMETRIC tm; CPoemDoc* pDoc = GetDocument(); font.CreateFont(-160, 80, 0, 0, 400, FALSE, FALSE, 0, ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_SWISS, "Arial"); CFont* pOldFont = (CFont*) pDC->SelectObject(&font); pDC->GetTextMetrics(&tm); nHeight = tm.tmHeight + tm.tmExternalLeading; TRACE("font height = %d, internal leading = %d\n", nHeight, tm.tmInternalLeading); j = pDoc->m_stringArray.GetSize(); for (i = 0; i < j; i++) { outputLine.Format("%02x ", i); l = pDoc->m_stringArray[i].GetLength(); for (k = 0; k < l; k++) { n = pDoc->m_stringArray[i][k] & 0x00ff; str.Format("%02x ", n); outputLine += str; } pDC->TextOut(720, -i * nHeight - 720, outputLine); } pDC->SelectObject(pOldFont); TRACE("LOGPIXELSX = %d, LOGPIXELSY = %d\n", pDC->GetDeviceCaps(LOGPIXELSX), pDC->GetDeviceCaps(LOGPIXELSY)); TRACE("HORZSIZE = %d, VERTSIZE = %d\n", pDC->GetDeviceCaps(HORZSIZE), pDC->GetDeviceCaps(VERTSIZE)); } void CHexView::OnInitialUpdate() { CScrollView::OnInitialUpdate(); CSize sizeTotal(m_rectPrint.Width(), -m_rectPrint.Height()); CSize sizePage(sizeTotal.cx / 2, sizeTotal.cy / 2); // page scroll CSize sizeLine(sizeTotal.cx / 100, sizeTotal.cy / 100); // line scroll SetScrollSizes(MM_TWIPS, sizeTotal, sizePage, sizeLine); } ///////////////////////////////////////////////////////////////////////////// // CHexView printing BOOL CHexView::OnPreparePrinting(CPrintInfo* pInfo) { pInfo->SetMaxPage(1); return DoPreparePrinting(pInfo); } void CHexView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/) { // TODO: add extra initialization before printing } void CHexView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/) { // TODO: add cleanup after printing } ///////////////////////////////////////////////////////////////////////////// // CHexView diagnostics #ifdef _DEBUG void CHexView::AssertValid() const { CScrollView::AssertValid(); } void CHexView::Dump(CDumpContext& dc) const { CScrollView::Dump(dc); } CPoemDoc* CHexView::GetDocument() // non-debug version is inline { ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CPoemDoc))); return (CPoemDoc*)m_pDocument; } #endif //_DEBUG ///////////////////////////////////////////////////////////////////////////// // CHexView message handlers void CHexView::OnPrint(CDC* pDC, CPrintInfo* pInfo) { // m_rectPrint = pInfo->m_rectDraw; // SetLogScrollSizes(CSize(m_rectPrint.Width(), -m_rectPrint.Height())); CScrollView::OnPrint(pDC, pInfo); } LRESULT CHexView::OnCommandHelp(WPARAM wParam, LPARAM lParam) { if (lParam == 0) { // context not already determined lParam = HID_BASE_RESOURCE + IDR_HEXVIEW; } AfxGetApp()->WinHelp(lParam); return TRUE; } LRESULT CHexView::OnHelpHitTest(WPARAM wParam, LPARAM lParam) { return HID_BASE_RESOURCE + IDR_HEXVIEW; }