102 lines
2.5 KiB
C++
102 lines
2.5 KiB
C++
/*
|
|
* This is a part of the BugTrap package.
|
|
* Copyright (c) 2005-2009 IntelleSoft.
|
|
* All rights reserved.
|
|
*
|
|
* Description: Hex view control class.
|
|
* Author: Maksim Pyatkovskiy.
|
|
*
|
|
* This source code is only intended as a supplement to the
|
|
* BugTrap package reference and related electronic documentation
|
|
* provided with the product. See these sources for detailed
|
|
* information regarding the BugTrap package.
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
/// Hex view control class.
|
|
class CHexView
|
|
{
|
|
public:
|
|
/// Initialize the object.
|
|
CHexView(void);
|
|
/// De-initialize the object.
|
|
~CHexView(void);
|
|
/// Attach hex view object to window handle.
|
|
void Attach(HWND hwnd);
|
|
/// Detach hex view object to window handle.
|
|
void Detach(void);
|
|
/// Set file information.
|
|
void SetFile(HANDLE hFile);
|
|
/// Reset file information.
|
|
void ResetFile(void);
|
|
/// Get file handle.
|
|
HANDLE GetFileHandle(void) const;
|
|
|
|
enum
|
|
{
|
|
/// Number of symbols in one line.
|
|
LINE_WIDTH = 16,
|
|
/// Number of cached lines.
|
|
NUMBER_OF_CACHED_LINES = 2000,
|
|
/// Size of cache.
|
|
CACHE_SIZE = LINE_WIDTH * NUMBER_OF_CACHED_LINES
|
|
};
|
|
|
|
private:
|
|
/// Protect the class from being accidentally copied.
|
|
CHexView(const CHexView& rHexView);
|
|
/// Protect the class from being accidentally copied.
|
|
CHexView& operator=(const CHexView& rHexView);
|
|
/// Window procedure of hex view window.
|
|
static LRESULT CALLBACK HexViewWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
|
|
/// Draw window client area.
|
|
void DrawHexView(HDC hdc, const RECT* prcPaint);
|
|
/// Resize hex view client area.
|
|
void ResizeHexView(BOOL bIgnoreScrollPos);
|
|
/// Scroll hex view client area.
|
|
void ScrollHexView(int nScrollBarType, int nScrollCode);
|
|
/// Initialize variables.
|
|
void InitVars(void);
|
|
/// Load cache from file.
|
|
void LoadCache(void);
|
|
/// Load line to the cache.
|
|
void CacheLine(DWORD dwÑachedLineNum);
|
|
/// Get current font metrics.
|
|
void GetTextMetrics(PTEXTMETRIC pTextMetric);
|
|
|
|
/// File cache.
|
|
PBYTE m_pbCache;
|
|
/// File size.
|
|
DWORD m_dwFileSize;
|
|
/// File handle.
|
|
HANDLE m_hFile;
|
|
/// Window handle.
|
|
HWND m_hwnd;
|
|
/// Old static window procedure.
|
|
WNDPROC m_pfnOldHexViewWndProc;
|
|
/// Number of first cache lined.
|
|
DWORD m_dwFirstCachedLine;
|
|
/// Old window style.
|
|
LONG m_lOldStyle;
|
|
/// Number of wheel lines.
|
|
int m_nWheelLines;
|
|
};
|
|
|
|
inline CHexView::CHexView(void) : m_pbCache(NULL)
|
|
{
|
|
InitVars();
|
|
}
|
|
|
|
inline CHexView::~CHexView(void)
|
|
{
|
|
ResetFile();
|
|
}
|
|
|
|
/**
|
|
* @return file handle.
|
|
*/
|
|
inline HANDLE CHexView::GetFileHandle(void) const
|
|
{
|
|
return m_hFile;
|
|
}
|