|
a()
{
for(int i=0;i<20;i++) Sleep(100);
}
//---------------------------------------------------------------------
void __fastcall TForm1::Edit1KeyDown(TObject *Sender, WORD &Key,
TShiftState Shift)
{
a();
MSG mes;
while ( PeekMessage(&mes, Edit1->Handle , WM_KEYDOWN, WM_KEYDOWN, PM_REMOVE ) == TRUE );
}
//---------------------------------------------------------------------------
//PeekMessage( (&mes, Edit1->Handle , WM_KEYFIRST, WM_KEYLAST) ; // 키보드에 관한 모든 메세지 삭제
//PeekMessage( (&mes, Edit1->Handle , 0, 0) // 모든 메세지 삭제
//PeekMessage( (&mes, Edit1->Handle , WM_MOUSEFIRST, WM_MOUSELAST) ; // 마우스에 관한 모든 메세지 삭제
그럼 즐겁게 ....
이용태 님이 쓰신 글 :
: WM_KEYDOWN이 발생하면 a()라는 함수가 실행됩니다.
:
: 근데.. 키보를 계속 누르고 있으면 WM_KEYDOWN메시지가 계속 발생할꺼고.. 메시지큐에 쌓이게 될겁니다.
:
: 그럼 a()라는 함수가 종료되면.. 그동안 쌓여있던 WM_KEYDOWN메시지가 처리될꺼고 a()가 다시 실행이 되는걸로 압니다.
:
: 그런데 문제는 a()가 실행되는 시간이 조금 됩니다. 대략 2초 정도 되는데요...
:
: a()가 실행되는 2초 동안에는 WM_KEYDOWN을 받아들이지 않게끔 할려고 합니다. 즉 a()가 실행되면서 받아들이는 WM_KEYDOWN 받지 않고 있다가, a()가 실행이 끝난 후에 WM_KEYDOWN를 받아 a()를 다시 실행시키고자 하는거죠..
:
: 아니면 다른 방법으로.. a()가 실행되는 동안 WM_KEYDOWN를 메시지 큐에 쌓아놓되, a()가 끝나면 메시지 큐를 비워버리는 방법도 괜찮을거 같기도 합니다.
:
: 서브클래싱을 해서 해결해볼려고 했지만 안되더군요...;;;
:
: 어떤 방법으로 하는것이 좋을지 답변 부탁드립니다.
|