public override bool PreProcessWmChar(ref Message m)
{
if (Control.ModifierKeys == Keys.Control)
{
return _hexBox.BasePreProcessMessage(ref m);
}
bool sw = _hexBox._byteProvider.SupportsWriteByte();
bool si = _hexBox._byteProvider.SupportsInsertBytes();
bool sd = _hexBox._byteProvider.SupportsDeleteBytes();
long pos = _hexBox._bytePos;
long sel = _hexBox._selectionLength;
int cp = _hexBox._byteCharacterPos;
if (
(!sw && pos != _hexBox._byteProvider.Length) ||
(!si && pos == _hexBox._byteProvider.Length))
{
return _hexBox.BasePreProcessMessage(ref m);
}
char c = (char)m.WParam.ToInt32();
if (RaiseKeyPress(c))
return true;
if (_hexBox.ReadOnly)
return true;
bool isInsertMode = (pos == _hexBox._byteProvider.Length);
// do insert when insertActive = true
if (!isInsertMode && si && _hexBox.InsertActive)
isInsertMode = true;
if (sd && si && sel > 0)
{
_hexBox._byteProvider.DeleteBytes(pos, sel);
isInsertMode = true;
cp = 0;
_hexBox.SetPosition(pos, cp);
}
_hexBox.ReleaseSelection();
byte b = _hexBox.ByteCharConverter.ToByte(c);
if (isInsertMode)
_hexBox._byteProvider.InsertBytes(pos, new byte[] { b });
else
_hexBox._byteProvider.WriteByte(pos, b);
PerformPosMoveRightByte();
_hexBox.Invalidate();
return true;
}
#endregion