|
와일탈출 님이 쓰신 글 :
: while 문을 돌면서 키보드 키가 눌러지는 것을 체크할수 있나요.
:
: while(1) {
: if(눌러진키가 엔터이면) break;
: }
: 이런식이 가능한가요...
: 지금 잠깐 해보니 아무키도 안 받아 들이던데...(TKeyboardState를 사용해서 해보았음)
윈도 프로그래밍의 개념을 이해하셔야 합니다.
도스(콘솔)에서는 main()의 시작부터 끝문장까지 차례차례 실행해나가는
절차식 프로그래밍 방법에 따르므로 프로그램 자체에서 루프를 돌리는
위와 같은 코드가 성립하지만,
윈도에서는 이와 같은 방법을 쓰면 안됩니다.
즉, 윈도에서는 메시지 루프라는 일종의 무한 루프가 OS자체에서 돌아가고 있는 겁니다.
사용자가 키보드를 누르면, WM_KEYDOWN 이라는 메시지(이벤트)가 발생하고,
메시지 큐라는 곳에 들어가게 됩니다.
메시지 루프에서는 메시지 큐에서 메시지를 읽어서 해당 메시지를 발생시킨 프로그램에
이 메시지를 보내고,
프로그램에서는 메시지를 받으면, 해당하는 메시지(이벤트) 핸들러 함수를 호출하게 됩니다.
즉, 프로그램이 함수를 호출하는 게 아니라, OS가 프로그램안의 함수를 호출(이런 함수를
callback 함수)라고 합니다.
이와 같은 방식을 event-driven programming이라 하며,
빌더에서는 WM_KEYDOWN 등의 윈도 메시지를 좀 더 추상화한 이벤트로 변환하여 처리합니다.
여기서는 포커스를 받는 컨트롤의 OnKeyDown이나 OnKeyPress 이벤트 핸들러(event handler)
함수를 만들고 그 함수 안에 입력 받은 후의 동작을 코딩하면 됩니다.
|