……見返したら許せないバグがあるんで、訂正スマソ。

//アイテムを求める
ChangeItem = GetItemAt(X, Y);
if (ChangeItem == NULL || Cap->Visible == true) return;

のところ、
if (Cap->Visible == true) return;はGetItemの前にやらないと
ChangeItemが変わっちゃうんで駄目です。