|
SYS_COMMAND 메시지 가로채시면 됩니다.
헤더에
private: // User declarations
void __fastcall WndProc(Messages::TMessage &Msg);
메인프로그램에
전역변수
bool bClose;
버튼1 클릭부분 아래와 같이 수정
void __fastcall TForm1::Button1Click(TObject *Sender)
{
int k=0;
while(k<50)
{
this->Label1->Caption=k;
k++;
Sleep(100);
Application->ProcessMessages();
if (bClose == true) {
break;
Form1->Close();
}
}
}
아래 새로 추가
void __fastcall TForm1::WndProc(Messages::TMessage &Msg)
{
switch(Msg.Msg)
{
case WM_SYSCOMMAND:
if(Msg.WParam==SC_CLOSE);
{
bClose = true;
TForm::WndProc(Msg);
//return;
}
default:
TForm::WndProc(Msg);
}
}
작동테스트 하고 올립니다만 빌더가 주력이 아니라 문법상 잘못된 부분이 있을지 모르겠습니다.
WM_CLOSE 같은 메시지도 CASE 문에서 처리하면 작동합니다.
김도훈 님이 쓰신 글 :
: 프로그램이 돌다가 강제로 죽이는 걸 해보려고 합니다.
: 그래서 연습 삼아 이렇게 해봤는데....
:
: void __fastcall TForm1::Button1Click(TObject *Sender)
: {
: int k=0;
: while(k<50)
: {
: this->Label1->Caption=k;
: k++;
: Sleep(100);
: Application->ProcessMessages();
: }
:
: }
: //---------------------------------------------------------------------------
:
: void __fastcall TForm1::Button2Click(TObject *Sender)
: {
: PostMessage(Handle,WM_QUIT,0,0);
:
: }
:
: 루프가 끝날때 까지 프로그램이 끝나질 않는 군요...
: 제가 원래 하려는거 윈도우 창 오른쪽 위의 'x' 즉 종료를 누르면 그순간 프로그램이 끝나게 하도록 하고 싶습니다.
: 쓰레드를 사용 하지 않으면 안되는 건가요?
: 그리고 'x' 를 눌렀을때의 이벤트는 무엇인가요?
|