0
点赞
收藏
分享

微信扫一扫

利用ProcessCmdKey处理键盘移动步长

SDKB英文 2023-03-13 阅读 45

    /// <summary>
/// Processes a command key.
/// </summary>
/// <param name="msg">A <see cref="Message"/>, passed by reference, that represents the window message to process.</param>
/// <param name="keyData">One of the <see cref="Keys"/> values that represents the key to process.</param>
/// <returns><c>true</c> if the character was processed by the control; otherwise, <c>false</c>.</returns>
[SuppressMessage("StyleCop.CSharp.DocumentationRules", "SA1600:ElementsMustBeDocumented", Justification = "Reviewed.")]
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
bool isDirectionKeyPressed = (keyData == Keys.Right || keyData == Keys.Left || keyData == Keys.Up || keyData == Keys.Down);
ModifierKeysType mkt = CommonUtil.GetModifierKeysType();
CommonUtil.OnKeyDown(this, mkt, new KeyEventArgs(keyData));

return base.ProcessCmdKey(ref msg, keyData);
}

        public static bool OnKeyDown(DrawArea drawArea, KeyEventArgs e)
{
ModifierKeysType mkt = GetModifierKeysType();
return OnKeyDown(drawArea, mkt, e);
}

public static bool OnKeyDown(DrawArea drawArea, ModifierKeysType mkt, KeyEventArgs e)
{
bool isShiftCtrlPressed = mkt.HasFlag(ModifierKeysType.CtrlShift);
bool isShiftPressed = mkt.HasFlag(ModifierKeysType.Shift);
bool isCtrlPressed = mkt.HasFlag(ModifierKeysType.Ctrl);
//Alt键按下时,用于复制对象
bool isAltPressed = mkt.HasFlag(ModifierKeysType.Alt);
var delta = (isShiftCtrlPressed) ? 20f : (isShiftPressed ? 10f : (isCtrlPressed ? 3f : 1f));
var keyData = e.KeyData;
bool isDirectionKeyPressed = (keyData == Keys.Right || keyData == Keys.Left || keyData == Keys.Up || keyData == Keys.Down);
Vector2 v2 = GetOffset(e, delta);
if (!isDirectionKeyPressed)
{
if (isAltPressed)
drawArea.GraphicsList.CopyAndPasteSelction(v2);
else
MoveSelectedObject(drawArea, v2);
}
else
MoveSelectedObject(drawArea, v2);

drawArea.Refresh();

return true;
}

public static ModifierKeysType GetModifierKeysType()
{
bool isAltPressed = (Control.ModifierKeys & Keys.Alt) == Keys.Alt;
bool isShiftPressed = (Control.ModifierKeys & Keys.Shift) == Keys.Shift;
bool isCtrlPressed = (Control.ModifierKeys & Keys.Control) == Keys.Control;

ModifierKeysType mkt = ModifierKeysType.None;
if (isAltPressed)
mkt |= ModifierKeysType.Alt;
if (isShiftPressed)
mkt |= ModifierKeysType.Shift;
if (isCtrlPressed)
mkt |= ModifierKeysType.Ctrl;

return mkt;
}

        /// <summary>
/// 修饰键类型 Modifier Keys Type
/// </summary>
public enum ModifierKeysType
{
None=0,
Alt=1,
Shift=2,
Ctrl=4,
AltShift=Alt | Shift,
CtrlShift=Ctrl | Shift,
CtrlAlt=Alt | Ctrl,
All = Ctrl | Alt | Shift,
}

举报

相关推荐

0 条评论