33 using namespace Drawing;
40 :
TextState(fc), item_num(0), datCurrent()
50 SetVisibleOf(hsbHorizontal,
false);
51 SetVisibleOf(vsbVertical,
true);
52 vsbVertical.SetSmallDelta(1);
58 using namespace KeyCodes;
60 const auto& k(e.GetKeys());
75 vsbVertical.LocateThumb(k[Up] || k[Down] ? vsbVertical.GetSmallDelta()
76 : vsbVertical.GetLargeDelta(), t);
86 HexViewArea::Load(
const char* path)
89 model = make_unique<File>(path);
94 if(n_total_ln > GetItemNum())
96 vsbVertical.SetMaxValue(n_total_ln - GetItemNum());
97 vsbVertical.SetLargeDelta(GetItemNum());
100 SetVisibleOf(vsbVertical,
false);
113 using namespace Text;
125 const SDst lh(GetItemHeight()), h(GetHeight()),
126 w_all(GetWidth() - vsbVertical.GetWidth()
128 w_blank(w_all / (10 + ItemPerLine * 3)),
129 w_ch((w_all - w_blank * (1 + ItemPerLine)) / (8 + ItemPerLine * 2)),
130 w_addr(w_ch * 8 + w_blank),
131 w_item(w_ch * 2 + w_blank);
132 const int fsize(model.GetSize());
135 auto pos(model.GetPosition());
138 while(y < h && pos < fsize && i_data <
datCurrent.end())
145 char straddr[(32 >> 2) + 1];
147 std::sprintf(straddr,
"%08X", pos);
152 const auto n(min<IndexType>(fsize - pos, ItemPerLine));
157 PutLine(tr, &*i_data, &*i_data + 2);
166 vsbVertical.SetValue(0);
168 UpdateItemNum(GetHeight());
175 if(model.IsValid() && pos < model.GetSize())
177 const DataType::size_type n(
ItemPerLine * GetItemNum() * 2);
179 model.SetPosition(pos, SEEK_SET);
185 while(!model.CheckEOF() && b != e)
187 byte c(std::fgetc(model.GetPtr()));
190 yunseq(h = (c >> 4 & 0x0F) +
'0', l = (c & 0x0F) +
'0');
191 *b++ = h >
'9' ? h +
'A' -
'9' - 1 : h;
192 *b++ = l >
'9' ? l +
'A' -
'9' - 1 :
l;
196 model.SetPosition(pos, SEEK_SET);
203 ViewChanged(
ViewArgs(*
this, is_active));
void Refresh(PaintEventArgs &&) override
刷新:按指定参数绘制界面并更新状态。
static yconstexpr size_t ItemPerLine
每行数据总数(字节)。
YF_API void OnKeyHeld(KeyEventArgs &&)
处理键接触保持事件。
YF_API void Invalidate(IWidget &, const Rect &)
无效化:使相对于部件的指定区域在直接和间接的窗口缓冲区中无效。
void UpdateView(TextList &tl, bool is_active)
std::uint16_t SDst
屏幕坐标距离。
std::uintptr_t IndexType
索引类型。
Padding Margin
边距:文本区域到显示区域的距离。
#define yunseq
无序列依赖表达式组求值。
void LocateViewPosition(SDst)
定位视图顶端至指定竖直位置。
void LocateViewPosition(size_t)
定位视图顶端至指定竖直位置(行数)。
unsigned long Reset(COMPtr< _iCOM > &ptr) ynothrow
_tIter PutLine(_tRenderer &r, _tIter s)
打印迭代器指定的起始字符的字符串,直至行尾或字符迭代终止。
#define yconstexpr
指定编译时常量表达式。
void UpdateView(bool={})
更新视图。
DataType datCurrent
当前显示的数据。
virtual void Refresh(PaintEventArgs &&)
刷新:按指定参数绘制界面并更新状态。
PDefHOp(TextState &,=, const PenStyle &ps) ImplRet(PenStyle void ResetPen()
赋值:笔样式。
GValueEventArgs< bool > ViewArgs
视图参数类型。
HexView(FontCache &=FetchDefaultFontCache())