. 드래그 허용

ApiEdit는 마우스로 선택영역을 드래그해서 이동 및 복사를 할 수 있는 기능을 제공한다. 이 기능은 키보드에 손대지 않고 문서를 편집할 수 있다는 점에 있어서 무척 편리하며 마우스를 지원한다면 당연히 제공할 수 있는 기능이다. 하지만 사용자들의 좋지 않은 버릇 때문에 이 기능이 문제가 될 수도 있다. 글을 읽을 때 조용히 눈만 가지고 읽을 수도 있지만 그러자면 오른쪽 손이 심심해서 마우스로 읽고 있는 부분을 긁어 가면서 읽는 버릇이 있다.

대부분의 사람들이 이런 버릇을 가지고 있고 나도 마찬가지다. 그냥 조용히 블록을 선택해 가면서 읽는 사람도 있는가 하면 좀 심한 사람은 마우스를 마구 흔들어 가며 글을 읽기도 한다. 어떤 사람은 마우스를 닥치는 대로 클릭해 가며 읽는 사람도 있는데 이런 사람들을 보고 이른바 정서 불안 또는 애정 결핍이라고 한다.

그러다 보니 글을 읽다가 자기도 모르게 선택한 부분이 드래그되어서 문서가 엉망이 될 수도 있다. 읽고 있던 부분이 저 위로 올라가 버린다거나 어디로 도망가 버렸는지 찾을 수 없는 상황이 될 수도 있다. 누구든지 아마 이런 경험 한 번쯤은 있을 것이다. 그래서 아예 드래그 기능을 사용 금지 시킬 수 있는 옵션을 준비했다. 물론 설사 잘못 드래그했더라도 편집 취소를 하면 되므로 굳이 드래그를 금지시킬 것까지는 없지만 옵션이 있다고 해서 나쁠 것은 없으므로 이 옵션을 추가해보자. 아주 간단한 옵션이라 다음 조건문 하나만 추가하면 된다.

 

void CApiEdit::OnLButtonDown(HWND hWnd, BOOL fDoubleClick, int x, int y, UINT keyFlags)

{

     ....

     if (IsInSelection(x+xPos, y+yPos) && bReadOnly==FALSE && bAllowDrag) {

          bDragSel=TRUE;

          SetCapture(hWnd);

          bCapture=TRUE;

          return;

     }

     ....

 

bAllowDrag FALSE이면 선택영역 안이건 읽기 허용이건 무조건 bDragSel TRUE가 되지 못하도록 함으로써 드래그를 금지시켰다. bDragSel FALSE이면 드래그가 시작될 수 없기 때문에 OnMouseMove, OnLButtonUp의 코드는 고치지 않아도 된다. 정말 놀랍도록 간단하지 않은가? 설정이란 알고 보면 이렇게 단순하다.