. 단축키 입력

취소/재실행에 필요한 모든 코드를 다 작성했다. 남은 일은 사용자의 요구가 있을 때 Undo, Redo 함수를 호출하면 된다. 이 명령은 호스트의 메뉴를 통할 수도 있고 컨트롤이 단축키를 입력받아 직접 실행할 수도 있다. 통상 취소 명령에 대한 단축키는 <Ctrl+Z>이며 재실행 명령에 대한 단축키는 <Ctrl+Y>인데 어떤 프로그램은 재실행 단축키로 <Ctrl+Shift+Z>를 사용하기도 한다. ApiEdit는 가장 일반적인 <Ctrl+Z>, <Ctrl+Y>를 취소/재실행 단축키로 사용할 것이다. 단축키를 입력받는 OnChar에 다음 코드를 작성한다.

 

void CApiEdit::OnChar(HWND hWnd, TCHAR ch, int cRepeat)

{

     TCHAR szChar[3];

     int i;

     BOOL bPrevSel;

 

     ....

    if (ch == 25) {

        if (CanRedo())

           Redo();

        return;

    }

    if (ch == 26) {

        if (CanUndo())

           Undo();

        return;

    }

 

     if ((ch < ‘ ‘ && ch != ‘\r’ && ch != ‘\t’) || ch==127)

          return;

     ....

 

취소, 재실행을 하기 전에 반드시 CanUndo, CanRedo 함수를 호출하여 현재 상태에서 취소, 재실행이 가능한지 조사해야 한다. 취소할 레코드도 없는데 취소 명령을 내려서는 곤란하다. Undo, Redo 함수는 이런 조건을 점검하지 않기 때문에 조건을 점검하는 일은 호출측의 책임이다. OnChar에 정의한 이 단축키는 당장은 사용되지 않는다. 왜냐하면 호스트 프로그램인 Dangeun의 액셀러레이터 테이블에 이미 이 두 키가 정의되어 있으며 액셀러레이터가 키입력을 먼저 가로채기 때문이다. 하지만 다음에 다른 호스트와 함께 사용될 때를 고려하여 ApiEdit가 스스로 단축키를 처리할 수 있도록 미리 준비해두었다.